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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/.github/workflows/melinda-node-tests.yml +1 -1
  2. package/dist/access-rights.js +1 -5
  3. package/dist/access-rights.js.map +1 -1
  4. package/dist/addMissingField336.js +1 -1
  5. package/dist/addMissingField336.js.map +1 -1
  6. package/dist/cyrillux-usemarcon-replacement.js +41 -45
  7. package/dist/cyrillux-usemarcon-replacement.js.map +1 -1
  8. package/dist/cyrillux.js +13 -17
  9. package/dist/cyrillux.js.map +1 -1
  10. package/dist/disambiguateSeriesStatements.js +3 -4
  11. package/dist/disambiguateSeriesStatements.js.map +1 -1
  12. package/dist/double-commas.js +2 -1
  13. package/dist/double-commas.js.map +1 -1
  14. package/dist/duplicates-ind1.js +1 -1
  15. package/dist/duplicates-ind1.js.map +1 -1
  16. package/dist/empty-fields.js +0 -4
  17. package/dist/empty-fields.js.map +1 -1
  18. package/dist/ending-punctuation.js +21 -49
  19. package/dist/ending-punctuation.js.map +1 -1
  20. package/dist/ending-whitespace.js +0 -4
  21. package/dist/ending-whitespace.js.map +1 -1
  22. package/dist/field-008-18-34-character-groups.js +4 -5
  23. package/dist/field-008-18-34-character-groups.js.map +1 -1
  24. package/dist/field-505-separators.js +8 -6
  25. package/dist/field-505-separators.js.map +1 -1
  26. package/dist/field-521-fix.js +5 -6
  27. package/dist/field-521-fix.js.map +1 -1
  28. package/dist/field-exclusion.js +5 -12
  29. package/dist/field-exclusion.js.map +1 -1
  30. package/dist/field-exclusion.spec.js +3 -5
  31. package/dist/field-exclusion.spec.js.map +1 -1
  32. package/dist/field-structure.js +2 -5
  33. package/dist/field-structure.js.map +1 -1
  34. package/dist/fields-present.js +1 -1
  35. package/dist/fields-present.js.map +1 -1
  36. package/dist/fields-present.spec.js +1 -1
  37. package/dist/fields-present.spec.js.map +1 -1
  38. package/dist/fix-33X.js +5 -6
  39. package/dist/fix-33X.js.map +1 -1
  40. package/dist/fix-country-codes.js +3 -4
  41. package/dist/fix-country-codes.js.map +1 -1
  42. package/dist/fix-language-codes.js +12 -9
  43. package/dist/fix-language-codes.js.map +1 -1
  44. package/dist/fixRelatorTerms.js +8 -8
  45. package/dist/fixRelatorTerms.js.map +1 -1
  46. package/dist/fixed-fields.js +1 -4
  47. package/dist/fixed-fields.js.map +1 -1
  48. package/dist/identical-fields.js +2 -3
  49. package/dist/identical-fields.js.map +1 -1
  50. package/dist/indicator-fixes.js +14 -15
  51. package/dist/indicator-fixes.js.map +1 -1
  52. package/dist/isbn-issn.js +8 -11
  53. package/dist/isbn-issn.js.map +1 -1
  54. package/dist/item-language.js +5 -12
  55. package/dist/item-language.js.map +1 -1
  56. package/dist/merge-fields/counterpartField.js +6 -8
  57. package/dist/merge-fields/counterpartField.js.map +1 -1
  58. package/dist/merge-fields/index.js +3 -3
  59. package/dist/merge-fields/index.js.map +1 -1
  60. package/dist/merge-fields/mergeConstraints.js +0 -1
  61. package/dist/merge-fields/mergeConstraints.js.map +1 -1
  62. package/dist/merge-fields/mergeField.js +12 -18
  63. package/dist/merge-fields/mergeField.js.map +1 -1
  64. package/dist/merge-fields/mergeIndicator.js +5 -5
  65. package/dist/merge-fields/mergeIndicator.js.map +1 -1
  66. package/dist/merge-fields/mergeOrAddPostprocess.js +6 -9
  67. package/dist/merge-fields/mergeOrAddPostprocess.js.map +1 -1
  68. package/dist/merge-fields/mergeOrAddSubfield.js +6 -8
  69. package/dist/merge-fields/mergeOrAddSubfield.js.map +1 -1
  70. package/dist/merge-fields/mergeSubfield.js +8 -8
  71. package/dist/merge-fields/mergeSubfield.js.map +1 -1
  72. package/dist/merge-fields/removeDuplicateSubfields.js +1 -2
  73. package/dist/merge-fields/removeDuplicateSubfields.js.map +1 -1
  74. package/dist/merge-fields/worldKnowledge.js +1 -1
  75. package/dist/merge-fields/worldKnowledge.js.map +1 -1
  76. package/dist/mergeField500Lisapainokset.js +0 -3
  77. package/dist/mergeField500Lisapainokset.js.map +1 -1
  78. package/dist/mergeRelatorTermFields.js +3 -3
  79. package/dist/mergeRelatorTermFields.js.map +1 -1
  80. package/dist/modernize-502.js +6 -6
  81. package/dist/modernize-502.js.map +1 -1
  82. package/dist/multiple-subfield-0.js +4 -4
  83. package/dist/multiple-subfield-0.js.map +1 -1
  84. package/dist/non-breaking-space.js +0 -4
  85. package/dist/non-breaking-space.js.map +1 -1
  86. package/dist/normalize-dashes.js +5 -4
  87. package/dist/normalize-dashes.js.map +1 -1
  88. package/dist/normalize-identifiers.js +6 -6
  89. package/dist/normalize-identifiers.js.map +1 -1
  90. package/dist/normalize-qualifying-information.js +4 -4
  91. package/dist/normalize-qualifying-information.js.map +1 -1
  92. package/dist/normalize-utf8-diacritics.js +7 -7
  93. package/dist/normalize-utf8-diacritics.js.map +1 -1
  94. package/dist/normalizeFieldForComparison.js +21 -20
  95. package/dist/normalizeFieldForComparison.js.map +1 -1
  96. package/dist/normalizeSubfieldValueForComparison.js +1 -2
  97. package/dist/normalizeSubfieldValueForComparison.js.map +1 -1
  98. package/dist/prepublicationUtils.js +3 -3
  99. package/dist/prepublicationUtils.js.map +1 -1
  100. package/dist/punctuation/index.js +14 -31
  101. package/dist/punctuation/index.js.map +1 -1
  102. package/dist/punctuation2.js +9 -10
  103. package/dist/punctuation2.js.map +1 -1
  104. package/dist/reindexSubfield6OccurenceNumbers.js +8 -9
  105. package/dist/reindexSubfield6OccurenceNumbers.js.map +1 -1
  106. package/dist/removeDuplicateDataFields.js +18 -20
  107. package/dist/removeDuplicateDataFields.js.map +1 -1
  108. package/dist/removeInferiorDataFields.js +16 -19
  109. package/dist/removeInferiorDataFields.js.map +1 -1
  110. package/dist/resolvable-ext-references-melinda.js +4 -8
  111. package/dist/resolvable-ext-references-melinda.js.map +1 -1
  112. package/dist/resolveOrphanedSubfield6s.js +9 -9
  113. package/dist/resolveOrphanedSubfield6s.js.map +1 -1
  114. package/dist/sanitize-vocabulary-source-codes.js +9 -9
  115. package/dist/sanitize-vocabulary-source-codes.js.map +1 -1
  116. package/dist/sort-tags.js +2 -2
  117. package/dist/sort-tags.js.map +1 -1
  118. package/dist/sortFields.js +4 -9
  119. package/dist/sortFields.js.map +1 -1
  120. package/dist/sortRelatorTerms.js +4 -5
  121. package/dist/sortRelatorTerms.js.map +1 -1
  122. package/dist/sortSubfields.js +6 -7
  123. package/dist/sortSubfields.js.map +1 -1
  124. package/dist/stripPunctuation.js +2 -2
  125. package/dist/stripPunctuation.js.map +1 -1
  126. package/dist/subfield-exclusion.js +4 -11
  127. package/dist/subfield-exclusion.js.map +1 -1
  128. package/dist/subfield6Utils.js +12 -11
  129. package/dist/subfield6Utils.js.map +1 -1
  130. package/dist/subfield8Utils.js +8 -9
  131. package/dist/subfield8Utils.js.map +1 -1
  132. package/dist/subfieldValueNormalizations.js +5 -8
  133. package/dist/subfieldValueNormalizations.js.map +1 -1
  134. package/dist/sync-007-and-300.js +8 -8
  135. package/dist/sync-007-and-300.js.map +1 -1
  136. package/dist/translate-terms.js +5 -6
  137. package/dist/translate-terms.js.map +1 -1
  138. package/dist/typeOfDate-008.js +3 -4
  139. package/dist/typeOfDate-008.js.map +1 -1
  140. package/dist/unicode-decomposition.js +1 -1
  141. package/dist/unicode-decomposition.js.map +1 -1
  142. package/dist/update-field-540.js +5 -6
  143. package/dist/update-field-540.js.map +1 -1
  144. package/dist/urn.js +4 -9
  145. package/dist/urn.js.map +1 -1
  146. package/dist/utils.js +5 -9
  147. package/dist/utils.js.map +1 -1
  148. package/eslint.config.mjs +53 -0
  149. package/package.json +12 -13
  150. package/src/access-rights.js +4 -4
  151. package/src/addMissingField336.js +1 -1
  152. package/src/cyrillux-usemarcon-replacement.js +38 -38
  153. package/src/cyrillux.js +14 -14
  154. package/src/disambiguateSeriesStatements.js +3 -3
  155. package/src/double-commas.js +2 -2
  156. package/src/duplicates-ind1.js +1 -1
  157. package/src/empty-fields.js +4 -4
  158. package/src/ending-punctuation.js +46 -49
  159. package/src/ending-whitespace.js +0 -2
  160. package/src/field-008-18-34-character-groups.js +5 -5
  161. package/src/field-505-separators.js +6 -6
  162. package/src/field-521-fix.js +6 -6
  163. package/src/field-exclusion.js +12 -12
  164. package/src/field-exclusion.spec.js +4 -4
  165. package/src/field-structure.js +5 -5
  166. package/src/fields-present.js +1 -1
  167. package/src/fields-present.spec.js +1 -1
  168. package/src/fix-33X.js +5 -5
  169. package/src/fix-country-codes.js +3 -3
  170. package/src/fix-language-codes.js +10 -9
  171. package/src/fixRelatorTerms.js +8 -8
  172. package/src/fixed-fields.js +3 -3
  173. package/src/identical-fields.js +3 -3
  174. package/src/indicator-fixes.js +15 -15
  175. package/src/isbn-issn.js +11 -11
  176. package/src/item-language.js +10 -10
  177. package/src/merge-fields/counterpartField.js +7 -7
  178. package/src/merge-fields/index.js +3 -3
  179. package/src/merge-fields/mergeConstraints.js +1 -1
  180. package/src/merge-fields/mergeField.js +16 -17
  181. package/src/merge-fields/mergeIndicator.js +5 -5
  182. package/src/merge-fields/mergeOrAddPostprocess.js +9 -9
  183. package/src/merge-fields/mergeOrAddSubfield.js +6 -6
  184. package/src/merge-fields/mergeSubfield.js +8 -8
  185. package/src/merge-fields/removeDuplicateSubfields.js +1 -2
  186. package/src/merge-fields/worldKnowledge.js +1 -1
  187. package/src/mergeField500Lisapainokset.js +0 -2
  188. package/src/mergeRelatorTermFields.js +3 -3
  189. package/src/modernize-502.js +6 -6
  190. package/src/multiple-subfield-0.js +4 -4
  191. package/src/non-breaking-space.js +0 -2
  192. package/src/normalize-dashes.js +4 -4
  193. package/src/normalize-identifiers.js +6 -6
  194. package/src/normalize-qualifying-information.js +4 -4
  195. package/src/normalize-utf8-diacritics.js +7 -7
  196. package/src/normalizeFieldForComparison.js +20 -20
  197. package/src/normalizeSubfieldValueForComparison.js +1 -1
  198. package/src/prepublicationUtils.js +3 -3
  199. package/src/punctuation/index.js +29 -29
  200. package/src/punctuation2.js +10 -10
  201. package/src/reindexSubfield6OccurenceNumbers.js +9 -9
  202. package/src/removeDuplicateDataFields.js +21 -23
  203. package/src/removeInferiorDataFields.js +19 -19
  204. package/src/resolvable-ext-references-melinda.js +8 -8
  205. package/src/resolveOrphanedSubfield6s.js +9 -9
  206. package/src/sanitize-vocabulary-source-codes.js +8 -8
  207. package/src/sort-tags.js +2 -2
  208. package/src/sortFields.js +6 -6
  209. package/src/sortRelatorTerms.js +5 -5
  210. package/src/sortSubfields.js +7 -7
  211. package/src/stripPunctuation.js +2 -2
  212. package/src/subfield-exclusion.js +11 -11
  213. package/src/subfield6Utils.js +11 -11
  214. package/src/subfield8Utils.js +6 -9
  215. package/src/subfieldValueNormalizations.js +5 -7
  216. package/src/sync-007-and-300.js +8 -8
  217. package/src/translate-terms.js +3 -5
  218. package/src/typeOfDate-008.js +3 -3
  219. package/src/unicode-decomposition.js +1 -1
  220. package/src/update-field-540.js +6 -6
  221. package/src/urn.js +8 -6
  222. package/src/utils.js +8 -8
  223. package/.eslintignore +0 -1
@@ -11,7 +11,7 @@ jobs:
11
11
 
12
12
  strategy:
13
13
  matrix:
14
- node-version: [18.x, 20.x, 22.x, 23.x]
14
+ node-version: [20.x, 22.x, 24.x]
15
15
  # See supported Node.js release schedule at https://nodejs.org/en/about/releases/
16
16
 
17
17
  steps:
@@ -23,7 +23,6 @@ function _default(isViolaRecord = false) {
23
23
 
24
24
  // If material is electronic add theis if missing
25
25
  if (!hasTag(record, '506', sf506) && !hasTag(record, '506', sf506old)) {
26
- // eslint-disable-line functional/no-conditional-statements
27
26
  const subfield9 = isViolaRecord ? [{
28
27
  code: '9',
29
28
  value: 'VIOLA<KEEP>'
@@ -53,9 +52,7 @@ function _default(isViolaRecord = false) {
53
52
 
54
53
  // Change phrase from old to new if field with old phrase is found
55
54
  if (!hasTag(record, '506', sf506) && hasTag(record, '506', sf506old)) {
56
- // eslint-disable-line functional/no-conditional-statements
57
- record.fields // eslint-disable-line functional/immutable-data
58
- .find(f => f.tag === '506' && sf506old.every(({
55
+ record.fields.find(f => f.tag === '506' && sf506old.every(({
59
56
  code,
60
57
  value
61
58
  }) => f.subfields.some(sf => sf.code === code && value.test(sf.value)))).subfields.find(sf => sf506old.every(({
@@ -64,7 +61,6 @@ function _default(isViolaRecord = false) {
64
61
  }) => sf.code === code && value.test(sf.value))).value = 'Aineisto on käytettävissä vapaakappaletyöasemilla.';
65
62
  }
66
63
  if (!hasTag(record, '540', sf540) && !isViolaRecord) {
67
- // eslint-disable-line functional/no-conditional-statements
68
64
  record.insertField({
69
65
  tag: '540',
70
66
  subfields: [{
@@ -1 +1 @@
1
- {"version":3,"file":"access-rights.js","names":["_utils","require","_default","isViolaRecord","sf506","code","value","sf506old","sf540","fix","record","hasTag","subfield9","staticSubfields","insertField","tag","ind1","subfields","concat","fields","find","f","every","some","sf","test","validate","isElectronicMaterial","valid","description","rec","sfcv"],"sources":["../src/access-rights.js"],"sourcesContent":["import {isElectronicMaterial} from './utils';\n\nexport default function (isViolaRecord = false) {\n const sf506 = [{code: 'a', value: /aineisto on käytettävissä vapaakappaletyöasemilla/ui}];\n const sf506old = [{code: 'a', value: /aineisto on käytettävissä vapaakappalekirjastoissa/ui}];\n const sf540 = [{code: 'c', value: /laki kulttuuriaineistojen tallettamisesta ja säilyttämisestä/ui}];\n\n function fix(record) {\n // If printed do nothing\n\n // If material is electronic add theis if missing\n if (!hasTag(record, '506', sf506) && !hasTag(record, '506', sf506old)) { // eslint-disable-line functional/no-conditional-statements\n const subfield9 = isViolaRecord ? [{code: '9', value: 'VIOLA<KEEP>'}] : [{code: '9', value: 'FENNI<KEEP>'}];\n const staticSubfields = [\n {\n code: 'a',\n value: 'Aineisto on käytettävissä vapaakappaletyöasemilla.'\n }, {\n code: 'f',\n value: 'Online access with authorization'\n }, {\n code: '2',\n value: 'star'\n }, {\n code: '5',\n value: 'FI-Vapaa'\n }\n ];\n\n record.insertField({\n tag: '506',\n ind1: '1',\n subfields: staticSubfields.concat(subfield9)\n });\n }\n\n // Change phrase from old to new if field with old phrase is found\n if (!hasTag(record, '506', sf506) && hasTag(record, '506', sf506old)) { // eslint-disable-line functional/no-conditional-statements\n record.fields // eslint-disable-line functional/immutable-data\n .find(f => f.tag === '506' && sf506old.every(({code, value}) => f.subfields.some(sf => sf.code === code && value.test(sf.value))))\n .subfields.find(sf => sf506old.every(({code, value}) => sf.code === code && value.test(sf.value)))\n .value = 'Aineisto on käytettävissä vapaakappaletyöasemilla.';\n }\n\n if (!hasTag(record, '540', sf540) && !isViolaRecord) { // eslint-disable-line functional/no-conditional-statements\n record.insertField({\n tag: '540',\n subfields: [\n {\n code: 'a',\n value: 'Aineisto on käytettävissä tutkimus- ja muihin tarkoituksiin;'\n }, {\n code: 'b',\n value: 'Kansalliskirjasto;'\n }, {\n code: 'c',\n value: 'Laki kulttuuriaineistojen tallettamisesta ja säilyttämisestä'\n }, {\n code: 'u',\n value: 'http://www.finlex.fi/fi/laki/ajantasa/2007/20071433'\n }, {\n code: '5',\n value: 'FI-Vapaa'\n }, {\n code: '9',\n value: 'FENNI<KEEP>'\n }\n ]\n });\n }\n\n return true;\n }\n\n function validate(record) {\n // if not electronic skip this validator\n if (!isElectronicMaterial(record)) {\n return {valid: true};\n }\n\n return {valid: hasTag(record, '506', sf506) && (hasTag(record, '540', sf540) || isViolaRecord)};\n }\n\n return {\n description: 'Adds access rights fields for a record (if not existing)',\n validate,\n fix\n };\n\n function hasTag(rec, tag, sfcv) {\n return rec.fields.some(f => f.tag === tag && sfcv.every(({code, value}) => f.subfields.some(sf => sf.code === code && value.test(sf.value))));\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"access-rights.js","names":["_utils","require","_default","isViolaRecord","sf506","code","value","sf506old","sf540","fix","record","hasTag","subfield9","staticSubfields","insertField","tag","ind1","subfields","concat","fields","find","f","every","some","sf","test","validate","isElectronicMaterial","valid","description","rec","sfcv"],"sources":["../src/access-rights.js"],"sourcesContent":["import {isElectronicMaterial} from './utils';\n\nexport default function (isViolaRecord = false) {\n const sf506 = [{code: 'a', value: /aineisto on käytettävissä vapaakappaletyöasemilla/ui}];\n const sf506old = [{code: 'a', value: /aineisto on käytettävissä vapaakappalekirjastoissa/ui}];\n const sf540 = [{code: 'c', value: /laki kulttuuriaineistojen tallettamisesta ja säilyttämisestä/ui}];\n\n function fix(record) {\n // If printed do nothing\n\n // If material is electronic add theis if missing\n if (!hasTag(record, '506', sf506) && !hasTag(record, '506', sf506old)) {\n const subfield9 = isViolaRecord ? [{code: '9', value: 'VIOLA<KEEP>'}] : [{code: '9', value: 'FENNI<KEEP>'}];\n const staticSubfields = [\n {\n code: 'a',\n value: 'Aineisto on käytettävissä vapaakappaletyöasemilla.'\n }, {\n code: 'f',\n value: 'Online access with authorization'\n }, {\n code: '2',\n value: 'star'\n }, {\n code: '5',\n value: 'FI-Vapaa'\n }\n ];\n\n record.insertField({\n tag: '506',\n ind1: '1',\n subfields: staticSubfields.concat(subfield9)\n });\n }\n\n // Change phrase from old to new if field with old phrase is found\n if (!hasTag(record, '506', sf506) && hasTag(record, '506', sf506old)) {\n record.fields\n .find(f => f.tag === '506' && sf506old.every(({code, value}) => f.subfields.some(sf => sf.code === code && value.test(sf.value))))\n .subfields.find(sf => sf506old.every(({code, value}) => sf.code === code && value.test(sf.value)))\n .value = 'Aineisto on käytettävissä vapaakappaletyöasemilla.';\n }\n\n if (!hasTag(record, '540', sf540) && !isViolaRecord) {\n record.insertField({\n tag: '540',\n subfields: [\n {\n code: 'a',\n value: 'Aineisto on käytettävissä tutkimus- ja muihin tarkoituksiin;'\n }, {\n code: 'b',\n value: 'Kansalliskirjasto;'\n }, {\n code: 'c',\n value: 'Laki kulttuuriaineistojen tallettamisesta ja säilyttämisestä'\n }, {\n code: 'u',\n value: 'http://www.finlex.fi/fi/laki/ajantasa/2007/20071433'\n }, {\n code: '5',\n value: 'FI-Vapaa'\n }, {\n code: '9',\n value: 'FENNI<KEEP>'\n }\n ]\n });\n }\n\n return true;\n }\n\n function validate(record) {\n // if not electronic skip this validator\n if (!isElectronicMaterial(record)) {\n return {valid: true};\n }\n\n return {valid: hasTag(record, '506', sf506) && (hasTag(record, '540', sf540) || isViolaRecord)};\n }\n\n return {\n description: 'Adds access rights fields for a record (if not existing)',\n validate,\n fix\n };\n\n function hasTag(rec, tag, sfcv) {\n return rec.fields.some(f => f.tag === tag && sfcv.every(({code, value}) => f.subfields.some(sf => sf.code === code && value.test(sf.value))));\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEe,SAAAC,SAAUC,aAAa,GAAG,KAAK,EAAE;EAC9C,MAAMC,KAAK,GAAG,CAAC;IAACC,IAAI,EAAE,GAAG;IAAEC,KAAK,EAAE;EAAqD,CAAC,CAAC;EACzF,MAAMC,QAAQ,GAAG,CAAC;IAACF,IAAI,EAAE,GAAG;IAAEC,KAAK,EAAE;EAAsD,CAAC,CAAC;EAC7F,MAAME,KAAK,GAAG,CAAC;IAACH,IAAI,EAAE,GAAG;IAAEC,KAAK,EAAE;EAAgE,CAAC,CAAC;EAEpG,SAASG,GAAGA,CAACC,MAAM,EAAE;IACnB;;IAEA;IACA,IAAI,CAACC,MAAM,CAACD,MAAM,EAAE,KAAK,EAAEN,KAAK,CAAC,IAAI,CAACO,MAAM,CAACD,MAAM,EAAE,KAAK,EAAEH,QAAQ,CAAC,EAAE;MACrE,MAAMK,SAAS,GAAGT,aAAa,GAAG,CAAC;QAACE,IAAI,EAAE,GAAG;QAAEC,KAAK,EAAE;MAAa,CAAC,CAAC,GAAG,CAAC;QAACD,IAAI,EAAE,GAAG;QAAEC,KAAK,EAAE;MAAa,CAAC,CAAC;MAC3G,MAAMO,eAAe,GAAG,CACtB;QACER,IAAI,EAAE,GAAG;QACTC,KAAK,EAAE;MACT,CAAC,EAAE;QACDD,IAAI,EAAE,GAAG;QACTC,KAAK,EAAE;MACT,CAAC,EAAE;QACDD,IAAI,EAAE,GAAG;QACTC,KAAK,EAAE;MACT,CAAC,EAAE;QACDD,IAAI,EAAE,GAAG;QACTC,KAAK,EAAE;MACT,CAAC,CACF;MAEDI,MAAM,CAACI,WAAW,CAAC;QACjBC,GAAG,EAAE,KAAK;QACVC,IAAI,EAAE,GAAG;QACTC,SAAS,EAAEJ,eAAe,CAACK,MAAM,CAACN,SAAS;MAC7C,CAAC,CAAC;IACJ;;IAEA;IACA,IAAI,CAACD,MAAM,CAACD,MAAM,EAAE,KAAK,EAAEN,KAAK,CAAC,IAAIO,MAAM,CAACD,MAAM,EAAE,KAAK,EAAEH,QAAQ,CAAC,EAAE;MACpEG,MAAM,CAACS,MAAM,CACVC,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACN,GAAG,KAAK,KAAK,IAAIR,QAAQ,CAACe,KAAK,CAAC,CAAC;QAACjB,IAAI;QAAEC;MAAK,CAAC,KAAKe,CAAC,CAACJ,SAAS,CAACM,IAAI,CAACC,EAAE,IAAIA,EAAE,CAACnB,IAAI,KAAKA,IAAI,IAAIC,KAAK,CAACmB,IAAI,CAACD,EAAE,CAAClB,KAAK,CAAC,CAAC,CAAC,CAAC,CACjIW,SAAS,CAACG,IAAI,CAACI,EAAE,IAAIjB,QAAQ,CAACe,KAAK,CAAC,CAAC;QAACjB,IAAI;QAAEC;MAAK,CAAC,KAAKkB,EAAE,CAACnB,IAAI,KAAKA,IAAI,IAAIC,KAAK,CAACmB,IAAI,CAACD,EAAE,CAAClB,KAAK,CAAC,CAAC,CAAC,CACjGA,KAAK,GAAG,oDAAoD;IACjE;IAEA,IAAI,CAACK,MAAM,CAACD,MAAM,EAAE,KAAK,EAAEF,KAAK,CAAC,IAAI,CAACL,aAAa,EAAE;MACnDO,MAAM,CAACI,WAAW,CAAC;QACjBC,GAAG,EAAE,KAAK;QACVE,SAAS,EAAE,CACT;UACEZ,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC,EAAE;UACDD,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC,EAAE;UACDD,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC,EAAE;UACDD,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC,EAAE;UACDD,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC,EAAE;UACDD,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC;MAEL,CAAC,CAAC;IACJ;IAEA,OAAO,IAAI;EACb;EAEA,SAASoB,QAAQA,CAAChB,MAAM,EAAE;IACxB;IACA,IAAI,CAAC,IAAAiB,2BAAoB,EAACjB,MAAM,CAAC,EAAE;MACjC,OAAO;QAACkB,KAAK,EAAE;MAAI,CAAC;IACtB;IAEA,OAAO;MAACA,KAAK,EAAEjB,MAAM,CAACD,MAAM,EAAE,KAAK,EAAEN,KAAK,CAAC,KAAKO,MAAM,CAACD,MAAM,EAAE,KAAK,EAAEF,KAAK,CAAC,IAAIL,aAAa;IAAC,CAAC;EACjG;EAEA,OAAO;IACL0B,WAAW,EAAE,0DAA0D;IACvEH,QAAQ;IACRjB;EACF,CAAC;EAED,SAASE,MAAMA,CAACmB,GAAG,EAAEf,GAAG,EAAEgB,IAAI,EAAE;IAC9B,OAAOD,GAAG,CAACX,MAAM,CAACI,IAAI,CAACF,CAAC,IAAIA,CAAC,CAACN,GAAG,KAAKA,GAAG,IAAIgB,IAAI,CAACT,KAAK,CAAC,CAAC;MAACjB,IAAI;MAAEC;IAAK,CAAC,KAAKe,CAAC,CAACJ,SAAS,CAACM,IAAI,CAACC,EAAE,IAAIA,EAAE,CAACnB,IAAI,KAAKA,IAAI,IAAIC,KAAK,CAACmB,IAAI,CAACD,EAAE,CAAClB,KAAK,CAAC,CAAC,CAAC,CAAC;EAC/I;AACF","ignoreList":[]}
@@ -31,7 +31,7 @@ function _default() {
31
31
  valid: true
32
32
  };
33
33
  if (newFields.length) {
34
- newFields.forEach(f => record.insertField(f));
34
+ newFields.forEach(f => record.insertField(f)); // eslint-disable-line array-callback-return
35
35
  return res;
36
36
  }
37
37
  return res;
@@ -1 +1 @@
1
- {"version":3,"file":"addMissingField336.js","names":["_utils","require","_field33XUtils","description","_default","validate","fix","record","nvdebug","newFields","getMissing336s","length","res","message","valid","forEach","f","insertField","strings","map","fieldToString","tmp","join","msg","guessMissingBsForComputerFile","field008","get","typeOfComputerFile","value","undefined","includes","guess","guessUsingFileFields","characteristics","some","str","match","guessMissingBsForBookAndContinuingResource","formOfItem","guessMissingBsForMap","getFormOfItem","fields","tag","guessMissing336Bs","typeOfRecord","getTypeOfRecord","codeToField","b","catLang","a","map336CodeToTerm","data","ind1","ind2","subfields","code","f336","bees","getCatalogingLanguage"],"sources":["../src/addMissingField336.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport {fieldToString, getCatalogingLanguage, nvdebug} from './utils';\nimport {getFormOfItem, map336CodeToTerm} from './field33XUtils';\n\nconst description = 'Add missing 336 field(s)';\n\n// const multimediaRegexp = /multimedia/ui;\n\nexport default function () {\n\n return {\n description, validate, fix\n };\n\n function fix(record) {\n nvdebug(`FIX ${description}...`);\n const newFields = getMissing336s(record);\n nvdebug(` GOT ${newFields.length}...`);\n // FFS: we actually need newFields array here! Videogame, for example, might be\n // 336 ## ‡a kaksiulotteinen liikkuva kuva ‡b tdi ‡2 rdacontent\n // 336 ## ‡a tietokoneohjelma ‡b cop ‡2 rdacontent\n const res = {message: [], fix: [], valid: true};\n if (newFields.length) {\n newFields.forEach(f => record.insertField(f));\n return res;\n }\n return res;\n }\n\n function validate(record) {\n nvdebug(`VALIDATE ${description}...`);\n const newFields = getMissing336s(record);\n if (newFields.length === 0) {\n return {message: [], valid: true};\n }\n const strings = newFields.map(f => fieldToString(f));\n const tmp = strings.join('\\', \\'');\n const msg = `${description}: '${tmp}'`;\n return {message: [msg], valid: false};\n }\n\n function guessMissingBsForComputerFile(record) {\n const [field008] = record.get('008');\n const typeOfComputerFile = field008 && field008.value ? field008.value[26] : undefined;\n\n if (typeOfComputerFile) {\n if (['d', 'e'].includes(typeOfComputerFile)) { // d: N=400, e: N=50\n return ['txt'];\n }\n if (typeOfComputerFile === 'g') { // Videogame (N=10000+)\n // 2D moving image/tdi is an educated guess. Might be wrong for 3D games and Infocom-style text-based games.\n // Ref.: https://www.kiwi.fi/pages/viewpage.action?pageId=115966063#PelienRDAohje-Pelienjaottelu:videopelitjafyysisetpelit\n return ['tdi', 'cop'];\n }\n if (['b', 'f'].includes(typeOfComputerFile)) { // b: N=176, f: N=2\n return ['cop'];\n }\n if (['a', 'c'].includes(typeOfComputerFile)) { // c: N=152, a: N=36\n return ['cod'];\n }\n if (typeOfComputerFile === 'h') { // h: N=44\n return ['snd'];\n }\n }\n\n // ADD 256/300/516/XXX-based educated guesses here\n const guess = guessUsingFileFields();\n if (guess) {\n return guess;\n }\n function guessUsingFileFields() {\n const characteristics = record.get('(256|516)').map(f => fieldToString(f));\n if (characteristics.some(str => str.match(/(?:ohjelma)/gui))) {\n return ['cop'];\n }\n if (characteristics.some(str => str.match(/(?:daisy)/gui))) {\n return ['spw', 'txt']; // The convention is to put just 'spw' but this is technically correct\n }\n if (characteristics.some(str => str.match(/(?:äänikirja)/gui))) {\n return ['spw']; // This should be ['spw', 'txt'] but who am I to change conventions...\n }\n if (characteristics.some(str => str.match(/(?:book|e-bok|e-diss|e-avhand|kirja|e-thesis|tekstitiedosto|tidskrift|verkkoartikkeli|verkkokirja|verkkolehti)/gui))) {\n return ['txt'];\n }\n if (characteristics.some(str => str.match(/(?:peli)/gui))) {\n return ['tdi', 'cop'];\n }\n if (characteristics.some(str => str.match(/(?:data|tietokanta)/gui))) {\n return ['cod'];\n }\n if (characteristics.some(str => str.match(/(?:verkkoaineisto.*[0-9]\\] s|PDF)/gui)) || characteristics.some(str => str.match(/\\b(?:text|tekstiä?)\\b/gui))) {\n return ['txt'];\n }\n if (characteristics.some(str => str.match(/(?:elokuva|liikkuva kuva)/gui))) {\n return ['tdi'];\n }\n if (characteristics.some(str => str.match(/(?:kartta)/gui))) {\n return ['cri']; // cri or crd, close enough anyhow, I guess\n }\n if (characteristics.some(str => str.match(/\\b(?:kuvi?a)\\b/gui))) {\n return ['tdi'];\n }\n\n return undefined;\n }\n\n\n if (['i', 'j', 'm'].includes(typeOfComputerFile)) { // (i: N=4800, m: N=566, j: N=111 )\n // Can we use field 300/516/256 to improve guess?\n return ['xxx'];\n }\n return ['zzz']; // unspecified\n }\n\n /*\n function deriveLanguageMaterials336sFrom007(record) {\n const categoryOfMaterial = [ // 007/00\n {category: 'a', rdacontent: 'cri'}, // cartographic image <- looks like a MP that has been classified as BK... One more reason to comment these..\n {category: 'c', rdacontent: 'txt'},\n {category: 'g', rdacontent: 'sti'},\n {vategory: 'h', rdacontent: 'txt'},\n {category: 'k', rdacontent: 'sti'},\n {category: 'v', rdacontent: 'tdi'}\n ];\n\n // What if there are multiple 007 fields?\n const [f007] = record.fields.get('007');\n if (f007) {\n const row = categoryOfMaterial.filter(row => row.category === f007[0]);\n if (row) {\n return [row.rdacontent];\n }\n }\n return [];\n }\n */\n\n function guessMissingBsForBookAndContinuingResource(record, formOfItem) {\n\n\n // This is from very old crap from usemarcon-cyrillux, but me not like it at all!\n /*\n const f245h = getTitleMedium(record);\n if (f245h && !multimediaRegexp.test(f245h)) {\n const result = deriveLanguageMaterials336sFrom007(record); // Base result on 007/00...\n if (result) {\n return result;\n }\n }\n */\n\n //const bibliographicalLevel = record.getBibliograpicLevel(); // Bloody h-drop typo...\n //const isBis = ['b', 'i', 's'].includes(bibliographicalLevel);\n //if (!isBis) {\n if (formOfItem === 'f') {\n return ['tct']; // tactile text\n }\n return ['txt']; // Default BK format is text\n }\n\n function guessMissingBsForMap(record) {\n const formOfItem = getFormOfItem(record);\n // Is braille and is not a model (we have 0). Changed the original usemarcon rule 007/01!=q to 007/01=q\n if (formOfItem === 'f' && record.fields.some(f => f.tag === '007' && f.value[0] === 'a' && f.value[1] === 'q')) {\n return ['crt']; // Cartographic tactile image\n }\n const [field008] = record.get('008');\n if (field008 && field008.value[25] === 'd') { // globe (cool, but we really don't have these)\n return ['crf']; // map 3D form\n }\n return ['cri']; // default cartographic image\n }\n\n function guessMissing336Bs(record) {\n const typeOfRecord = record.getTypeOfRecord();\n\n if (typeOfRecord === 'i') {\n return ['spw'];\n }\n if (typeOfRecord === 'j') {\n return ['prm']; // performed music\n }\n\n if (typeOfRecord === 'e' || typeOfRecord === 'f') {\n return guessMissingBsForMap(record);\n }\n\n const formOfItem = getFormOfItem(record);\n\n if (typeOfRecord === 'k') {\n if (formOfItem === 'f') {\n return ['tci']; // tactile image\n }\n return ['sti'];\n }\n\n if (typeOfRecord === 'c' || typeOfRecord === 'd') {\n if (formOfItem === 'f') {\n return ['tcm']; // tactile notated music\n }\n return ['ntm']; // notated music\n }\n\n if (typeOfRecord === 'g') {\n if (record.fields.some(f => f.tag === '007' && f.value[0] === 'g')) {\n return ['sti']; // still image\n }\n if (record.fields.some(f => f.tag === '007' && ['m', 'v', 'c'].includes(f.value[0]))) { // 'c' is a bit iffy, but I'll tune it only if it makes an error...\n return ['tdi']; // 2d moving pic\n }\n }\n\n if (typeOfRecord === 'm') { // electronic\n return guessMissingBsForComputerFile(record);\n }\n\n if (typeOfRecord === 'a' || typeOfRecord === 't') {\n return guessMissingBsForBookAndContinuingResource(record, formOfItem);\n }\n\n // Note that 245$h should trigger LDR/06:a or t =>o change at some earlier point (outside the scope of this module)\n if (typeOfRecord === 'o' || typeOfRecord === 'p') { // o: Kit p: Mixed\n if (['d', 'r'].includes(formOfItem)) { // d=isoteksti, r=eye-readable print\n return ['txt'];\n }\n // Not much I can guess from 300 etc\n return ['xxx']; // other\n }\n if (typeOfRecord === 'r') { // three-dimensional form\n return ['tdf'];\n }\n return ['zzz']; // unspecified\n }\n\n\n function codeToField(b, catLang) {\n const a = map336CodeToTerm(b, catLang);\n const data = {tag: '336', ind1: ' ', ind2: ' ', subfields: [\n {code: 'a', value: a},\n {code: 'b', value: b},\n {code: '2', value: 'rdacontent'}\n ]};\n\n return data;\n }\n\n function getMissing336s(record) {\n const f336 = record.get('336');\n if (f336.length > 0) {\n return [];\n }\n\n const bees = guessMissing336Bs(record); // bees = b-subfields\n nvdebug(` WE HAVE ${bees.length} BEES: ${bees.join(', ')}`);\n\n\n return bees.map(b => codeToField(b, getCatalogingLanguage(record, 'fin')));\n }\n}\n\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"addMissingField336.js","names":["_utils","require","_field33XUtils","description","_default","validate","fix","record","nvdebug","newFields","getMissing336s","length","res","message","valid","forEach","f","insertField","strings","map","fieldToString","tmp","join","msg","guessMissingBsForComputerFile","field008","get","typeOfComputerFile","value","undefined","includes","guess","guessUsingFileFields","characteristics","some","str","match","guessMissingBsForBookAndContinuingResource","formOfItem","guessMissingBsForMap","getFormOfItem","fields","tag","guessMissing336Bs","typeOfRecord","getTypeOfRecord","codeToField","b","catLang","a","map336CodeToTerm","data","ind1","ind2","subfields","code","f336","bees","getCatalogingLanguage"],"sources":["../src/addMissingField336.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport {fieldToString, getCatalogingLanguage, nvdebug} from './utils';\nimport {getFormOfItem, map336CodeToTerm} from './field33XUtils';\n\nconst description = 'Add missing 336 field(s)';\n\n// const multimediaRegexp = /multimedia/ui;\n\nexport default function () {\n\n return {\n description, validate, fix\n };\n\n function fix(record) {\n nvdebug(`FIX ${description}...`);\n const newFields = getMissing336s(record);\n nvdebug(` GOT ${newFields.length}...`);\n // FFS: we actually need newFields array here! Videogame, for example, might be\n // 336 ## ‡a kaksiulotteinen liikkuva kuva ‡b tdi ‡2 rdacontent\n // 336 ## ‡a tietokoneohjelma ‡b cop ‡2 rdacontent\n const res = {message: [], fix: [], valid: true};\n if (newFields.length) {\n newFields.forEach(f => record.insertField(f)); // eslint-disable-line array-callback-return\n return res;\n }\n return res;\n }\n\n function validate(record) {\n nvdebug(`VALIDATE ${description}...`);\n const newFields = getMissing336s(record);\n if (newFields.length === 0) {\n return {message: [], valid: true};\n }\n const strings = newFields.map(f => fieldToString(f));\n const tmp = strings.join('\\', \\'');\n const msg = `${description}: '${tmp}'`;\n return {message: [msg], valid: false};\n }\n\n function guessMissingBsForComputerFile(record) {\n const [field008] = record.get('008');\n const typeOfComputerFile = field008 && field008.value ? field008.value[26] : undefined;\n\n if (typeOfComputerFile) {\n if (['d', 'e'].includes(typeOfComputerFile)) { // d: N=400, e: N=50\n return ['txt'];\n }\n if (typeOfComputerFile === 'g') { // Videogame (N=10000+)\n // 2D moving image/tdi is an educated guess. Might be wrong for 3D games and Infocom-style text-based games.\n // Ref.: https://www.kiwi.fi/pages/viewpage.action?pageId=115966063#PelienRDAohje-Pelienjaottelu:videopelitjafyysisetpelit\n return ['tdi', 'cop'];\n }\n if (['b', 'f'].includes(typeOfComputerFile)) { // b: N=176, f: N=2\n return ['cop'];\n }\n if (['a', 'c'].includes(typeOfComputerFile)) { // c: N=152, a: N=36\n return ['cod'];\n }\n if (typeOfComputerFile === 'h') { // h: N=44\n return ['snd'];\n }\n }\n\n // ADD 256/300/516/XXX-based educated guesses here\n const guess = guessUsingFileFields();\n if (guess) {\n return guess;\n }\n function guessUsingFileFields() {\n const characteristics = record.get('(256|516)').map(f => fieldToString(f));\n if (characteristics.some(str => str.match(/(?:ohjelma)/gui))) {\n return ['cop'];\n }\n if (characteristics.some(str => str.match(/(?:daisy)/gui))) {\n return ['spw', 'txt']; // The convention is to put just 'spw' but this is technically correct\n }\n if (characteristics.some(str => str.match(/(?:äänikirja)/gui))) {\n return ['spw']; // This should be ['spw', 'txt'] but who am I to change conventions...\n }\n if (characteristics.some(str => str.match(/(?:book|e-bok|e-diss|e-avhand|kirja|e-thesis|tekstitiedosto|tidskrift|verkkoartikkeli|verkkokirja|verkkolehti)/gui))) {\n return ['txt'];\n }\n if (characteristics.some(str => str.match(/(?:peli)/gui))) {\n return ['tdi', 'cop'];\n }\n if (characteristics.some(str => str.match(/(?:data|tietokanta)/gui))) {\n return ['cod'];\n }\n if (characteristics.some(str => str.match(/(?:verkkoaineisto.*[0-9]\\] s|PDF)/gui)) || characteristics.some(str => str.match(/\\b(?:text|tekstiä?)\\b/gui))) {\n return ['txt'];\n }\n if (characteristics.some(str => str.match(/(?:elokuva|liikkuva kuva)/gui))) {\n return ['tdi'];\n }\n if (characteristics.some(str => str.match(/(?:kartta)/gui))) {\n return ['cri']; // cri or crd, close enough anyhow, I guess\n }\n if (characteristics.some(str => str.match(/\\b(?:kuvi?a)\\b/gui))) {\n return ['tdi'];\n }\n\n return undefined;\n }\n\n\n if (['i', 'j', 'm'].includes(typeOfComputerFile)) { // (i: N=4800, m: N=566, j: N=111 )\n // Can we use field 300/516/256 to improve guess?\n return ['xxx'];\n }\n return ['zzz']; // unspecified\n }\n\n /*\n function deriveLanguageMaterials336sFrom007(record) {\n const categoryOfMaterial = [ // 007/00\n {category: 'a', rdacontent: 'cri'}, // cartographic image <- looks like a MP that has been classified as BK... One more reason to comment these..\n {category: 'c', rdacontent: 'txt'},\n {category: 'g', rdacontent: 'sti'},\n {vategory: 'h', rdacontent: 'txt'},\n {category: 'k', rdacontent: 'sti'},\n {category: 'v', rdacontent: 'tdi'}\n ];\n\n // What if there are multiple 007 fields?\n const [f007] = record.fields.get('007');\n if (f007) {\n const row = categoryOfMaterial.filter(row => row.category === f007[0]);\n if (row) {\n return [row.rdacontent];\n }\n }\n return [];\n }\n */\n\n function guessMissingBsForBookAndContinuingResource(record, formOfItem) {\n\n\n // This is from very old crap from usemarcon-cyrillux, but me not like it at all!\n /*\n const f245h = getTitleMedium(record);\n if (f245h && !multimediaRegexp.test(f245h)) {\n const result = deriveLanguageMaterials336sFrom007(record); // Base result on 007/00...\n if (result) {\n return result;\n }\n }\n */\n\n //const bibliographicalLevel = record.getBibliograpicLevel(); // Bloody h-drop typo...\n //const isBis = ['b', 'i', 's'].includes(bibliographicalLevel);\n //if (!isBis) {\n if (formOfItem === 'f') {\n return ['tct']; // tactile text\n }\n return ['txt']; // Default BK format is text\n }\n\n function guessMissingBsForMap(record) {\n const formOfItem = getFormOfItem(record);\n // Is braille and is not a model (we have 0). Changed the original usemarcon rule 007/01!=q to 007/01=q\n if (formOfItem === 'f' && record.fields.some(f => f.tag === '007' && f.value[0] === 'a' && f.value[1] === 'q')) {\n return ['crt']; // Cartographic tactile image\n }\n const [field008] = record.get('008');\n if (field008 && field008.value[25] === 'd') { // globe (cool, but we really don't have these)\n return ['crf']; // map 3D form\n }\n return ['cri']; // default cartographic image\n }\n\n function guessMissing336Bs(record) {\n const typeOfRecord = record.getTypeOfRecord();\n\n if (typeOfRecord === 'i') {\n return ['spw'];\n }\n if (typeOfRecord === 'j') {\n return ['prm']; // performed music\n }\n\n if (typeOfRecord === 'e' || typeOfRecord === 'f') {\n return guessMissingBsForMap(record);\n }\n\n const formOfItem = getFormOfItem(record);\n\n if (typeOfRecord === 'k') {\n if (formOfItem === 'f') {\n return ['tci']; // tactile image\n }\n return ['sti'];\n }\n\n if (typeOfRecord === 'c' || typeOfRecord === 'd') {\n if (formOfItem === 'f') {\n return ['tcm']; // tactile notated music\n }\n return ['ntm']; // notated music\n }\n\n if (typeOfRecord === 'g') {\n if (record.fields.some(f => f.tag === '007' && f.value[0] === 'g')) {\n return ['sti']; // still image\n }\n if (record.fields.some(f => f.tag === '007' && ['m', 'v', 'c'].includes(f.value[0]))) { // 'c' is a bit iffy, but I'll tune it only if it makes an error...\n return ['tdi']; // 2d moving pic\n }\n }\n\n if (typeOfRecord === 'm') { // electronic\n return guessMissingBsForComputerFile(record);\n }\n\n if (typeOfRecord === 'a' || typeOfRecord === 't') {\n return guessMissingBsForBookAndContinuingResource(record, formOfItem);\n }\n\n // Note that 245$h should trigger LDR/06:a or t =>o change at some earlier point (outside the scope of this module)\n if (typeOfRecord === 'o' || typeOfRecord === 'p') { // o: Kit p: Mixed\n if (['d', 'r'].includes(formOfItem)) { // d=isoteksti, r=eye-readable print\n return ['txt'];\n }\n // Not much I can guess from 300 etc\n return ['xxx']; // other\n }\n if (typeOfRecord === 'r') { // three-dimensional form\n return ['tdf'];\n }\n return ['zzz']; // unspecified\n }\n\n\n function codeToField(b, catLang) {\n const a = map336CodeToTerm(b, catLang);\n const data = {tag: '336', ind1: ' ', ind2: ' ', subfields: [\n {code: 'a', value: a},\n {code: 'b', value: b},\n {code: '2', value: 'rdacontent'}\n ]};\n\n return data;\n }\n\n function getMissing336s(record) {\n const f336 = record.get('336');\n if (f336.length > 0) {\n return [];\n }\n\n const bees = guessMissing336Bs(record); // bees = b-subfields\n nvdebug(` WE HAVE ${bees.length} BEES: ${bees.join(', ')}`);\n\n\n return bees.map(b => codeToField(b, getCatalogingLanguage(record, 'fin')));\n }\n}\n\n"],"mappings":"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","ignoreList":[]}
@@ -61,16 +61,14 @@ function _default() {
61
61
  }
62
62
 
63
63
  // Update LDR/17 to '4'
64
- record.leader = `${record.leader.substring(0, 17)}4${record.leader.substring(18, 24)}`; // eslint-disable-line functional/immutable-data
64
+ record.leader = `${record.leader.substring(0, 17)}4${record.leader.substring(18, 24)}`;
65
65
 
66
66
  // Remove unwanted fields:
67
- record.fields = record.fields.filter(f => !dropTags.includes(f.tag)); // eslint-disable-line functional/immutable-data
68
-
67
+ record.fields = record.fields.filter(f => !dropTags.includes(f.tag));
69
68
  (0, _utils.removeSubfield)(record, '020', 'c');
70
69
 
71
70
  // Remove 084 fields that don't have $2 ykl (based on USEMARCON-RDA/bw_rda_kyril.rul code by LL 2019)
72
- record.fields = record.fields.filter(f => f.tag !== '084' || f.subfields.some(sf => sf.code === '2' && sf.value === 'ykl')); // eslint-disable-line functional/immutable-data
73
-
71
+ record.fields = record.fields.filter(f => f.tag !== '084' || f.subfields.some(sf => sf.code === '2' && sf.value === 'ykl'));
74
72
  fieldSpecificStuff(record.fields);
75
73
  function fieldSpecificStuff(fields) {
76
74
  const [field, ...rest] = fields;
@@ -99,7 +97,7 @@ function _default() {
99
97
  f.subfields = [{
100
98
  code: 'e',
101
99
  value: 'kirjoittaja.'
102
- }, ...f.subfields]; // eslint-disable-line functional/immutable-data
100
+ }, ...f.subfields];
103
101
  (0, _sortSubfields.sortAdjacentSubfields)(f);
104
102
  // Punctuation will be done later on...
105
103
  return;
@@ -124,7 +122,8 @@ function _default() {
124
122
 
125
123
  // Field 028: use $b$a, not $a$b:
126
124
  const f028 = record.fields.filter(f => f.tag === '028');
127
- f028.forEach(f => (0, _sortSubfields.sortAdjacentSubfields)(f));
125
+ f028.forEach(f => (0, _sortSubfields.sortAdjacentSubfields)(f)); // eslint-disable-line array-callback-return
126
+
128
127
  (0, _addMissingField.default)().fix(record);
129
128
  }
130
129
  function realFixAll2(record) {
@@ -195,11 +194,12 @@ function fixField040(record) {
195
194
  record.insertField(data);
196
195
  return;
197
196
  }
198
- f040.forEach(f => fixField040Subfields(f));
197
+ f040.forEach(f => fixField040Subfields(f)); // eslint-disable-line array-callback-return
198
+
199
199
  function fixField040Subfields(field) {
200
- field.subfields = field.subfields.filter(sf => !['b', 'e'].includes(sf.code)); // eslint-disable-line functional/immutable-data
201
- field.subfields.push(subfieldsBE[0]); // eslint-disable-line functional/immutable-data
202
- field.subfields.push(subfieldsBE[1]); // eslint-disable-line functional/immutable-data
200
+ field.subfields = field.subfields.filter(sf => !['b', 'e'].includes(sf.code));
201
+ field.subfields.push(subfieldsBE[0]);
202
+ field.subfields.push(subfieldsBE[1]);
203
203
  (0, _sortSubfields.sortAdjacentSubfields)(field); // put $b and $e to their proper places
204
204
  }
205
205
  }
@@ -208,12 +208,13 @@ function removeFromOldCatalog(field) {
208
208
  return;
209
209
  }
210
210
  // See https://catalog.loc.gov/vwebv/ui/en_US/htdocs/help/faqs.html for motivation
211
- field.subfields?.forEach(sf => removeFromOldCatalogFromSubfield(sf));
211
+ field.subfields?.forEach(sf => removeFromOldCatalogFromSubfield(sf)); // eslint-disable-line array-callback-return
212
+
212
213
  function removeFromOldCatalogFromSubfield(subfield) {
213
214
  if (!subfield.value.includes('[from old catalog]')) {
214
215
  return;
215
216
  }
216
- subfield.value = subfield.value.replace(/ *\[from old catalog\]/gui, ''); // eslint-disable-line functional/immutable-data
217
+ subfield.value = subfield.value.replace(/ *\[from old catalog\]/gui, '');
217
218
  }
218
219
  }
219
220
  function removeSubfieldH(field) {
@@ -222,7 +223,7 @@ function removeSubfieldH(field) {
222
223
  }
223
224
  const filteredFields = field.subfields.filter(sf => sf.code !== 'h');
224
225
  if (filteredFields.length > 0) {
225
- field.subfields = filteredFields; // eslint-disable-line functional/immutable-data
226
+ field.subfields = filteredFields;
226
227
  return;
227
228
  }
228
229
  }
@@ -235,10 +236,10 @@ function removeOwnershipSubfield5(field) {
235
236
  // sanity check/robustness
236
237
  return;
237
238
  }
238
- field.subfields = remainingSubfields; // eslint-disable-line functional/immutable-data
239
+ field.subfields = remainingSubfields;
239
240
  }
240
241
  function fixLeader(record) {
241
- record.leader = `${record.leader.substring(0, 9)}a22${record.leader.substring(12, 18)}i${record.leader.substring(19, 20)}4500`; // eslint-disable-line functional/immutable-data
242
+ record.leader = `${record.leader.substring(0, 9)}a22${record.leader.substring(12, 18)}i${record.leader.substring(19, 20)}4500`;
242
243
  }
243
244
  function field410To490And810(field, record) {
244
245
  // might be generic... if so, move to utils...
@@ -246,14 +247,14 @@ function field410To490And810(field, record) {
246
247
  return;
247
248
  }
248
249
  const field810 = (0, _clone.default)(field);
249
- field.tag = '490'; // eslint-disable-line functional/immutable-data
250
- field.ind1 = '1'; // eslint-disable-line functional/immutable-data
251
- field.ind2 = ' '; // eslint-disable-line functional/immutable-data
250
+ field.tag = '490';
251
+ field.ind1 = '1';
252
+ field.ind2 = ' ';
252
253
  (0, _sortSubfields.sortAdjacentSubfields)(field);
253
254
  // 490: Fix punctuation elsewhere. (Note that the current support is lagging...)
254
255
 
255
- field810.tag = '810'; // eslint-disable-line functional/immutable-data
256
- field810.ind2 = ' '; // eslint-disable-line functional/immutable-data
256
+ field810.tag = '810';
257
+ field810.ind2 = ' ';
257
258
  // 810: Fix punctuation elsewhere. (Note that the current support is lagging...)
258
259
  record.insertField(field810);
259
260
  }
@@ -263,11 +264,11 @@ function field440To490And830(field, record) {
263
264
  return;
264
265
  }
265
266
  const field830 = (0, _clone.default)(field);
266
- field.tag = '490'; // eslint-disable-line functional/immutable-data
267
- field.ind1 = '1'; // eslint-disable-line functional/immutable-data
268
- field.ind2 = ' '; // eslint-disable-line functional/immutable-data
267
+ field.tag = '490';
268
+ field.ind1 = '1';
269
+ field.ind2 = ' ';
269
270
  // 490: Fix punctuation elsewhere. (Note that the current support is lagging...)
270
- field830.tag = '830'; // eslint-disable-line functional/immutable-data
271
+ field830.tag = '830';
271
272
  // 830: Fix punctuation elsewhere. (Note that the current support is lagging...)
272
273
  record.insertField(field830);
273
274
  }
@@ -282,9 +283,9 @@ function field260To264s(field, record) {
282
283
  return;
283
284
  }
284
285
  createCopyright264Field(field);
285
- field.tag = '264'; // eslint-disable-line functional/immutable-data
286
- field.ind1 = ' '; // eslint-disable-line functional/immutable-data
287
- field.ind2 = '1'; // eslint-disable-line functional/immutable-data
286
+ field.tag = '264';
287
+ field.ind1 = ' ';
288
+ field.ind2 = '1';
288
289
 
289
290
  // NB! Usemarcon does not handle 260$e$f$g => 264$a$b$c, so I'm not botherin with it either... (However, we could check our merge reducer code...)
290
291
 
@@ -294,9 +295,10 @@ function field260To264s(field, record) {
294
295
  }
295
296
  return false;
296
297
  }
297
- field.subfields?.forEach(sf => field260To264Normalization(sf));
298
+ field.subfields?.forEach(sf => field260To264Normalization(sf)); // eslint-disable-line array-callback-return
299
+
298
300
  function field260To264Normalization(subfield) {
299
- subfield.value = field260To264Normalization2(subfield); // eslint-disable-line functional/immutable-data
301
+ subfield.value = field260To264Normalization2(subfield);
300
302
  }
301
303
  function createCopyright264Value(field) {
302
304
  // Extract/split copyright year to a separate field:
@@ -311,7 +313,7 @@ function field260To264s(field, record) {
311
313
  const copType = c.value.match(/(?:^\[?p|℗)/u) ? '℗' : '©';
312
314
  const returnValue = c.value.includes('[') ? `[${copType}${copyrightYear}]` : `${copType}${copyrightYear}`;
313
315
  // Moidy the original value:
314
- c.value = `[${copyrightYear}]`; // eslint-disable-line functional/immutable-data
316
+ c.value = `[${copyrightYear}]`;
315
317
  return returnValue;
316
318
  }
317
319
  function createCopyright264Field(field) {
@@ -358,12 +360,12 @@ function handle505(field) {
358
360
  return;
359
361
  }
360
362
  // Don't know how/why usemarcon-cyrillux is so sure about ind1...
361
- field.ind1 = '0'; // eslint-disable-line functional/immutable-data
363
+ field.ind1 = '0';
362
364
  // usemarcon-cyrillux drops irrelevant subfields, so we do the same. However, we have included some control subfields in the kept side:
363
365
  const keptSubfields = field.subfields.filter(sf => ['a', 'g', 'r', 't', 'u', '6', '8', '9'].includes(sf.code));
364
366
 
365
367
  if (keptSubfields.some(sf => ['a', 'g', 'r', 't', 'u'].includes(sf.code))) {
366
- field.subfields = keptSubfields; // eslint-disable-line functional/immutable-data
368
+ field.subfields = keptSubfields;
367
369
  return;
368
370
  }
369
371
  }
@@ -373,14 +375,15 @@ function translateFieldToFinnish(field) {
373
375
  if (!['020', '300'].includes(field.tag)) {
374
376
  return;
375
377
  }
376
- field.subfields?.forEach(sf => translateSubfieldToFinnish(sf));
378
+ field.subfields?.forEach(sf => translateSubfieldToFinnish(sf)); // eslint-disable-line array-callback-return
379
+
377
380
  function translateSubfieldToFinnish(subfield) {
378
381
  if (field.tag === '020' && ['a', 'q', 'z'].includes(subfield.code)) {
379
- subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value)))); // eslint-disable-line functional/immutable-data
382
+ subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value))));
380
383
  return;
381
384
  }
382
385
  if (field.tag === '300') {
383
- subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value)))); // eslint-disable-line functional/immutable-data
386
+ subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value))));
384
387
  return;
385
388
  }
386
389
  }
@@ -403,7 +406,7 @@ function expandFinnishAbbreviations(value) {
403
406
  return value.replace(/\bcn\. /gu, 'noin ').
404
407
  // replace(/\bmin\./gu, 'minuuttia').
405
408
  // replace(/\bmin\b/gu, 'minuuttia').
406
- replace(/\bnid\./gu, 'nidottu').replace(/\bnid\b/gui, 'nidottu').replace(/\bsid\./gu, 'sidottu').replace(/\bsid\b/gui, 'sidottu').replace(/\bverkkojulk\.\b/gu, 'verkkojulkaisu').replace(/\bverkkojulk\b/gu, 'verkkojulkaisu').replace(/^\(([^)]+)\)$/u, '$1'); // eslint-disable-line prefer-named-capture-group
409
+ replace(/\bnid\./gu, 'nidottu').replace(/\bnid\b/gui, 'nidottu').replace(/\bsid\./gu, 'sidottu').replace(/\bsid\b/gui, 'sidottu').replace(/\bverkkojulk\.\b/gu, 'verkkojulkaisu').replace(/\bverkkojulk\b/gu, 'verkkojulkaisu').replace(/^\(([^)]+)\)$/u, '$1');
407
410
  // <- removal of brackets above could use a better location
408
411
  }
409
412
  function expandSwedishAbbreviations(value) {
@@ -414,14 +417,7 @@ function expandSwedishAbbreviations(value) {
414
417
  function finnishTranslationsAndMappings(value) {
415
418
  return value.replace('analog', 'analoginen').replace('approximately', 'noin').replace('audio discs', 'äänilevyä').replace('black and white', 'mustavalkoinen').replace(/\bbilaga\b/gui, 'liite').replace(/\bbilagor\b/gui, 'liitettä').
416
419
  // https://github.com/NatLibFi/USEMARCON-BOOKWHERE-RDA/blob/master/bw_rda_kyril.rul#L365
417
- replace(/(\b1\]?) с\./gui, '$1 sivu').
418
- // eslint-disable-line prefer-named-capture-group
419
- replace(/(\d\]?) с\./gui, '$1 sivua').
420
- // eslint-disable-line prefer-named-capture-group
421
- replace(/(\d) см/gui, '$1 cm').
422
- // eslint-disable-line prefer-named-capture-group
423
-
424
- replace(/\bcharts\b/gui, 'kaavioita').replace('chiefly color illustrations', 'pääosin värikuvitettu').replace('chiefly', 'pääosin').replace(/\bcirca\b/gui, 'noin').replace(/coil[- ]?bound/gui, 'kierreselkä').replace('color illustrations', 'värikuvitus').replace(/comb[- ]?bound/gui, 'kierreselkä').replace(/\bdigital\b/gui, 'digitaalinen').replace(/\belectronic book\b/gui, 'verkkoaineisto').replace('(flera nummersviter)', '(useita numerointijaksoja)').replace(/\bfolded sheet\b/gui, 'taitelehti').replace(/\bfärgillustratione[nr]\b/gui, 'värikuvitus').replace(/\bhard(?:back|cover)\b/gui, 'kovakantinen').replace(/\bhours\b/gui, 'tuntia').replace(/\bi flera nummersviter/gui, 'useina numerointijaksoina').replace('illustrated', 'kuvitettu').replace(/illustrations?\b/gui, 'kuvitettu').
420
+ replace(/(\b1\]?) с\./gui, '$1 sivu').replace(/(\d\]?) с\./gui, '$1 sivua').replace(/(\d) см/gui, '$1 cm').replace(/\bcharts\b/gui, 'kaavioita').replace('chiefly color illustrations', 'pääosin värikuvitettu').replace('chiefly', 'pääosin').replace(/\bcirca\b/gui, 'noin').replace(/coil[- ]?bound/gui, 'kierreselkä').replace('color illustrations', 'värikuvitus').replace(/comb[- ]?bound/gui, 'kierreselkä').replace(/\bdigital\b/gui, 'digitaalinen').replace(/\belectronic book\b/gui, 'verkkoaineisto').replace('(flera nummersviter)', '(useita numerointijaksoja)').replace(/\bfolded sheet\b/gui, 'taitelehti').replace(/\bfärgillustratione[nr]\b/gui, 'värikuvitus').replace(/\bhard(?:back|cover)\b/gui, 'kovakantinen').replace(/\bhours\b/gui, 'tuntia').replace(/\bi flera nummersviter/gui, 'useina numerointijaksoina').replace('illustrated', 'kuvitettu').replace(/illustrations?\b/gui, 'kuvitettu').
425
421
  // Based on usemacron-bookwhere (NB! usemarcon-cyrillux had kuvitus/kuvitettu)
426
422
  replace(/\binbunden\b/gui, 'kovakantinen').
427
423
  // swe
@@ -1 +1 @@
1
- {"version":3,"file":"cyrillux-usemarcon-replacement.js","names":["_clone","_interopRequireDefault","require","_marcRecord","_fix33X","_addMissingField","_addMissingField2","_addMissingField3","_addMissingField4","_fixCountryCodes","_fixLanguageCodes","_fixRelatorTerms","_indicatorFixes","_punctuation","_normalizeQualifyingInformation","_sortSubfields","_utils","e","__esModule","default","description","dropTags","_default","fix","validate","record","nvdebug","realFix","res","message","valid","realFixNonAleph","isAlephRecord","leader","substring","fields","filter","f","includes","tag","removeSubfield","subfields","some","sf","code","value","fieldSpecificStuff","field","rest","undefined","removeOwnershipSubfield5","removeFromOldCatalog","translateFieldToFinnish","fixField040","fieldSpecificStuff2","removeSubfieldH","field100eKirjoittaja","fieldHasSubfield","isBK","sortAdjacentSubfields","field260To264s","field410To490And810","field440To490And830","realFixAll1","fixLeader","fixCountryCodes","fixLanguageCodes","recordRemoveValuelessSubfields","f028","forEach","add041","realFixAll2","fixQualifyingInformation","fixRelatorTerms","fix33X","add336","add337","add338","fixIndicators","fixPunctuation","originalString","recordToString","clonedRecord","MarcRecord","subfieldValues","modifiedString","f040","get","subfieldsBE","length","data","ind1","ind2","insertField","fixField040Subfields","push","match","removeFromOldCatalogFromSubfield","subfield","replace","filteredFields","remainingSubfields","field810","clone","field830","createCopyright264Field","getCopyrightYear","string","field260To264Normalization","field260To264Normalization2","createCopyright264Value","c","copyrightYear","copType","returnValue","year","translateSubfieldToFinnish","finnishTranslationsAndMappings","expandFinnishAbbreviations","expandSwedishAbbreviations","expandEnglishAbbreviations"],"sources":["../src/cyrillux-usemarcon-replacement.js"],"sourcesContent":["/*\n* cyrillux-usemarcon-replacement.js -- implement and improve https://github.com/NatLibFi/USEMARCON-Cyrillux/tree/master\n*\n* Author(s): Nicholas Volk <nicholas.volk@helsinki.fi>\n*\n*/\n\nimport clone from 'clone';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport {default as fix33X} from './fix-33X';\nimport {default as add041} from './addMissingField041';\nimport {default as add336} from './addMissingField336';\nimport {default as add337} from './addMissingField337';\nimport {default as add338} from './addMissingField338';\nimport {default as fixCountryCodes} from './fix-country-codes';\nimport {default as fixLanguageCodes} from './fix-language-codes';\nimport {default as fixRelatorTerms} from './fixRelatorTerms';\nimport {default as fixIndicators} from './indicator-fixes';\nimport {default as fixPunctuation} from './punctuation2';\nimport {default as fixQualifyingInformation} from './normalize-qualifying-information';\nimport {sortAdjacentSubfields} from './sortSubfields';\n\n// import createDebugLogger from 'debug';\nimport {fieldHasSubfield, nvdebug, recordRemoveValuelessSubfields, recordToString, removeSubfield} from './utils';\n\n// const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/punctuation2');\n\nconst description = 'Replacement for Cyrillux usemarcon rules';\n\n// Extended original list with 541, 561, 562, 583, 584\n// 017, 044... et al are LL additions from 2019 (via USEMARCON-RDA)\nconst dropTags = ['001', '003', '010', '012', '014', '015', '016', '017', '019', '025', '029', '032', '035', '036', '037', '038', '042', '044', '049', '051', '061', '068', '071', '074', '079', '090', '091', '092', '094', '095', '096', '097', '099', '249', '261', '262', '350', '400', '411', '541', '561', '562', '574', '575', '577', '578', '583', '584', '589', '590', '591', '592', '593', '594', '595', '596', '597', '598', '599', '653', '698', '741', '742', '744', '751', '761', '790', '841', '842', '843', '844', '845', '850', '852', '853', '854', '855', '858', '859', '863', '864', '865', '866', '867', '868', '876', '877', '878', '882', '886', '887', '888', '890', '899'];\n\n\nexport default function () {\n return {\n description, fix, validate\n };\n\n function fix(record) {\n nvdebug(`${description}: fix`);\n realFix(record);\n const res = {message: [], fix: [], valid: true};\n return res;\n }\n\n function realFixNonAleph(record) {\n if (isAlephRecord(record)) {\n return;\n }\n\n // Update LDR/17 to '4'\n record.leader = `${record.leader.substring(0, 17)}4${record.leader.substring(18, 24)}`; // eslint-disable-line functional/immutable-data\n\n // Remove unwanted fields:\n record.fields = record.fields.filter(f => !dropTags.includes(f.tag)); // eslint-disable-line functional/immutable-data\n\n removeSubfield(record, '020', 'c');\n\n // Remove 084 fields that don't have $2 ykl (based on USEMARCON-RDA/bw_rda_kyril.rul code by LL 2019)\n record.fields = record.fields.filter(f => f.tag !== '084' || f.subfields.some(sf => sf.code === '2' && sf.value === 'ykl')); // eslint-disable-line functional/immutable-data\n\n fieldSpecificStuff(record.fields);\n\n function fieldSpecificStuff(fields) {\n const [field, ...rest] = fields;\n\n if (field === undefined) {\n return;\n }\n\n removeOwnershipSubfield5(field);\n removeFromOldCatalog(field); // Remove LoC phrase \"[from old catalog]\" from srings\n translateFieldToFinnish(field);\n\n return fieldSpecificStuff(rest);\n }\n\n fixField040(record); // All $b values are changed to 'mul'. As a side effect 33X$b=>$a mappings are in Finnish! Ok in this domain!\n\n fieldSpecificStuff2(record.fields);\n\n function fieldSpecificStuff2(fields) {\n const [field, ...rest] = fields;\n\n if (field === undefined) {\n return;\n }\n\n removeSubfieldH(field); // NB! Do this only after 33X creation, as 245$h might be useful there!\n\n field100eKirjoittaja(field);\n\n function field100eKirjoittaja(f) { // LL 2019 USEMARCON-RDA rule\n if (f.tag === '100' && !fieldHasSubfield(f, 'e') && record.isBK()) {\n f.subfields = [{code: 'e', value: 'kirjoittaja.'}, ...f.subfields]; // eslint-disable-line functional/immutable-data\n sortAdjacentSubfields(f);\n // Punctuation will be done later on...\n return;\n }\n }\n\n field260To264s(field, record);\n\n // NB! 300 (before or after 33X creation?)\n field410To490And810(field, record);\n field440To490And830(field, record);\n // handle505(field); // not applying them usemarcon-cyrillux rules for field 505 as I can't understand their motivation.\n return fieldSpecificStuff2(rest);\n }\n\n }\n\n function realFixAll1(record) {\n fixLeader(record); // Fix defaults, esp. LDR/18=i\n\n fixCountryCodes().fix(record); // 008/15-17\n fixLanguageCodes().fix(record); // 008/35-37 AND 041 (note that all relevant subfield codes are fixed, not just $a)\n\n recordRemoveValuelessSubfields(record);\n\n // Field 028: use $b$a, not $a$b:\n const f028 = record.fields.filter(f => f.tag === '028');\n f028.forEach(f => sortAdjacentSubfields(f));\n\n add041().fix(record);\n\n }\n\n function realFixAll2(record) {\n fixQualifyingInformation().fix(record); // 015, 020, 024 and 028\n\n // Cyrillux specific code might change 040$b and thus affect these rules:\n fixRelatorTerms().fix(record);\n fix33X().fix(record); // 33X$a => 33X$a$b$2\n add336().fix(record);\n add337().fix(record);\n add338().fix(record);\n\n // The fixer below implements Cyrillux rules such as 245I1 | 245I1 | If (Exists(@100) Or Exists(@110) Or Exists(@111) Or Exists(@130)) Then '1' Else '0' and plenty of other good stuff:\n fixIndicators().fix(record);\n\n fixPunctuation().fix(record);\n }\n\n function realFix(record) {\n realFixAll1(record);\n\n realFixNonAleph(record);\n\n realFixAll2(record);\n\n const res = {message: [], fix: [], valid: true};\n return res;\n }\n\n // Validation is currently done in subparts\n function validate(record) {\n nvdebug(`${description}: validate`);\n const originalString = recordToString(record);\n const clonedRecord = new MarcRecord(record, {subfieldValues: false});\n realFix(clonedRecord);\n const modifiedString = recordToString(clonedRecord);\n\n if (originalString === modifiedString) {\n return {message: [], valid: true};\n }\n\n return {message: ['Record changed'], valid: false}; // Less than descriptive but will do...\n\n }\n}\n\nfunction fixField040(record) {\n const f040 = record.get('040');\n\n const subfieldsBE = [\n {code: 'b', value: 'mul'},\n {code: 'e', value: 'rda'}\n ];\n\n // Add 040 if there isn't one:\n if (f040.length === 0) {\n const data = {tag: '040', ind1: ' ', ind2: ' ', subfields: subfieldsBE};\n\n record.insertField(data);\n return;\n }\n\n f040.forEach(f => fixField040Subfields(f));\n\n function fixField040Subfields(field) {\n field.subfields = field.subfields.filter(sf => !['b', 'e'].includes(sf.code)); // eslint-disable-line functional/immutable-data\n field.subfields.push(subfieldsBE[0]); // eslint-disable-line functional/immutable-data\n field.subfields.push(subfieldsBE[1]); // eslint-disable-line functional/immutable-data\n sortAdjacentSubfields(field); // put $b and $e to their proper places\n }\n\n}\n\nexport function removeFromOldCatalog(field) {\n if (!field.tag.match(/^(?:240|65[0135]|[1678](?:00|10|11|30))$/u)) {\n return;\n }\n // See https://catalog.loc.gov/vwebv/ui/en_US/htdocs/help/faqs.html for motivation\n field.subfields?.forEach(sf => removeFromOldCatalogFromSubfield(sf));\n\n function removeFromOldCatalogFromSubfield(subfield) {\n if (!subfield.value.includes('[from old catalog]')) {\n return;\n }\n subfield.value = subfield.value.replace(/ *\\[from old catalog\\]/gui, ''); // eslint-disable-line functional/immutable-data\n }\n}\n\nfunction removeSubfieldH(field) {\n if (!field.subfields || !['245', '246', '247', '740', '760', '762', '765', '767', '770', '772', '773', '774', '775', '776', '777', '780', '785', '786', '787', '788'].includes(field.tag)) {\n return;\n }\n\n const filteredFields = field.subfields.filter(sf => sf.code !== 'h');\n if (filteredFields.length > 0) {\n field.subfields = filteredFields; // eslint-disable-line functional/immutable-data\n return;\n }\n\n}\n\nexport function removeOwnershipSubfield5(field) {\n if (!field.subfields || field.subfields.length === 0) {\n return;\n }\n const remainingSubfields = field.subfields.filter(sf => sf.code !== '5');\n if (remainingSubfields.length === 0) { // sanity check/robustness\n return;\n }\n field.subfields = remainingSubfields; // eslint-disable-line functional/immutable-data\n}\n\nexport function fixLeader(record) {\n record.leader = `${record.leader.substring(0, 9)}a22${record.leader.substring(12, 18)}i${record.leader.substring(19, 20)}4500`; // eslint-disable-line functional/immutable-data\n}\n\nfunction field410To490And810(field, record) { // might be generic... if so, move to utils...\n if (field.tag !== '410') {\n return;\n }\n\n const field810 = clone(field);\n\n field.tag = '490'; // eslint-disable-line functional/immutable-data\n field.ind1 = '1'; // eslint-disable-line functional/immutable-data\n field.ind2 = ' '; // eslint-disable-line functional/immutable-data\n sortAdjacentSubfields(field);\n // 490: Fix punctuation elsewhere. (Note that the current support is lagging...)\n\n\n field810.tag = '810'; // eslint-disable-line functional/immutable-data\n field810.ind2 = ' '; // eslint-disable-line functional/immutable-data\n // 810: Fix punctuation elsewhere. (Note that the current support is lagging...)\n record.insertField(field810);\n}\n\nfunction field440To490And830(field, record) { // might be generic... if so, move to utils...\n if (field.tag !== '440') {\n return;\n }\n\n const field830 = clone(field);\n\n field.tag = '490'; // eslint-disable-line functional/immutable-data\n field.ind1 = '1'; // eslint-disable-line functional/immutable-data\n field.ind2 = ' '; // eslint-disable-line functional/immutable-data\n // 490: Fix punctuation elsewhere. (Note that the current support is lagging...)\n field830.tag = '830'; // eslint-disable-line functional/immutable-data\n // 830: Fix punctuation elsewhere. (Note that the current support is lagging...)\n record.insertField(field830);\n}\n\nfunction isAlephRecord(record) {\n // Records that are already in Aleph are not processed as aggressively as genuinely new ones:\n return record.fields.some(field => ['CAT', 'LKR', 'LOW', 'SID'].includes(field.tag));\n}\n\nfunction field260To264s(field, record) { // might be generic... if so, move to utils...\n // As per my quick reading of usemarcon-cyrillux\n if (field.tag !== '260') {\n return;\n }\n\n createCopyright264Field(field);\n\n field.tag = '264'; // eslint-disable-line functional/immutable-data\n field.ind1 = ' '; // eslint-disable-line functional/immutable-data\n field.ind2 = '1'; // eslint-disable-line functional/immutable-data\n\n // NB! Usemarcon does not handle 260$e$f$g => 264$a$b$c, so I'm not botherin with it either... (However, we could check our merge reducer code...)\n\n function getCopyrightYear(string) {\n if (string.match(/^(?:\\[?[Ccp]|[^0-9]*(?:cop|©|℗))[^0-9]*(?:1[789][0-9][0-9]|20[0-2][0-9])[^0-9]*$/u)) {\n return string.replace(/[^0-9]/ug, '');\n }\n return false;\n }\n\n field.subfields?.forEach(sf => field260To264Normalization(sf));\n\n function field260To264Normalization(subfield) {\n subfield.value = field260To264Normalization2(subfield); // eslint-disable-line functional/immutable-data\n }\n\n function createCopyright264Value(field) {\n // Extract/split copyright year to a separate field:\n const [c] = field.subfields.filter(sf => sf.code === 'c');\n if (!c) {\n return undefined;\n }\n const copyrightYear = getCopyrightYear(c.value);\n if (!copyrightYear) {\n return undefined;\n }\n const copType = c.value.match(/(?:^\\[?p|℗)/u) ? '℗' : '©';\n const returnValue = c.value.includes('[') ? `[${copType}${copyrightYear}]` : `${copType}${copyrightYear}`;\n // Moidy the original value:\n c.value = `[${copyrightYear}]`; // eslint-disable-line functional/immutable-data\n return returnValue;\n }\n\n function createCopyright264Field(field) {\n const c = createCopyright264Value(field);\n if (!c) {\n return undefined;\n }\n const data = {'tag': '264', 'ind1': ' ', 'ind2': '4', 'subfields': [{'code': 'c', 'value': c}]};\n record.insertField(data);\n }\n\n function field260To264Normalization2(subfield) {\n if (subfield.code === 'a') {\n return subfield.value.replace(/\\b[Ss]\\. ?l\\./u, 'Kustannuspaikka tuntematon');\n }\n if (subfield.code === 'b') {\n return subfield.value.replace(/\\b[Ss]\\. ?n\\./u, 'kustantaja tuntematon');\n }\n if (subfield.code === 'c') {\n const year = getCopyrightYear(subfield.value);\n if (year) {\n const c = subfield.value.match(/(?:^p|℗)/u) ? 'p' : 'c';\n if (subfield.value.includes('[')) {\n return `${c}[${year}]`;\n }\n return `${c}${year}`;\n }\n return subfield.value.replace(/\\b[Ss]\\. ?a\\./u, 'julkaisuaika tuntematon');\n }\n return subfield.value;\n }\n\n\n}\n\n/*\nfunction handle505(field) {\n if (field.tag !== '505') {\n return;\n }\n // Don't know how/why usemarcon-cyrillux is so sure about ind1...\n field.ind1 = '0'; // eslint-disable-line functional/immutable-data\n // usemarcon-cyrillux drops irrelevant subfields, so we do the same. However, we have included some control subfields in the kept side:\n const keptSubfields = field.subfields.filter(sf => ['a', 'g', 'r', 't', 'u', '6', '8', '9'].includes(sf.code));\n\n if (keptSubfields.some(sf => ['a', 'g', 'r', 't', 'u'].includes(sf.code))) {\n field.subfields = keptSubfields; // eslint-disable-line functional/immutable-data\n return;\n }\n}\n*/\n\nfunction translateFieldToFinnish(field) {\n if (!['020', '300'].includes(field.tag)) {\n return;\n }\n field.subfields?.forEach(sf => translateSubfieldToFinnish(sf));\n\n function translateSubfieldToFinnish(subfield) {\n if (field.tag === '020' && ['a', 'q', 'z'].includes(subfield.code)) {\n subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value)))); // eslint-disable-line functional/immutable-data\n return;\n }\n if (field.tag === '300') {\n subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value)))); // eslint-disable-line functional/immutable-data\n return;\n }\n }\n}\n\nfunction expandEnglishAbbreviations(value) {\n return value.replace(/\\bbk\\.\\b/gui, 'book').\n replace(/chiefly col\\./ui, 'chiefly color').\n replace(/col\\. ill\\./ui, 'color illustrations').\n replace(/diagrs\\./ui, 'diagrams').\n replace(/\\bhbk\\.\\b/gui, 'hardcover').replace(/\\bhbk\\b/gui, 'hardcover'). // expand to MTS-compliant form\n replace(/\\b1 hr\\./gui, '1 hour').\n replace(/\\bhr\\./gui, 'hours').\n replace(/\\bill\\./gui, 'illustrated'). // or illustrations (or Swedish \"illustrerad\" or...)\n replace(/\\billus\\./gui, 'illustrated'). // or illustrations\n replace(/incl\\./gui, 'includes').\n replace(/fold\\.? maps/gui, 'folded maps').\n // replace(/\\bmin\\./gu, 'minutes').\n // replace(/\\bmin\\b/gu, 'minutes').\n replace(/\\bp\\.\\b/gui, 'pages').replace(/\\bp\\b/gu, 'pages').\n replace(/\\bpbk\\.\\b/gui, 'paperback').replace(/\\bpbk\\b/gui, 'paperback'). // expand to MTS-compliant form\n replace(/\\bpdf\\b/gui, 'PDF').\n replace(/\\bports\\./gui, 'portraits').\n replace('sd., col.', 'sound, color').\n replace(/ *\\((?:chiefly col\\.|chiefly color|some col[s.])\\)/gui, '').\n replace(/\\b1 hr\\./gui, '1 hour');\n}\n\nfunction expandFinnishAbbreviations(value) {\n return value.replace(/\\bcn\\. /gu, 'noin ').\n // replace(/\\bmin\\./gu, 'minuuttia').\n // replace(/\\bmin\\b/gu, 'minuuttia').\n replace(/\\bnid\\./gu, 'nidottu').replace(/\\bnid\\b/gui, 'nidottu').\n replace(/\\bsid\\./gu, 'sidottu').replace(/\\bsid\\b/gui, 'sidottu').\n replace(/\\bverkkojulk\\.\\b/gu, 'verkkojulkaisu').replace(/\\bverkkojulk\\b/gu, 'verkkojulkaisu').\n replace(/^\\(([^)]+)\\)$/u, '$1'); // eslint-disable-line prefer-named-capture-group\n // <- removal of brackets above could use a better location\n}\n\nfunction expandSwedishAbbreviations(value) {\n return value.replace(/\\bca\\. /gu, 'circa ').\n replace(/\\bhft\\./gui, 'häftad').replace(/\\bhft\\b/gui, 'häftad');\n // replace(/\\bmin\\./gu, 'minuter').\n // replace(/\\bmin\\b/gu, 'minuter');\n}\n\nfunction finnishTranslationsAndMappings(value) {\n return value.replace('analog', 'analoginen').\n replace('approximately', 'noin').\n replace('audio discs', 'äänilevyä').\n replace('black and white', 'mustavalkoinen').\n replace(/\\bbilaga\\b/gui, 'liite').\n replace(/\\bbilagor\\b/gui, 'liitettä').\n // https://github.com/NatLibFi/USEMARCON-BOOKWHERE-RDA/blob/master/bw_rda_kyril.rul#L365\n replace(/(\\b1\\]?) с\\./gui, '$1 sivu'). // eslint-disable-line prefer-named-capture-group\n replace(/(\\d\\]?) с\\./gui, '$1 sivua'). // eslint-disable-line prefer-named-capture-group\n replace(/(\\d) см/gui, '$1 cm'). // eslint-disable-line prefer-named-capture-group\n\n replace(/\\bcharts\\b/gui, 'kaavioita').\n replace('chiefly color illustrations', 'pääosin värikuvitettu').\n replace('chiefly', 'pääosin').\n replace(/\\bcirca\\b/gui, 'noin').\n replace(/coil[- ]?bound/gui, 'kierreselkä').\n replace('color illustrations', 'värikuvitus').\n replace(/comb[- ]?bound/gui, 'kierreselkä').\n replace(/\\bdigital\\b/gui, 'digitaalinen').\n replace(/\\belectronic book\\b/gui, 'verkkoaineisto').\n replace('(flera nummersviter)', '(useita numerointijaksoja)').\n replace(/\\bfolded sheet\\b/gui, 'taitelehti').\n replace(/\\bfärgillustratione[nr]\\b/gui, 'värikuvitus').\n replace(/\\bhard(?:back|cover)\\b/gui, 'kovakantinen').\n replace(/\\bhours\\b/gui, 'tuntia').\n replace(/\\bi flera nummersviter/gui, 'useina numerointijaksoina').\n replace('illustrated', 'kuvitettu').\n replace(/illustrations?\\b/gui, 'kuvitettu'). // Based on usemacron-bookwhere (NB! usemarcon-cyrillux had kuvitus/kuvitettu)\n replace(/\\binbunden\\b/gui, 'kovakantinen'). // swe\n replace(/\\binsert\\b/gui, 'liite').\n replace(/\\binserts\\b/gui, 'liitteitä').\n replace(/\\bin various pagings/gui, 'useina numerointijaksoina').\n replace('leaves of plates', 'kuvalehteä').\n replace(/\\bljudskiva\\b/gui, 'äänilevy').\n replace(/\\bljudskivor\\b/gui, 'äänilevyä').\n replace(/\\bmap\\b/gui, 'kartta').\n replace(/\\bmaps\\b/gui, 'karttoja'). // or karttaa?\n replace('minutes', 'minuuttia').\n replace('mjuka pärmar', 'pehmeäkantinen').\n replace('online resource', 'verkkoaineisto').\n replace('onlineresurs', 'verkkoaineisto').\n replace('onumrerade', 'numeroimatonta').\n replace('pages of plates', 'kuvalehteä').\n replace(/\\bpages\\b/gui, 'sivua').\n replace(/\\bpaperback\\b/gui, 'pehmeäkantinen'). // MTS alt\n replace(/\\bSeiten\\b/gu, 'sivua').\n replace(/\\bsoftcover\\b/gui, 'pehmeäkantinen'). // MTS pref\n replace('sound, color', 'äänellinen, värillinen').\n replace('sound cassettes', 'äänikasettia').replace('sound cassette', 'äänikasetti').\n replace('sound discs', 'äänilevyä').replace(/sound disc\\b/gui, 'äänilevy').\n replace(/(?:spiral[- ]?bound|spiralrygg)/gui, 'kierreselkä').\n replace('svartvit', 'mustavalkoinen').\n replace('unnumbered', 'numeroimatonta').\n replace('(various pagings)', '(useita numerointijaksoja)').\n replace(/\\bverkkojulkaisu\\b/gui, 'verkkoaineisto').\n replace('videodiscs', 'videolevyä').\n replace('videodisc', 'videolevy').\n replace(/\\b1 hour\\b/gui, '1 tunti');\n\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"cyrillux-usemarcon-replacement.js","names":["_clone","_interopRequireDefault","require","_marcRecord","_fix33X","_addMissingField","_addMissingField2","_addMissingField3","_addMissingField4","_fixCountryCodes","_fixLanguageCodes","_fixRelatorTerms","_indicatorFixes","_punctuation","_normalizeQualifyingInformation","_sortSubfields","_utils","e","__esModule","default","description","dropTags","_default","fix","validate","record","nvdebug","realFix","res","message","valid","realFixNonAleph","isAlephRecord","leader","substring","fields","filter","f","includes","tag","removeSubfield","subfields","some","sf","code","value","fieldSpecificStuff","field","rest","undefined","removeOwnershipSubfield5","removeFromOldCatalog","translateFieldToFinnish","fixField040","fieldSpecificStuff2","removeSubfieldH","field100eKirjoittaja","fieldHasSubfield","isBK","sortAdjacentSubfields","field260To264s","field410To490And810","field440To490And830","realFixAll1","fixLeader","fixCountryCodes","fixLanguageCodes","recordRemoveValuelessSubfields","f028","forEach","add041","realFixAll2","fixQualifyingInformation","fixRelatorTerms","fix33X","add336","add337","add338","fixIndicators","fixPunctuation","originalString","recordToString","clonedRecord","MarcRecord","subfieldValues","modifiedString","f040","get","subfieldsBE","length","data","ind1","ind2","insertField","fixField040Subfields","push","match","removeFromOldCatalogFromSubfield","subfield","replace","filteredFields","remainingSubfields","field810","clone","field830","createCopyright264Field","getCopyrightYear","string","field260To264Normalization","field260To264Normalization2","createCopyright264Value","c","copyrightYear","copType","returnValue","year","translateSubfieldToFinnish","finnishTranslationsAndMappings","expandFinnishAbbreviations","expandSwedishAbbreviations","expandEnglishAbbreviations"],"sources":["../src/cyrillux-usemarcon-replacement.js"],"sourcesContent":["/*\n* cyrillux-usemarcon-replacement.js -- implement and improve https://github.com/NatLibFi/USEMARCON-Cyrillux/tree/master\n*\n* Author(s): Nicholas Volk <nicholas.volk@helsinki.fi>\n*\n*/\n\nimport clone from 'clone';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport {default as fix33X} from './fix-33X';\nimport {default as add041} from './addMissingField041';\nimport {default as add336} from './addMissingField336';\nimport {default as add337} from './addMissingField337';\nimport {default as add338} from './addMissingField338';\nimport {default as fixCountryCodes} from './fix-country-codes';\nimport {default as fixLanguageCodes} from './fix-language-codes';\nimport {default as fixRelatorTerms} from './fixRelatorTerms';\nimport {default as fixIndicators} from './indicator-fixes';\nimport {default as fixPunctuation} from './punctuation2';\nimport {default as fixQualifyingInformation} from './normalize-qualifying-information';\nimport {sortAdjacentSubfields} from './sortSubfields';\n\n// import createDebugLogger from 'debug';\nimport {fieldHasSubfield, nvdebug, recordRemoveValuelessSubfields, recordToString, removeSubfield} from './utils';\n\n// const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/punctuation2');\n\nconst description = 'Replacement for Cyrillux usemarcon rules';\n\n// Extended original list with 541, 561, 562, 583, 584\n// 017, 044... et al are LL additions from 2019 (via USEMARCON-RDA)\nconst dropTags = ['001', '003', '010', '012', '014', '015', '016', '017', '019', '025', '029', '032', '035', '036', '037', '038', '042', '044', '049', '051', '061', '068', '071', '074', '079', '090', '091', '092', '094', '095', '096', '097', '099', '249', '261', '262', '350', '400', '411', '541', '561', '562', '574', '575', '577', '578', '583', '584', '589', '590', '591', '592', '593', '594', '595', '596', '597', '598', '599', '653', '698', '741', '742', '744', '751', '761', '790', '841', '842', '843', '844', '845', '850', '852', '853', '854', '855', '858', '859', '863', '864', '865', '866', '867', '868', '876', '877', '878', '882', '886', '887', '888', '890', '899'];\n\n\nexport default function () {\n return {\n description, fix, validate\n };\n\n function fix(record) {\n nvdebug(`${description}: fix`);\n realFix(record);\n const res = {message: [], fix: [], valid: true};\n return res;\n }\n\n function realFixNonAleph(record) {\n if (isAlephRecord(record)) {\n return;\n }\n\n // Update LDR/17 to '4'\n record.leader = `${record.leader.substring(0, 17)}4${record.leader.substring(18, 24)}`;\n\n // Remove unwanted fields:\n record.fields = record.fields.filter(f => !dropTags.includes(f.tag));\n\n removeSubfield(record, '020', 'c');\n\n // Remove 084 fields that don't have $2 ykl (based on USEMARCON-RDA/bw_rda_kyril.rul code by LL 2019)\n record.fields = record.fields.filter(f => f.tag !== '084' || f.subfields.some(sf => sf.code === '2' && sf.value === 'ykl'));\n\n fieldSpecificStuff(record.fields);\n\n function fieldSpecificStuff(fields) {\n const [field, ...rest] = fields;\n\n if (field === undefined) {\n return;\n }\n\n removeOwnershipSubfield5(field);\n removeFromOldCatalog(field); // Remove LoC phrase \"[from old catalog]\" from srings\n translateFieldToFinnish(field);\n\n return fieldSpecificStuff(rest);\n }\n\n fixField040(record); // All $b values are changed to 'mul'. As a side effect 33X$b=>$a mappings are in Finnish! Ok in this domain!\n\n fieldSpecificStuff2(record.fields);\n\n function fieldSpecificStuff2(fields) {\n const [field, ...rest] = fields;\n\n if (field === undefined) {\n return;\n }\n\n removeSubfieldH(field); // NB! Do this only after 33X creation, as 245$h might be useful there!\n\n field100eKirjoittaja(field);\n\n function field100eKirjoittaja(f) { // LL 2019 USEMARCON-RDA rule\n if (f.tag === '100' && !fieldHasSubfield(f, 'e') && record.isBK()) {\n f.subfields = [{code: 'e', value: 'kirjoittaja.'}, ...f.subfields];\n sortAdjacentSubfields(f);\n // Punctuation will be done later on...\n return;\n }\n }\n\n field260To264s(field, record);\n\n // NB! 300 (before or after 33X creation?)\n field410To490And810(field, record);\n field440To490And830(field, record);\n // handle505(field); // not applying them usemarcon-cyrillux rules for field 505 as I can't understand their motivation.\n return fieldSpecificStuff2(rest);\n }\n\n }\n\n function realFixAll1(record) {\n fixLeader(record); // Fix defaults, esp. LDR/18=i\n\n fixCountryCodes().fix(record); // 008/15-17\n fixLanguageCodes().fix(record); // 008/35-37 AND 041 (note that all relevant subfield codes are fixed, not just $a)\n\n recordRemoveValuelessSubfields(record);\n\n // Field 028: use $b$a, not $a$b:\n const f028 = record.fields.filter(f => f.tag === '028');\n f028.forEach(f => sortAdjacentSubfields(f)); // eslint-disable-line array-callback-return\n\n add041().fix(record);\n\n }\n\n function realFixAll2(record) {\n fixQualifyingInformation().fix(record); // 015, 020, 024 and 028\n\n // Cyrillux specific code might change 040$b and thus affect these rules:\n fixRelatorTerms().fix(record);\n fix33X().fix(record); // 33X$a => 33X$a$b$2\n add336().fix(record);\n add337().fix(record);\n add338().fix(record);\n\n // The fixer below implements Cyrillux rules such as 245I1 | 245I1 | If (Exists(@100) Or Exists(@110) Or Exists(@111) Or Exists(@130)) Then '1' Else '0' and plenty of other good stuff:\n fixIndicators().fix(record);\n\n fixPunctuation().fix(record);\n }\n\n function realFix(record) {\n realFixAll1(record);\n\n realFixNonAleph(record);\n\n realFixAll2(record);\n\n const res = {message: [], fix: [], valid: true};\n return res;\n }\n\n // Validation is currently done in subparts\n function validate(record) {\n nvdebug(`${description}: validate`);\n const originalString = recordToString(record);\n const clonedRecord = new MarcRecord(record, {subfieldValues: false});\n realFix(clonedRecord);\n const modifiedString = recordToString(clonedRecord);\n\n if (originalString === modifiedString) {\n return {message: [], valid: true};\n }\n\n return {message: ['Record changed'], valid: false}; // Less than descriptive but will do...\n\n }\n}\n\nfunction fixField040(record) {\n const f040 = record.get('040');\n\n const subfieldsBE = [\n {code: 'b', value: 'mul'},\n {code: 'e', value: 'rda'}\n ];\n\n // Add 040 if there isn't one:\n if (f040.length === 0) {\n const data = {tag: '040', ind1: ' ', ind2: ' ', subfields: subfieldsBE};\n\n record.insertField(data);\n return;\n }\n\n f040.forEach(f => fixField040Subfields(f)); // eslint-disable-line array-callback-return\n\n function fixField040Subfields(field) {\n field.subfields = field.subfields.filter(sf => !['b', 'e'].includes(sf.code));\n field.subfields.push(subfieldsBE[0]);\n field.subfields.push(subfieldsBE[1]);\n sortAdjacentSubfields(field); // put $b and $e to their proper places\n }\n\n}\n\nexport function removeFromOldCatalog(field) {\n if (!field.tag.match(/^(?:240|65[0135]|[1678](?:00|10|11|30))$/u)) {\n return;\n }\n // See https://catalog.loc.gov/vwebv/ui/en_US/htdocs/help/faqs.html for motivation\n field.subfields?.forEach(sf => removeFromOldCatalogFromSubfield(sf)); // eslint-disable-line array-callback-return\n\n function removeFromOldCatalogFromSubfield(subfield) {\n if (!subfield.value.includes('[from old catalog]')) {\n return;\n }\n subfield.value = subfield.value.replace(/ *\\[from old catalog\\]/gui, '');\n }\n}\n\nfunction removeSubfieldH(field) {\n if (!field.subfields || !['245', '246', '247', '740', '760', '762', '765', '767', '770', '772', '773', '774', '775', '776', '777', '780', '785', '786', '787', '788'].includes(field.tag)) {\n return;\n }\n\n const filteredFields = field.subfields.filter(sf => sf.code !== 'h');\n if (filteredFields.length > 0) {\n field.subfields = filteredFields;\n return;\n }\n\n}\n\nexport function removeOwnershipSubfield5(field) {\n if (!field.subfields || field.subfields.length === 0) {\n return;\n }\n const remainingSubfields = field.subfields.filter(sf => sf.code !== '5');\n if (remainingSubfields.length === 0) { // sanity check/robustness\n return;\n }\n field.subfields = remainingSubfields;\n}\n\nexport function fixLeader(record) {\n record.leader = `${record.leader.substring(0, 9)}a22${record.leader.substring(12, 18)}i${record.leader.substring(19, 20)}4500`;\n}\n\nfunction field410To490And810(field, record) { // might be generic... if so, move to utils...\n if (field.tag !== '410') {\n return;\n }\n\n const field810 = clone(field);\n\n field.tag = '490';\n field.ind1 = '1';\n field.ind2 = ' ';\n sortAdjacentSubfields(field);\n // 490: Fix punctuation elsewhere. (Note that the current support is lagging...)\n\n\n field810.tag = '810';\n field810.ind2 = ' ';\n // 810: Fix punctuation elsewhere. (Note that the current support is lagging...)\n record.insertField(field810);\n}\n\nfunction field440To490And830(field, record) { // might be generic... if so, move to utils...\n if (field.tag !== '440') {\n return;\n }\n\n const field830 = clone(field);\n\n field.tag = '490';\n field.ind1 = '1';\n field.ind2 = ' ';\n // 490: Fix punctuation elsewhere. (Note that the current support is lagging...)\n field830.tag = '830';\n // 830: Fix punctuation elsewhere. (Note that the current support is lagging...)\n record.insertField(field830);\n}\n\nfunction isAlephRecord(record) {\n // Records that are already in Aleph are not processed as aggressively as genuinely new ones:\n return record.fields.some(field => ['CAT', 'LKR', 'LOW', 'SID'].includes(field.tag));\n}\n\nfunction field260To264s(field, record) { // might be generic... if so, move to utils...\n // As per my quick reading of usemarcon-cyrillux\n if (field.tag !== '260') {\n return;\n }\n\n createCopyright264Field(field);\n\n field.tag = '264';\n field.ind1 = ' ';\n field.ind2 = '1';\n\n // NB! Usemarcon does not handle 260$e$f$g => 264$a$b$c, so I'm not botherin with it either... (However, we could check our merge reducer code...)\n\n function getCopyrightYear(string) {\n if (string.match(/^(?:\\[?[Ccp]|[^0-9]*(?:cop|©|℗))[^0-9]*(?:1[789][0-9][0-9]|20[0-2][0-9])[^0-9]*$/u)) {\n return string.replace(/[^0-9]/ug, '');\n }\n return false;\n }\n\n field.subfields?.forEach(sf => field260To264Normalization(sf)); // eslint-disable-line array-callback-return\n\n function field260To264Normalization(subfield) {\n subfield.value = field260To264Normalization2(subfield);\n }\n\n function createCopyright264Value(field) {\n // Extract/split copyright year to a separate field:\n const [c] = field.subfields.filter(sf => sf.code === 'c');\n if (!c) {\n return undefined;\n }\n const copyrightYear = getCopyrightYear(c.value);\n if (!copyrightYear) {\n return undefined;\n }\n const copType = c.value.match(/(?:^\\[?p|℗)/u) ? '℗' : '©';\n const returnValue = c.value.includes('[') ? `[${copType}${copyrightYear}]` : `${copType}${copyrightYear}`;\n // Moidy the original value:\n c.value = `[${copyrightYear}]`;\n return returnValue;\n }\n\n function createCopyright264Field(field) {\n const c = createCopyright264Value(field);\n if (!c) {\n return undefined;\n }\n const data = {'tag': '264', 'ind1': ' ', 'ind2': '4', 'subfields': [{'code': 'c', 'value': c}]};\n record.insertField(data);\n }\n\n function field260To264Normalization2(subfield) {\n if (subfield.code === 'a') {\n return subfield.value.replace(/\\b[Ss]\\. ?l\\./u, 'Kustannuspaikka tuntematon');\n }\n if (subfield.code === 'b') {\n return subfield.value.replace(/\\b[Ss]\\. ?n\\./u, 'kustantaja tuntematon');\n }\n if (subfield.code === 'c') {\n const year = getCopyrightYear(subfield.value);\n if (year) {\n const c = subfield.value.match(/(?:^p|℗)/u) ? 'p' : 'c';\n if (subfield.value.includes('[')) {\n return `${c}[${year}]`;\n }\n return `${c}${year}`;\n }\n return subfield.value.replace(/\\b[Ss]\\. ?a\\./u, 'julkaisuaika tuntematon');\n }\n return subfield.value;\n }\n\n\n}\n\n/*\nfunction handle505(field) {\n if (field.tag !== '505') {\n return;\n }\n // Don't know how/why usemarcon-cyrillux is so sure about ind1...\n field.ind1 = '0';\n // usemarcon-cyrillux drops irrelevant subfields, so we do the same. However, we have included some control subfields in the kept side:\n const keptSubfields = field.subfields.filter(sf => ['a', 'g', 'r', 't', 'u', '6', '8', '9'].includes(sf.code));\n\n if (keptSubfields.some(sf => ['a', 'g', 'r', 't', 'u'].includes(sf.code))) {\n field.subfields = keptSubfields;\n return;\n }\n}\n*/\n\nfunction translateFieldToFinnish(field) {\n if (!['020', '300'].includes(field.tag)) {\n return;\n }\n field.subfields?.forEach(sf => translateSubfieldToFinnish(sf)); // eslint-disable-line array-callback-return\n\n function translateSubfieldToFinnish(subfield) {\n if (field.tag === '020' && ['a', 'q', 'z'].includes(subfield.code)) {\n subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value))));\n return;\n }\n if (field.tag === '300') {\n subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value))));\n return;\n }\n }\n}\n\nfunction expandEnglishAbbreviations(value) {\n return value.replace(/\\bbk\\.\\b/gui, 'book').\n replace(/chiefly col\\./ui, 'chiefly color').\n replace(/col\\. ill\\./ui, 'color illustrations').\n replace(/diagrs\\./ui, 'diagrams').\n replace(/\\bhbk\\.\\b/gui, 'hardcover').replace(/\\bhbk\\b/gui, 'hardcover'). // expand to MTS-compliant form\n replace(/\\b1 hr\\./gui, '1 hour').\n replace(/\\bhr\\./gui, 'hours').\n replace(/\\bill\\./gui, 'illustrated'). // or illustrations (or Swedish \"illustrerad\" or...)\n replace(/\\billus\\./gui, 'illustrated'). // or illustrations\n replace(/incl\\./gui, 'includes').\n replace(/fold\\.? maps/gui, 'folded maps').\n // replace(/\\bmin\\./gu, 'minutes').\n // replace(/\\bmin\\b/gu, 'minutes').\n replace(/\\bp\\.\\b/gui, 'pages').replace(/\\bp\\b/gu, 'pages').\n replace(/\\bpbk\\.\\b/gui, 'paperback').replace(/\\bpbk\\b/gui, 'paperback'). // expand to MTS-compliant form\n replace(/\\bpdf\\b/gui, 'PDF').\n replace(/\\bports\\./gui, 'portraits').\n replace('sd., col.', 'sound, color').\n replace(/ *\\((?:chiefly col\\.|chiefly color|some col[s.])\\)/gui, '').\n replace(/\\b1 hr\\./gui, '1 hour');\n}\n\nfunction expandFinnishAbbreviations(value) {\n return value.replace(/\\bcn\\. /gu, 'noin ').\n // replace(/\\bmin\\./gu, 'minuuttia').\n // replace(/\\bmin\\b/gu, 'minuuttia').\n replace(/\\bnid\\./gu, 'nidottu').replace(/\\bnid\\b/gui, 'nidottu').\n replace(/\\bsid\\./gu, 'sidottu').replace(/\\bsid\\b/gui, 'sidottu').\n replace(/\\bverkkojulk\\.\\b/gu, 'verkkojulkaisu').replace(/\\bverkkojulk\\b/gu, 'verkkojulkaisu').\n replace(/^\\(([^)]+)\\)$/u, '$1');\n // <- removal of brackets above could use a better location\n}\n\nfunction expandSwedishAbbreviations(value) {\n return value.replace(/\\bca\\. /gu, 'circa ').\n replace(/\\bhft\\./gui, 'häftad').replace(/\\bhft\\b/gui, 'häftad');\n // replace(/\\bmin\\./gu, 'minuter').\n // replace(/\\bmin\\b/gu, 'minuter');\n}\n\nfunction finnishTranslationsAndMappings(value) {\n return value.replace('analog', 'analoginen').\n replace('approximately', 'noin').\n replace('audio discs', 'äänilevyä').\n replace('black and white', 'mustavalkoinen').\n replace(/\\bbilaga\\b/gui, 'liite').\n replace(/\\bbilagor\\b/gui, 'liitettä').\n // https://github.com/NatLibFi/USEMARCON-BOOKWHERE-RDA/blob/master/bw_rda_kyril.rul#L365\n replace(/(\\b1\\]?) с\\./gui, '$1 sivu').\n replace(/(\\d\\]?) с\\./gui, '$1 sivua').\n replace(/(\\d) см/gui, '$1 cm').\n\n replace(/\\bcharts\\b/gui, 'kaavioita').\n replace('chiefly color illustrations', 'pääosin värikuvitettu').\n replace('chiefly', 'pääosin').\n replace(/\\bcirca\\b/gui, 'noin').\n replace(/coil[- ]?bound/gui, 'kierreselkä').\n replace('color illustrations', 'värikuvitus').\n replace(/comb[- ]?bound/gui, 'kierreselkä').\n replace(/\\bdigital\\b/gui, 'digitaalinen').\n replace(/\\belectronic book\\b/gui, 'verkkoaineisto').\n replace('(flera nummersviter)', '(useita numerointijaksoja)').\n replace(/\\bfolded sheet\\b/gui, 'taitelehti').\n replace(/\\bfärgillustratione[nr]\\b/gui, 'värikuvitus').\n replace(/\\bhard(?:back|cover)\\b/gui, 'kovakantinen').\n replace(/\\bhours\\b/gui, 'tuntia').\n replace(/\\bi flera nummersviter/gui, 'useina numerointijaksoina').\n replace('illustrated', 'kuvitettu').\n replace(/illustrations?\\b/gui, 'kuvitettu'). // Based on usemacron-bookwhere (NB! usemarcon-cyrillux had kuvitus/kuvitettu)\n replace(/\\binbunden\\b/gui, 'kovakantinen'). // swe\n replace(/\\binsert\\b/gui, 'liite').\n replace(/\\binserts\\b/gui, 'liitteitä').\n replace(/\\bin various pagings/gui, 'useina numerointijaksoina').\n replace('leaves of plates', 'kuvalehteä').\n replace(/\\bljudskiva\\b/gui, 'äänilevy').\n replace(/\\bljudskivor\\b/gui, 'äänilevyä').\n replace(/\\bmap\\b/gui, 'kartta').\n replace(/\\bmaps\\b/gui, 'karttoja'). // or karttaa?\n replace('minutes', 'minuuttia').\n replace('mjuka pärmar', 'pehmeäkantinen').\n replace('online resource', 'verkkoaineisto').\n replace('onlineresurs', 'verkkoaineisto').\n replace('onumrerade', 'numeroimatonta').\n replace('pages of plates', 'kuvalehteä').\n replace(/\\bpages\\b/gui, 'sivua').\n replace(/\\bpaperback\\b/gui, 'pehmeäkantinen'). // MTS alt\n replace(/\\bSeiten\\b/gu, 'sivua').\n replace(/\\bsoftcover\\b/gui, 'pehmeäkantinen'). // MTS pref\n replace('sound, color', 'äänellinen, värillinen').\n replace('sound cassettes', 'äänikasettia').replace('sound cassette', 'äänikasetti').\n replace('sound discs', 'äänilevyä').replace(/sound disc\\b/gui, 'äänilevy').\n replace(/(?:spiral[- ]?bound|spiralrygg)/gui, 'kierreselkä').\n replace('svartvit', 'mustavalkoinen').\n replace('unnumbered', 'numeroimatonta').\n replace('(various pagings)', '(useita numerointijaksoja)').\n replace(/\\bverkkojulkaisu\\b/gui, 'verkkoaineisto').\n replace('videodiscs', 'videolevyä').\n replace('videodisc', 'videolevy').\n replace(/\\b1 hour\\b/gui, '1 tunti');\n\n}\n"],"mappings":"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","ignoreList":[]}