@natlibfi/marc-record-validators-melinda 11.6.7 → 12.0.0-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 (545) hide show
  1. package/.github/workflows/melinda-node-tests.yml +1 -1
  2. package/dist/access-rights.js +63 -91
  3. package/dist/access-rights.js.map +7 -1
  4. package/dist/access-rights.test.js +137 -0
  5. package/dist/access-rights.test.js.map +7 -0
  6. package/dist/addMissingField041.js +21 -53
  7. package/dist/addMissingField041.js.map +7 -1
  8. package/dist/addMissingField041.test.js +39 -0
  9. package/dist/addMissingField041.test.js.map +7 -0
  10. package/dist/addMissingField336.js +99 -191
  11. package/dist/addMissingField336.js.map +7 -1
  12. package/dist/addMissingField336.test.js +39 -0
  13. package/dist/addMissingField336.test.js.map +7 -0
  14. package/dist/addMissingField337.js +63 -132
  15. package/dist/addMissingField337.js.map +7 -1
  16. package/dist/addMissingField337.test.js +39 -0
  17. package/dist/addMissingField337.test.js.map +7 -0
  18. package/dist/addMissingField338.js +147 -253
  19. package/dist/addMissingField338.js.map +7 -1
  20. package/dist/addMissingField338.test.js +39 -0
  21. package/dist/addMissingField338.test.js.map +7 -0
  22. package/dist/cyrillux-usemarcon-replacement.js +119 -272
  23. package/dist/cyrillux-usemarcon-replacement.js.map +7 -1
  24. package/dist/cyrillux-usemarcon-replacement.test.js +46 -0
  25. package/dist/cyrillux-usemarcon-replacement.test.js.map +7 -0
  26. package/dist/cyrillux.js +119 -223
  27. package/dist/cyrillux.js.map +7 -1
  28. package/dist/cyrillux.test.js +39 -0
  29. package/dist/cyrillux.test.js.map +7 -0
  30. package/dist/disambiguateSeriesStatements.js +40 -81
  31. package/dist/disambiguateSeriesStatements.js.map +7 -1
  32. package/dist/disambiguateSeriesStatements.test.js +44 -0
  33. package/dist/disambiguateSeriesStatements.test.js.map +7 -0
  34. package/dist/double-commas.js +7 -14
  35. package/dist/double-commas.js.map +7 -1
  36. package/dist/double-commas.test.js +48 -0
  37. package/dist/double-commas.test.js.map +7 -0
  38. package/dist/duplicates-ind1.js +10 -31
  39. package/dist/duplicates-ind1.js.map +7 -1
  40. package/dist/duplicates-ind1.test.js +40 -0
  41. package/dist/duplicates-ind1.test.js.map +7 -0
  42. package/dist/empty-fields.js +10 -22
  43. package/dist/empty-fields.js.map +7 -1
  44. package/dist/empty-fields.test.js +129 -0
  45. package/dist/empty-fields.test.js.map +7 -0
  46. package/dist/ending-punctuation-conf.js +871 -769
  47. package/dist/ending-punctuation-conf.js.map +7 -1
  48. package/dist/ending-punctuation.js +84 -167
  49. package/dist/ending-punctuation.js.map +7 -1
  50. package/dist/ending-punctuation.test.js +2290 -0
  51. package/dist/ending-punctuation.test.js.map +7 -0
  52. package/dist/ending-whitespace.js +10 -35
  53. package/dist/ending-whitespace.js.map +7 -1
  54. package/dist/ending-whitespace.test.js +38 -0
  55. package/dist/ending-whitespace.test.js.map +7 -0
  56. package/dist/field-008-18-34-character-groups.js +40 -125
  57. package/dist/field-008-18-34-character-groups.js.map +7 -1
  58. package/dist/field-008-18-34-character-groups.test.js +45 -0
  59. package/dist/field-008-18-34-character-groups.test.js.map +7 -0
  60. package/dist/field-505-separators.js +19 -39
  61. package/dist/field-505-separators.js.map +7 -1
  62. package/dist/field-505-separators.test.js +45 -0
  63. package/dist/field-505-separators.test.js.map +7 -0
  64. package/dist/field-521-fix.js +19 -47
  65. package/dist/field-521-fix.js.map +7 -1
  66. package/dist/field-521-fix.test.js +44 -0
  67. package/dist/field-521-fix.test.js.map +7 -0
  68. package/dist/field-exclusion.js +37 -91
  69. package/dist/field-exclusion.js.map +7 -1
  70. package/dist/field-exclusion.test.js +821 -0
  71. package/dist/field-exclusion.test.js.map +7 -0
  72. package/dist/field-structure.js +52 -104
  73. package/dist/field-structure.js.map +7 -1
  74. package/dist/field-structure.test.js +587 -0
  75. package/dist/field-structure.test.js.map +7 -0
  76. package/dist/field33XUtils.js +119 -503
  77. package/dist/field33XUtils.js.map +7 -1
  78. package/dist/fields-present.js +11 -23
  79. package/dist/fields-present.js.map +7 -1
  80. package/dist/fields-present.test.js +95 -0
  81. package/dist/fields-present.test.js.map +7 -0
  82. package/dist/fix-33X.js +393 -431
  83. package/dist/fix-33X.js.map +7 -1
  84. package/dist/fix-33X.test.js +39 -0
  85. package/dist/fix-33X.test.js.map +7 -0
  86. package/dist/fix-country-codes.js +20 -50
  87. package/dist/fix-country-codes.js.map +7 -1
  88. package/dist/fix-country-codes.test.js +44 -0
  89. package/dist/fix-country-codes.test.js.map +7 -0
  90. package/dist/fix-language-codes.js +23 -53
  91. package/dist/fix-language-codes.js.map +7 -1
  92. package/dist/fix-language-codes.test.js +38 -0
  93. package/dist/fix-language-codes.test.js.map +7 -0
  94. package/dist/fixRelatorTerms.js +82 -209
  95. package/dist/fixRelatorTerms.js.map +7 -1
  96. package/dist/fixRelatorTerms.test.js +44 -0
  97. package/dist/fixRelatorTerms.test.js.map +7 -0
  98. package/dist/fixed-fields.js +21 -30
  99. package/dist/fixed-fields.js.map +7 -1
  100. package/dist/fixed-fields.test.js +87 -0
  101. package/dist/fixed-fields.test.js.map +7 -0
  102. package/dist/identical-fields.js +8 -24
  103. package/dist/identical-fields.js.map +7 -1
  104. package/dist/identical-fields.test.js +119 -0
  105. package/dist/identical-fields.test.js.map +7 -0
  106. package/dist/index.js +119 -413
  107. package/dist/index.js.map +7 -1
  108. package/dist/indicator-fixes.js +57 -95
  109. package/dist/indicator-fixes.js.map +7 -1
  110. package/dist/indicator-fixes.test.js +42 -0
  111. package/dist/indicator-fixes.test.js.map +7 -0
  112. package/dist/isbn-issn.js +66 -126
  113. package/dist/isbn-issn.js.map +7 -1
  114. package/dist/isbn-issn.test.js +398 -0
  115. package/dist/isbn-issn.test.js.map +7 -0
  116. package/dist/item-language.js +32 -65
  117. package/dist/item-language.js.map +7 -1
  118. package/dist/item-language.test.js +322 -0
  119. package/dist/item-language.test.js.map +7 -0
  120. package/dist/melindaCustomMergeFields.js +5182 -11233
  121. package/dist/melindaCustomMergeFields.js.map +7 -1
  122. package/dist/merge-fields/controlSubfields.js +75 -142
  123. package/dist/merge-fields/controlSubfields.js.map +7 -1
  124. package/dist/merge-fields/counterpartField.js +182 -379
  125. package/dist/merge-fields/counterpartField.js.map +7 -1
  126. package/dist/merge-fields/index.js +15 -49
  127. package/dist/merge-fields/index.js.map +7 -1
  128. package/dist/merge-fields/mergableIndicator.js +18 -51
  129. package/dist/merge-fields/mergableIndicator.js.map +7 -1
  130. package/dist/merge-fields/mergableTag.js +78 -30
  131. package/dist/merge-fields/mergableTag.js.map +7 -1
  132. package/dist/merge-fields/mergeConfig.js +66 -171
  133. package/dist/merge-fields/mergeConfig.js.map +7 -1
  134. package/dist/merge-fields/mergeConstraints.js +323 -1214
  135. package/dist/merge-fields/mergeConstraints.js.map +7 -1
  136. package/dist/merge-fields/mergeField.js +47 -111
  137. package/dist/merge-fields/mergeField.js.map +7 -1
  138. package/dist/merge-fields/mergeIndicator.js +64 -118
  139. package/dist/merge-fields/mergeIndicator.js.map +7 -1
  140. package/dist/merge-fields/mergeOrAddPostprocess.js +14 -38
  141. package/dist/merge-fields/mergeOrAddPostprocess.js.map +7 -1
  142. package/dist/merge-fields/mergeOrAddSubfield.js +62 -104
  143. package/dist/merge-fields/mergeOrAddSubfield.js.map +7 -1
  144. package/dist/merge-fields/mergeSubfield.js +47 -95
  145. package/dist/merge-fields/mergeSubfield.js.map +7 -1
  146. package/dist/merge-fields/removeDuplicateSubfields.js +18 -31
  147. package/dist/merge-fields/removeDuplicateSubfields.js.map +7 -1
  148. package/dist/merge-fields/worldKnowledge.js +15 -40
  149. package/dist/merge-fields/worldKnowledge.js.map +7 -1
  150. package/dist/merge-fields.test.js +44 -0
  151. package/dist/merge-fields.test.js.map +7 -0
  152. package/dist/mergeField500Lisapainokset.js +28 -57
  153. package/dist/mergeField500Lisapainokset.js.map +7 -1
  154. package/dist/mergeField500Lisapainokset.test.js +44 -0
  155. package/dist/mergeField500Lisapainokset.test.js.map +7 -0
  156. package/dist/mergeRelatorTermFields.js +33 -69
  157. package/dist/mergeRelatorTermFields.js.map +7 -1
  158. package/dist/mergeRelatorTermFields.test.js +44 -0
  159. package/dist/mergeRelatorTermFields.test.js.map +7 -0
  160. package/dist/modernize-502.js +23 -55
  161. package/dist/modernize-502.js.map +7 -1
  162. package/dist/modernize-502.test.js +38 -0
  163. package/dist/modernize-502.test.js.map +7 -0
  164. package/dist/multiple-subfield-0.js +23 -48
  165. package/dist/multiple-subfield-0.js.map +7 -1
  166. package/dist/multiple-subfield-0.test.js +44 -0
  167. package/dist/multiple-subfield-0.test.js.map +7 -0
  168. package/dist/non-breaking-space.js +11 -32
  169. package/dist/non-breaking-space.js.map +7 -1
  170. package/dist/non-breaking-space.test.js +38 -0
  171. package/dist/non-breaking-space.test.js.map +7 -0
  172. package/dist/normalize-dashes.js +18 -37
  173. package/dist/normalize-dashes.js.map +7 -1
  174. package/dist/normalize-dashes.test.js +44 -0
  175. package/dist/normalize-dashes.test.js.map +7 -0
  176. package/dist/normalize-identifiers.js +54 -140
  177. package/dist/normalize-identifiers.js.map +7 -1
  178. package/dist/normalize-identifiers.test.js +44 -0
  179. package/dist/normalize-identifiers.test.js.map +7 -0
  180. package/dist/normalize-qualifying-information.js +23 -48
  181. package/dist/normalize-qualifying-information.js.map +7 -1
  182. package/dist/normalize-qualifying-information.test.js +44 -0
  183. package/dist/normalize-qualifying-information.test.js.map +7 -0
  184. package/dist/normalize-utf8-diacritics.js +19 -105
  185. package/dist/normalize-utf8-diacritics.js.map +7 -1
  186. package/dist/normalize-utf8-diacritics.test.js +44 -0
  187. package/dist/normalize-utf8-diacritics.test.js.map +7 -0
  188. package/dist/normalizeFieldForComparison.js +67 -158
  189. package/dist/normalizeFieldForComparison.js.map +7 -1
  190. package/dist/normalizeSubfieldValueForComparison.js +37 -77
  191. package/dist/normalizeSubfieldValueForComparison.js.map +7 -1
  192. package/dist/prepublicationUtils.js +58 -111
  193. package/dist/prepublicationUtils.js.map +7 -1
  194. package/dist/punctuation/index.js +56 -72
  195. package/dist/punctuation/index.js.map +7 -1
  196. package/dist/punctuation/rules/aut.js +372 -331
  197. package/dist/punctuation/rules/aut.js.map +7 -1
  198. package/dist/punctuation/rules/bib.js +420 -373
  199. package/dist/punctuation/rules/bib.js.map +7 -1
  200. package/dist/punctuation/rules/index.js +7 -21
  201. package/dist/punctuation/rules/index.js.map +7 -1
  202. package/dist/punctuation.test.js +44 -0
  203. package/dist/punctuation.test.js.map +7 -0
  204. package/dist/punctuation2.js +251 -800
  205. package/dist/punctuation2.js.map +7 -1
  206. package/dist/punctuation2.test.js +44 -0
  207. package/dist/punctuation2.test.js.map +7 -0
  208. package/dist/reindexSubfield6OccurenceNumbers.js +61 -96
  209. package/dist/reindexSubfield6OccurenceNumbers.js.map +7 -1
  210. package/dist/reindexSubfield6OccurenceNumbers.test.js +44 -0
  211. package/dist/reindexSubfield6OccurenceNumbers.test.js.map +7 -0
  212. package/dist/removeDuplicateDataFields.js +102 -202
  213. package/dist/removeDuplicateDataFields.js.map +7 -1
  214. package/dist/removeDuplicateDataFields.test.js +44 -0
  215. package/dist/removeDuplicateDataFields.test.js.map +7 -0
  216. package/dist/removeInferiorDataFields.js +103 -227
  217. package/dist/removeInferiorDataFields.js.map +7 -1
  218. package/dist/removeInferiorDataFields.test.js +44 -0
  219. package/dist/removeInferiorDataFields.test.js.map +7 -0
  220. package/dist/resolvable-ext-references-melinda.js +25 -60
  221. package/dist/resolvable-ext-references-melinda.js.map +7 -1
  222. package/dist/resolvable-ext-references-melinda.test.js +160 -0
  223. package/dist/resolvable-ext-references-melinda.test.js.map +7 -0
  224. package/dist/resolveOrphanedSubfield6s.js +33 -64
  225. package/dist/resolveOrphanedSubfield6s.js.map +7 -1
  226. package/dist/resolveOrphanedSubfield6s.test.js +44 -0
  227. package/dist/resolveOrphanedSubfield6s.test.js.map +7 -0
  228. package/dist/sanitize-vocabulary-source-codes.js +27 -55
  229. package/dist/sanitize-vocabulary-source-codes.js.map +7 -1
  230. package/dist/sanitize-vocabulary-source-codes.test.js +45 -0
  231. package/dist/sanitize-vocabulary-source-codes.test.js.map +7 -0
  232. package/dist/sort-tags.js +13 -25
  233. package/dist/sort-tags.js.map +7 -1
  234. package/dist/sort-tags.test.js +261 -0
  235. package/dist/sort-tags.test.js.map +7 -0
  236. package/dist/sortFields.js +152 -222
  237. package/dist/sortFields.js.map +7 -1
  238. package/dist/sortFields.test.js +44 -0
  239. package/dist/sortFields.test.js.map +7 -0
  240. package/dist/sortRelatorTerms.js +30 -68
  241. package/dist/sortRelatorTerms.js.map +7 -1
  242. package/dist/sortRelatorTerms.test.js +44 -0
  243. package/dist/sortRelatorTerms.test.js.map +7 -0
  244. package/dist/sortSubfields.js +102 -255
  245. package/dist/sortSubfields.js.map +7 -1
  246. package/dist/sortSubfields.test.js +44 -0
  247. package/dist/sortSubfields.test.js.map +7 -0
  248. package/dist/stripPunctuation.js +13 -36
  249. package/dist/stripPunctuation.js.map +7 -1
  250. package/dist/stripPunctuation.test.js +44 -0
  251. package/dist/stripPunctuation.test.js.map +7 -0
  252. package/dist/subfield-exclusion.js +28 -75
  253. package/dist/subfield-exclusion.js.map +7 -1
  254. package/dist/subfield-exclusion.test.js +471 -0
  255. package/dist/subfield-exclusion.test.js.map +7 -0
  256. package/dist/subfield6Utils.js +107 -269
  257. package/dist/subfield6Utils.js.map +7 -1
  258. package/dist/subfield8Utils.js +26 -50
  259. package/dist/subfield8Utils.js.map +7 -1
  260. package/dist/subfieldValueNormalizations.js +40 -74
  261. package/dist/subfieldValueNormalizations.js.map +7 -1
  262. package/dist/subfieldValueNormalizations.test.js +45 -0
  263. package/dist/subfieldValueNormalizations.test.js.map +7 -0
  264. package/dist/sync-007-and-300.js +22 -53
  265. package/dist/sync-007-and-300.js.map +7 -1
  266. package/dist/sync-007-and-300.test.js +44 -0
  267. package/dist/sync-007-and-300.test.js.map +7 -0
  268. package/dist/translate-terms.js +67 -155
  269. package/dist/translate-terms.js.map +7 -1
  270. package/dist/translate-terms.test.js +44 -0
  271. package/dist/translate-terms.test.js.map +7 -0
  272. package/dist/typeOfDate-008.js +10 -25
  273. package/dist/typeOfDate-008.js.map +7 -1
  274. package/dist/typeOfDate-008.test.js +40 -0
  275. package/dist/typeOfDate-008.test.js.map +7 -0
  276. package/dist/unicode-decomposition.js +94 -107
  277. package/dist/unicode-decomposition.js.map +7 -1
  278. package/dist/unicode-decomposition.test.js +94 -0
  279. package/dist/unicode-decomposition.test.js.map +7 -0
  280. package/dist/update-field-540.js +30 -75
  281. package/dist/update-field-540.js.map +7 -1
  282. package/dist/update-field-540.test.js +44 -0
  283. package/dist/update-field-540.test.js.map +7 -0
  284. package/dist/urn.js +55 -128
  285. package/dist/urn.js.map +7 -1
  286. package/dist/urn.test.js +44 -0
  287. package/dist/urn.test.js.map +7 -0
  288. package/dist/utils.js +72 -126
  289. package/dist/utils.js.map +7 -1
  290. package/eslint.config.mjs +1 -2
  291. package/package.json +21 -93
  292. package/src/access-rights.js +1 -1
  293. package/src/{access-rights.spec.js → access-rights.test.js} +9 -10
  294. package/src/addMissingField041.js +1 -1
  295. package/src/{addMissingField336.spec.js → addMissingField041.test.js} +13 -14
  296. package/src/addMissingField336.js +3 -3
  297. package/src/{addMissingField041.spec.js → addMissingField336.test.js} +13 -14
  298. package/src/addMissingField337.js +2 -2
  299. package/src/{addMissingField337.spec.js → addMissingField337.test.js} +13 -14
  300. package/src/addMissingField338.js +2 -2
  301. package/src/{addMissingField338.spec.js → addMissingField338.test.js} +13 -14
  302. package/src/cyrillux-usemarcon-replacement.js +18 -18
  303. package/src/cyrillux-usemarcon-replacement.test.js +55 -0
  304. package/src/cyrillux.js +19 -12
  305. package/src/{cyrillux.spec.js → cyrillux.test.js} +13 -14
  306. package/src/disambiguateSeriesStatements.js +2 -2
  307. package/src/{disambiguateSeriesStatements.spec.js → disambiguateSeriesStatements.test.js} +12 -13
  308. package/src/double-commas.js +1 -1
  309. package/src/{double-commas.spec.js → double-commas.test.js} +9 -11
  310. package/src/duplicates-ind1.js +1 -1
  311. package/src/{duplicates-ind1.spec.js → duplicates-ind1.test.js} +12 -13
  312. package/src/{empty-fields.spec.js → empty-fields.test.js} +11 -13
  313. package/src/ending-punctuation.js +1 -1
  314. package/src/{ending-punctuation.spec.js → ending-punctuation.test.js} +172 -173
  315. package/src/{ending-whitespace.spec.js → ending-whitespace.test.js} +12 -13
  316. package/src/field-008-18-34-character-groups.js +2 -2
  317. package/src/{field-008-18-34-character-groups.spec.js → field-008-18-34-character-groups.test.js} +13 -13
  318. package/src/field-505-separators.js +3 -3
  319. package/src/{field-505-separators.spec.js → field-505-separators.test.js} +16 -14
  320. package/src/field-521-fix.js +2 -2
  321. package/src/{field-521-fix.spec.js → field-521-fix.test.js} +12 -13
  322. package/src/field-exclusion.js +1 -1
  323. package/src/{field-exclusion.spec.js → field-exclusion.test.js} +60 -57
  324. package/src/{field-structure.spec.js → field-structure.test.js} +29 -29
  325. package/src/{fields-present.spec.js → fields-present.test.js} +12 -15
  326. package/src/fix-33X.js +4 -4
  327. package/src/{fix-33X.spec.js → fix-33X.test.js} +13 -14
  328. package/src/fix-country-codes.js +1 -1
  329. package/src/{fix-country-codes.spec.js → fix-country-codes.test.js} +12 -13
  330. package/src/fix-language-codes.js +5 -5
  331. package/src/{fix-language-codes.spec.js → fix-language-codes.test.js} +12 -13
  332. package/src/fixRelatorTerms.js +5 -5
  333. package/src/{fixRelatorTerms.spec.js → fixRelatorTerms.test.js} +13 -13
  334. package/src/{fixed-fields.spec.js → fixed-fields.test.js} +11 -14
  335. package/src/identical-fields.js +1 -1
  336. package/src/{identical-fields.spec.js → identical-fields.test.js} +9 -11
  337. package/src/indicator-fixes.js +3 -3
  338. package/src/{indicator-fixes.spec.js → indicator-fixes.test.js} +9 -12
  339. package/src/isbn-issn.js +1 -1
  340. package/src/{isbn-issn.spec.js → isbn-issn.test.js} +20 -22
  341. package/src/{item-language.spec.js → item-language.test.js} +21 -22
  342. package/src/merge-fields/controlSubfields.js +1 -1
  343. package/src/merge-fields/counterpartField.js +8 -9
  344. package/src/merge-fields/index.js +1 -1
  345. package/src/merge-fields/mergableIndicator.js +1 -1
  346. package/src/merge-fields/mergeField.js +6 -6
  347. package/src/merge-fields/mergeIndicator.js +1 -1
  348. package/src/merge-fields/mergeOrAddPostprocess.js +4 -4
  349. package/src/merge-fields/mergeOrAddSubfield.js +2 -2
  350. package/src/merge-fields/mergeSubfield.js +4 -4
  351. package/src/merge-fields/removeDuplicateSubfields.js +2 -2
  352. package/src/{merge-fields.spec.js → merge-fields.test.js} +12 -13
  353. package/src/{mergeField500Lisapainokset.spec.js → mergeField500Lisapainokset.test.js} +12 -13
  354. package/src/mergeRelatorTermFields.js +5 -7
  355. package/src/{mergeRelatorTermFields.spec.js → mergeRelatorTermFields.test.js} +12 -13
  356. package/src/modernize-502.js +1 -1
  357. package/src/{modernize-502.spec.js → modernize-502.test.js} +12 -13
  358. package/src/multiple-subfield-0.js +3 -3
  359. package/src/{multiple-subfield-0.spec.js → multiple-subfield-0.test.js} +13 -13
  360. package/src/{non-breaking-space.spec.js → non-breaking-space.test.js} +12 -13
  361. package/src/normalize-dashes.js +2 -2
  362. package/src/{normalize-dashes.spec.js → normalize-dashes.test.js} +12 -13
  363. package/src/normalize-identifiers.js +1 -1
  364. package/src/{normalize-identifiers.spec.js → normalize-identifiers.test.js} +12 -13
  365. package/src/normalize-qualifying-information.js +2 -2
  366. package/src/{normalize-qualifying-information.spec.js → normalize-qualifying-information.test.js} +12 -13
  367. package/src/normalize-utf8-diacritics.js +2 -2
  368. package/src/{normalize-utf8-diacritics.spec.js → normalize-utf8-diacritics.test.js} +13 -13
  369. package/src/normalizeFieldForComparison.js +6 -6
  370. package/src/normalizeSubfieldValueForComparison.js +1 -1
  371. package/src/prepublicationUtils.js +4 -4
  372. package/src/punctuation/index.js +1 -1
  373. package/src/punctuation/rules/index.js +2 -2
  374. package/src/{punctuation.spec.js → punctuation.test.js} +12 -13
  375. package/src/punctuation2.js +4 -4
  376. package/src/{punctuation2.spec.js → punctuation2.test.js} +12 -13
  377. package/src/reindexSubfield6OccurenceNumbers.js +5 -7
  378. package/src/{reindexSubfield6OccurenceNumbers.spec.js → reindexSubfield6OccurenceNumbers.test.js} +12 -13
  379. package/src/removeDuplicateDataFields.js +11 -19
  380. package/src/{removeDuplicateDataFields.spec.js → removeDuplicateDataFields.test.js} +12 -13
  381. package/src/removeInferiorDataFields.js +11 -11
  382. package/src/{removeInferiorDataFields.spec.js → removeInferiorDataFields.test.js} +13 -13
  383. package/src/resolvable-ext-references-melinda.js +1 -1
  384. package/src/{resolvable-ext-references-melinda.spec.js → resolvable-ext-references-melinda.test.js} +42 -27
  385. package/src/resolveOrphanedSubfield6s.js +5 -5
  386. package/src/{resolveOrphanedSubfield6s.spec.js → resolveOrphanedSubfield6s.test.js} +13 -13
  387. package/src/sanitize-vocabulary-source-codes.js +4 -4
  388. package/src/{sanitize-vocabulary-source-codes.spec.js → sanitize-vocabulary-source-codes.test.js} +16 -14
  389. package/src/{sort-tags.spec.js → sort-tags.test.js} +9 -11
  390. package/src/sortFields.js +4 -4
  391. package/src/{sortFields.spec.js → sortFields.test.js} +12 -13
  392. package/src/sortRelatorTerms.js +3 -3
  393. package/src/{sortRelatorTerms.spec.js → sortRelatorTerms.test.js} +13 -13
  394. package/src/sortSubfields.js +1 -1
  395. package/src/{sortSubfields.spec.js → sortSubfields.test.js} +13 -13
  396. package/src/stripPunctuation.js +3 -3
  397. package/src/{stripPunctuation.spec.js → stripPunctuation.test.js} +13 -13
  398. package/src/subfield-exclusion.js +1 -1
  399. package/src/{subfield-exclusion.spec.js → subfield-exclusion.test.js} +45 -36
  400. package/src/subfield6Utils.js +6 -10
  401. package/src/subfield8Utils.js +4 -4
  402. package/src/subfieldValueNormalizations.js +3 -3
  403. package/src/{subfieldValueNormalizations.spec.js → subfieldValueNormalizations.test.js} +18 -14
  404. package/src/sync-007-and-300.js +2 -2
  405. package/src/{sync-007-and-300.spec.js → sync-007-and-300.test.js} +13 -13
  406. package/src/translate-terms.js +3 -3
  407. package/src/{translate-terms.spec.js → translate-terms.test.js} +13 -13
  408. package/src/{typeOfDate-008.spec.js → typeOfDate-008.test.js} +12 -13
  409. package/src/{unicode-decomposition.spec.js → unicode-decomposition.test.js} +10 -16
  410. package/src/update-field-540.js +2 -2
  411. package/src/{update-field-540.spec.js → update-field-540.test.js} +13 -10
  412. package/src/urn.js +2 -2
  413. package/src/{urn.spec.js → urn.test.js} +12 -13
  414. package/src/utils.js +3 -3
  415. package/test-fixtures/field-505-separators/03/expectedResult.json +3 -1
  416. package/test-fixtures/field-505-separators/03/record.json +3 -0
  417. package/test-fixtures/normalize-subfield-value/01/metadata.json +4 -1
  418. package/test-fixtures/normalize-subfield-value/01/record.json +3 -0
  419. package/test-fixtures/normalize-subfield-value/02/expectedResult.json +3 -1
  420. package/test-fixtures/normalize-subfield-value/02/metadata.json +2 -1
  421. package/test-fixtures/normalize-subfield-value/02/record.json +3 -0
  422. package/test-fixtures/sanitize-vocabulary-source-codes/f03/expectedResult.json +3 -1
  423. package/test-fixtures/sanitize-vocabulary-source-codes/f04/expectedResult.json +3 -1
  424. package/test-fixtures/sanitize-vocabulary-source-codes/v04/metadata.json +1 -4
  425. package/test-fixtures/sanitize-vocabulary-source-codes/v04/record.json +1 -1
  426. package/dist/access-rights.spec.js +0 -195
  427. package/dist/access-rights.spec.js.map +0 -1
  428. package/dist/addMissingField041.spec.js +0 -45
  429. package/dist/addMissingField041.spec.js.map +0 -1
  430. package/dist/addMissingField336.spec.js +0 -45
  431. package/dist/addMissingField336.spec.js.map +0 -1
  432. package/dist/addMissingField337.spec.js +0 -43
  433. package/dist/addMissingField337.spec.js.map +0 -1
  434. package/dist/addMissingField338.spec.js +0 -45
  435. package/dist/addMissingField338.spec.js.map +0 -1
  436. package/dist/cyrillux-usemarcon-replacement.spec.js +0 -45
  437. package/dist/cyrillux-usemarcon-replacement.spec.js.map +0 -1
  438. package/dist/cyrillux.spec.js +0 -46
  439. package/dist/cyrillux.spec.js.map +0 -1
  440. package/dist/disambiguateSeriesStatements.spec.js +0 -51
  441. package/dist/disambiguateSeriesStatements.spec.js.map +0 -1
  442. package/dist/double-commas.spec.js +0 -73
  443. package/dist/double-commas.spec.js.map +0 -1
  444. package/dist/duplicates-ind1.spec.js +0 -45
  445. package/dist/duplicates-ind1.spec.js.map +0 -1
  446. package/dist/empty-fields.spec.js +0 -118
  447. package/dist/empty-fields.spec.js.map +0 -1
  448. package/dist/ending-punctuation.spec.js +0 -2654
  449. package/dist/ending-punctuation.spec.js.map +0 -1
  450. package/dist/ending-whitespace.spec.js +0 -42
  451. package/dist/ending-whitespace.spec.js.map +0 -1
  452. package/dist/field-008-18-34-character-groups.spec.js +0 -51
  453. package/dist/field-008-18-34-character-groups.spec.js.map +0 -1
  454. package/dist/field-505-separators.spec.js +0 -51
  455. package/dist/field-505-separators.spec.js.map +0 -1
  456. package/dist/field-521-fix.spec.js +0 -51
  457. package/dist/field-521-fix.spec.js.map +0 -1
  458. package/dist/field-exclusion.spec.js +0 -1054
  459. package/dist/field-exclusion.spec.js.map +0 -1
  460. package/dist/field-structure.spec.js +0 -535
  461. package/dist/field-structure.spec.js.map +0 -1
  462. package/dist/fields-present.spec.js +0 -121
  463. package/dist/fields-present.spec.js.map +0 -1
  464. package/dist/fix-33X.spec.js +0 -45
  465. package/dist/fix-33X.spec.js.map +0 -1
  466. package/dist/fix-country-codes.spec.js +0 -51
  467. package/dist/fix-country-codes.spec.js.map +0 -1
  468. package/dist/fix-language-codes.spec.js +0 -44
  469. package/dist/fix-language-codes.spec.js.map +0 -1
  470. package/dist/fixRelatorTerms.spec.js +0 -51
  471. package/dist/fixRelatorTerms.spec.js.map +0 -1
  472. package/dist/fixed-fields.spec.js +0 -140
  473. package/dist/fixed-fields.spec.js.map +0 -1
  474. package/dist/identical-fields.spec.js +0 -99
  475. package/dist/identical-fields.spec.js.map +0 -1
  476. package/dist/indicator-fixes.spec.js +0 -51
  477. package/dist/indicator-fixes.spec.js.map +0 -1
  478. package/dist/isbn-issn.spec.js +0 -595
  479. package/dist/isbn-issn.spec.js.map +0 -1
  480. package/dist/item-language.spec.js +0 -306
  481. package/dist/item-language.spec.js.map +0 -1
  482. package/dist/melindaCustomMergeFields.json +0 -5120
  483. package/dist/merge-fields.spec.js +0 -51
  484. package/dist/merge-fields.spec.js.map +0 -1
  485. package/dist/mergeField500Lisapainokset.spec.js +0 -51
  486. package/dist/mergeField500Lisapainokset.spec.js.map +0 -1
  487. package/dist/mergeRelatorTermFields.spec.js +0 -51
  488. package/dist/mergeRelatorTermFields.spec.js.map +0 -1
  489. package/dist/modernize-502.spec.js +0 -49
  490. package/dist/modernize-502.spec.js.map +0 -1
  491. package/dist/multiple-subfield-0.spec.js +0 -51
  492. package/dist/multiple-subfield-0.spec.js.map +0 -1
  493. package/dist/non-breaking-space.spec.js +0 -42
  494. package/dist/non-breaking-space.spec.js.map +0 -1
  495. package/dist/normalize-dashes.spec.js +0 -51
  496. package/dist/normalize-dashes.spec.js.map +0 -1
  497. package/dist/normalize-identifiers.spec.js +0 -51
  498. package/dist/normalize-identifiers.spec.js.map +0 -1
  499. package/dist/normalize-qualifying-information.spec.js +0 -51
  500. package/dist/normalize-qualifying-information.spec.js.map +0 -1
  501. package/dist/normalize-utf8-diacritics.spec.js +0 -51
  502. package/dist/normalize-utf8-diacritics.spec.js.map +0 -1
  503. package/dist/punctuation.spec.js +0 -51
  504. package/dist/punctuation.spec.js.map +0 -1
  505. package/dist/punctuation2.spec.js +0 -51
  506. package/dist/punctuation2.spec.js.map +0 -1
  507. package/dist/reindexSubfield6OccurenceNumbers.spec.js +0 -51
  508. package/dist/reindexSubfield6OccurenceNumbers.spec.js.map +0 -1
  509. package/dist/removeDuplicateDataFields.spec.js +0 -51
  510. package/dist/removeDuplicateDataFields.spec.js.map +0 -1
  511. package/dist/removeInferiorDataFields.spec.js +0 -51
  512. package/dist/removeInferiorDataFields.spec.js.map +0 -1
  513. package/dist/resolvable-ext-references-melinda.spec.js +0 -166
  514. package/dist/resolvable-ext-references-melinda.spec.js.map +0 -1
  515. package/dist/resolveOrphanedSubfield6s.spec.js +0 -51
  516. package/dist/resolveOrphanedSubfield6s.spec.js.map +0 -1
  517. package/dist/sanitize-vocabulary-source-codes.spec.js +0 -51
  518. package/dist/sanitize-vocabulary-source-codes.spec.js.map +0 -1
  519. package/dist/sort-tags.spec.js +0 -207
  520. package/dist/sort-tags.spec.js.map +0 -1
  521. package/dist/sortFields.spec.js +0 -51
  522. package/dist/sortFields.spec.js.map +0 -1
  523. package/dist/sortRelatorTerms.spec.js +0 -51
  524. package/dist/sortRelatorTerms.spec.js.map +0 -1
  525. package/dist/sortSubfields.spec.js +0 -52
  526. package/dist/sortSubfields.spec.js.map +0 -1
  527. package/dist/stripPunctuation.spec.js +0 -51
  528. package/dist/stripPunctuation.spec.js.map +0 -1
  529. package/dist/subfield-exclusion.spec.js +0 -523
  530. package/dist/subfield-exclusion.spec.js.map +0 -1
  531. package/dist/subfieldValueNormalizations.spec.js +0 -51
  532. package/dist/subfieldValueNormalizations.spec.js.map +0 -1
  533. package/dist/sync-007-and-300.spec.js +0 -51
  534. package/dist/sync-007-and-300.spec.js.map +0 -1
  535. package/dist/translate-terms.spec.js +0 -51
  536. package/dist/translate-terms.spec.js.map +0 -1
  537. package/dist/typeOfDate-008.spec.js +0 -47
  538. package/dist/typeOfDate-008.spec.js.map +0 -1
  539. package/dist/unicode-decomposition.spec.js +0 -91
  540. package/dist/unicode-decomposition.spec.js.map +0 -1
  541. package/dist/update-field-540.spec.js +0 -51
  542. package/dist/update-field-540.spec.js.map +0 -1
  543. package/dist/urn.spec.js +0 -52
  544. package/dist/urn.spec.js.map +0 -1
  545. package/src/cyrillux-usemarcon-replacement.spec.js +0 -47
@@ -1,432 +1,279 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = _default;
7
- exports.fixLeader = fixLeader;
8
- exports.removeFromOldCatalog = removeFromOldCatalog;
9
- exports.removeOwnershipSubfield5 = removeOwnershipSubfield5;
10
- var _clone = _interopRequireDefault(require("clone"));
11
- var _marcRecord = require("@natlibfi/marc-record");
12
- var _fix33X = _interopRequireDefault(require("./fix-33X"));
13
- var _addMissingField = _interopRequireDefault(require("./addMissingField041"));
14
- var _addMissingField2 = _interopRequireDefault(require("./addMissingField336"));
15
- var _addMissingField3 = _interopRequireDefault(require("./addMissingField337"));
16
- var _addMissingField4 = _interopRequireDefault(require("./addMissingField338"));
17
- var _fixCountryCodes = _interopRequireDefault(require("./fix-country-codes"));
18
- var _fixLanguageCodes = _interopRequireDefault(require("./fix-language-codes"));
19
- var _fixRelatorTerms = _interopRequireDefault(require("./fixRelatorTerms"));
20
- var _indicatorFixes = _interopRequireDefault(require("./indicator-fixes"));
21
- var _punctuation = _interopRequireDefault(require("./punctuation2"));
22
- var _normalizeQualifyingInformation = _interopRequireDefault(require("./normalize-qualifying-information"));
23
- var _sortSubfields = require("./sortSubfields");
24
- var _utils = require("./utils");
25
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
26
- /*
27
- * cyrillux-usemarcon-replacement.js -- implement and improve https://github.com/NatLibFi/USEMARCON-Cyrillux/tree/master
28
- *
29
- * Author(s): Nicholas Volk <nicholas.volk@helsinki.fi>
30
- *
31
- */
32
-
33
- // import createDebugLogger from 'debug';
34
-
35
- // const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/punctuation2');
36
-
37
- const description = 'Replacement for Cyrillux usemarcon rules';
38
-
39
- // Extended original list with 541, 561, 562, 583, 584
40
- // 017, 044... et al are LL additions from 2019 (via USEMARCON-RDA)
41
- const 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'];
42
- function _default() {
1
+ import clone from "clone";
2
+ import { MarcRecord } from "@natlibfi/marc-record";
3
+ import { default as fix33X } from "./fix-33X.js";
4
+ import { default as add041 } from "./addMissingField041.js";
5
+ import { default as add336 } from "./addMissingField336.js";
6
+ import { default as add337 } from "./addMissingField337.js";
7
+ import { default as add338 } from "./addMissingField338.js";
8
+ import { default as fixCountryCodes } from "./fix-country-codes.js";
9
+ import { default as fixLanguageCodes } from "./fix-language-codes.js";
10
+ import { default as fixRelatorTerms } from "./fixRelatorTerms.js";
11
+ import { default as fixIndicators } from "./indicator-fixes.js";
12
+ import { default as fixPunctuation } from "./punctuation2.js";
13
+ import { default as fixQualifyingInformation } from "./normalize-qualifying-information.js";
14
+ import { sortAdjacentSubfields } from "./sortSubfields.js";
15
+ import { fieldHasSubfield, nvdebug, recordRemoveValuelessSubfields, recordToString, removeSubfield } from "./utils.js";
16
+ const description = "Replacement for Cyrillux usemarcon rules";
17
+ const 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"];
18
+ export default function() {
43
19
  return {
44
20
  description,
45
21
  fix,
46
22
  validate
47
23
  };
48
24
  function fix(record) {
49
- (0, _utils.nvdebug)(`${description}: fix`);
25
+ nvdebug(`${description}: fix`);
50
26
  realFix(record);
51
- const res = {
52
- message: [],
53
- fix: [],
54
- valid: true
55
- };
27
+ const res = { message: [], fix: [], valid: true };
56
28
  return res;
57
29
  }
58
30
  function realFixNonAleph(record) {
59
31
  if (isAlephRecord(record)) {
60
32
  return;
61
33
  }
62
-
63
- // Update LDR/17 to '4'
64
34
  record.leader = `${record.leader.substring(0, 17)}4${record.leader.substring(18, 24)}`;
65
-
66
- // Remove unwanted fields:
67
- record.fields = record.fields.filter(f => !dropTags.includes(f.tag));
68
- (0, _utils.removeSubfield)(record, '020', 'c');
69
-
70
- // Remove 084 fields that don't have $2 ykl (based on USEMARCON-RDA/bw_rda_kyril.rul code by LL 2019)
71
- record.fields = record.fields.filter(f => f.tag !== '084' || f.subfields.some(sf => sf.code === '2' && sf.value === 'ykl'));
35
+ record.fields = record.fields.filter((f) => !dropTags.includes(f.tag));
36
+ removeSubfield(record, "020", "c");
37
+ record.fields = record.fields.filter((f) => f.tag !== "084" || f.subfields.some((sf) => sf.code === "2" && sf.value === "ykl"));
72
38
  fieldSpecificStuff(record.fields);
73
39
  function fieldSpecificStuff(fields) {
74
40
  const [field, ...rest] = fields;
75
- if (field === undefined) {
41
+ if (field === void 0) {
76
42
  return;
77
43
  }
78
44
  removeOwnershipSubfield5(field);
79
- removeFromOldCatalog(field); // Remove LoC phrase "[from old catalog]" from srings
45
+ removeFromOldCatalog(field);
80
46
  translateFieldToFinnish(field);
81
47
  return fieldSpecificStuff(rest);
82
48
  }
83
- fixField040(record); // All $b values are changed to 'mul'. As a side effect 33X$b=>$a mappings are in Finnish! Ok in this domain!
84
-
49
+ fixField040(record);
85
50
  fieldSpecificStuff2(record.fields);
86
51
  function fieldSpecificStuff2(fields) {
87
52
  const [field, ...rest] = fields;
88
- if (field === undefined) {
53
+ if (field === void 0) {
89
54
  return;
90
55
  }
91
- removeSubfieldH(field); // NB! Do this only after 33X creation, as 245$h might be useful there!
92
-
56
+ removeSubfieldH(field);
93
57
  field100eKirjoittaja(field);
94
58
  function field100eKirjoittaja(f) {
95
- // LL 2019 USEMARCON-RDA rule
96
- if (f.tag === '100' && !(0, _utils.fieldHasSubfield)(f, 'e') && record.isBK()) {
97
- f.subfields = [{
98
- code: 'e',
99
- value: 'kirjoittaja.'
100
- }, ...f.subfields];
101
- (0, _sortSubfields.sortAdjacentSubfields)(f);
102
- // Punctuation will be done later on...
59
+ if (f.tag === "100" && !fieldHasSubfield(f, "e") && record.isBK()) {
60
+ f.subfields = [{ code: "e", value: "kirjoittaja." }, ...f.subfields];
61
+ sortAdjacentSubfields(f);
103
62
  return;
104
63
  }
105
64
  }
106
65
  field260To264s(field, record);
107
-
108
- // NB! 300 (before or after 33X creation?)
109
66
  field410To490And810(field, record);
110
67
  field440To490And830(field, record);
111
- // handle505(field); // not applying them usemarcon-cyrillux rules for field 505 as I can't understand their motivation.
112
68
  return fieldSpecificStuff2(rest);
113
69
  }
114
70
  }
115
71
  function realFixAll1(record) {
116
- fixLeader(record); // Fix defaults, esp. LDR/18=i
117
-
118
- (0, _fixCountryCodes.default)().fix(record); // 008/15-17
119
- (0, _fixLanguageCodes.default)().fix(record); // 008/35-37 AND 041 (note that all relevant subfield codes are fixed, not just $a)
120
-
121
- (0, _utils.recordRemoveValuelessSubfields)(record);
122
-
123
- // Field 028: use $b$a, not $a$b:
124
- const f028 = record.fields.filter(f => f.tag === '028');
125
- f028.forEach(f => (0, _sortSubfields.sortAdjacentSubfields)(f)); // eslint-disable-line array-callback-return
126
-
127
- (0, _addMissingField.default)().fix(record);
72
+ fixLeader(record);
73
+ fixCountryCodes().fix(record);
74
+ fixLanguageCodes().fix(record);
75
+ recordRemoveValuelessSubfields(record);
76
+ const f028 = record.fields.filter((f) => f.tag === "028");
77
+ f028.forEach((f) => sortAdjacentSubfields(f));
78
+ add041().fix(record);
128
79
  }
129
80
  function realFixAll2(record) {
130
- (0, _normalizeQualifyingInformation.default)().fix(record); // 015, 020, 024 and 028
131
-
132
- // Cyrillux specific code might change 040$b and thus affect these rules:
133
- (0, _fixRelatorTerms.default)().fix(record);
134
- (0, _fix33X.default)().fix(record); // 33X$a => 33X$a$b$2
135
- (0, _addMissingField2.default)().fix(record);
136
- (0, _addMissingField3.default)().fix(record);
137
- (0, _addMissingField4.default)().fix(record);
138
-
139
- // 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:
140
- (0, _indicatorFixes.default)().fix(record);
141
- (0, _punctuation.default)().fix(record);
81
+ fixQualifyingInformation().fix(record);
82
+ fixRelatorTerms().fix(record);
83
+ fix33X().fix(record);
84
+ add336().fix(record);
85
+ add337().fix(record);
86
+ add338().fix(record);
87
+ fixIndicators().fix(record);
88
+ fixPunctuation().fix(record);
142
89
  }
143
90
  function realFix(record) {
144
91
  realFixAll1(record);
145
92
  realFixNonAleph(record);
146
93
  realFixAll2(record);
147
- const res = {
148
- message: [],
149
- fix: [],
150
- valid: true
151
- };
94
+ const res = { message: [], fix: [], valid: true };
152
95
  return res;
153
96
  }
154
-
155
- // Validation is currently done in subparts
156
97
  function validate(record) {
157
- (0, _utils.nvdebug)(`${description}: validate`);
158
- const originalString = (0, _utils.recordToString)(record);
159
- const clonedRecord = new _marcRecord.MarcRecord(record, {
160
- subfieldValues: false
161
- });
98
+ nvdebug(`${description}: validate`);
99
+ const originalString = recordToString(record);
100
+ const clonedRecord = new MarcRecord(record, { subfieldValues: false });
162
101
  realFix(clonedRecord);
163
- const modifiedString = (0, _utils.recordToString)(clonedRecord);
102
+ const modifiedString = recordToString(clonedRecord);
164
103
  if (originalString === modifiedString) {
165
- return {
166
- message: [],
167
- valid: true
168
- };
104
+ return { message: [], valid: true };
169
105
  }
170
- return {
171
- message: ['Record changed'],
172
- valid: false
173
- }; // Less than descriptive but will do...
106
+ return { message: ["Record changed"], valid: false };
174
107
  }
175
108
  }
176
109
  function fixField040(record) {
177
- const f040 = record.get('040');
178
- const subfieldsBE = [{
179
- code: 'b',
180
- value: 'mul'
181
- }, {
182
- code: 'e',
183
- value: 'rda'
184
- }];
185
-
186
- // Add 040 if there isn't one:
110
+ const f040 = record.get("040");
111
+ const subfieldsBE = [
112
+ { code: "b", value: "mul" },
113
+ { code: "e", value: "rda" }
114
+ ];
187
115
  if (f040.length === 0) {
188
- const data = {
189
- tag: '040',
190
- ind1: ' ',
191
- ind2: ' ',
192
- subfields: subfieldsBE
193
- };
116
+ const data = { tag: "040", ind1: " ", ind2: " ", subfields: subfieldsBE };
194
117
  record.insertField(data);
195
118
  return;
196
119
  }
197
- f040.forEach(f => fixField040Subfields(f)); // eslint-disable-line array-callback-return
198
-
120
+ f040.forEach((f) => fixField040Subfields(f));
199
121
  function fixField040Subfields(field) {
200
- field.subfields = field.subfields.filter(sf => !['b', 'e'].includes(sf.code));
122
+ field.subfields = field.subfields.filter((sf) => !["b", "e"].includes(sf.code));
201
123
  field.subfields.push(subfieldsBE[0]);
202
124
  field.subfields.push(subfieldsBE[1]);
203
- (0, _sortSubfields.sortAdjacentSubfields)(field); // put $b and $e to their proper places
125
+ sortAdjacentSubfields(field);
204
126
  }
205
127
  }
206
- function removeFromOldCatalog(field) {
128
+ export function removeFromOldCatalog(field) {
207
129
  if (!field.tag.match(/^(?:240|65[0135]|[1678](?:00|10|11|30))$/u)) {
208
130
  return;
209
131
  }
210
- // See https://catalog.loc.gov/vwebv/ui/en_US/htdocs/help/faqs.html for motivation
211
- field.subfields?.forEach(sf => removeFromOldCatalogFromSubfield(sf)); // eslint-disable-line array-callback-return
212
-
132
+ field.subfields?.forEach((sf) => removeFromOldCatalogFromSubfield(sf));
213
133
  function removeFromOldCatalogFromSubfield(subfield) {
214
- if (!subfield.value.includes('[from old catalog]')) {
134
+ if (!subfield.value.includes("[from old catalog]")) {
215
135
  return;
216
136
  }
217
- subfield.value = subfield.value.replace(/ *\[from old catalog\]/gui, '');
137
+ subfield.value = subfield.value.replace(/ *\[from old catalog\]/gui, "");
218
138
  }
219
139
  }
220
140
  function removeSubfieldH(field) {
221
- 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)) {
141
+ 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)) {
222
142
  return;
223
143
  }
224
- const filteredFields = field.subfields.filter(sf => sf.code !== 'h');
144
+ const filteredFields = field.subfields.filter((sf) => sf.code !== "h");
225
145
  if (filteredFields.length > 0) {
226
146
  field.subfields = filteredFields;
227
147
  return;
228
148
  }
229
149
  }
230
- function removeOwnershipSubfield5(field) {
150
+ export function removeOwnershipSubfield5(field) {
231
151
  if (!field.subfields || field.subfields.length === 0) {
232
152
  return;
233
153
  }
234
- const remainingSubfields = field.subfields.filter(sf => sf.code !== '5');
154
+ const remainingSubfields = field.subfields.filter((sf) => sf.code !== "5");
235
155
  if (remainingSubfields.length === 0) {
236
- // sanity check/robustness
237
156
  return;
238
157
  }
239
158
  field.subfields = remainingSubfields;
240
159
  }
241
- function fixLeader(record) {
160
+ export function fixLeader(record) {
242
161
  record.leader = `${record.leader.substring(0, 9)}a22${record.leader.substring(12, 18)}i${record.leader.substring(19, 20)}4500`;
243
162
  }
244
163
  function field410To490And810(field, record) {
245
- // might be generic... if so, move to utils...
246
- if (field.tag !== '410') {
164
+ if (field.tag !== "410") {
247
165
  return;
248
166
  }
249
- const field810 = (0, _clone.default)(field);
250
- field.tag = '490';
251
- field.ind1 = '1';
252
- field.ind2 = ' ';
253
- (0, _sortSubfields.sortAdjacentSubfields)(field);
254
- // 490: Fix punctuation elsewhere. (Note that the current support is lagging...)
255
-
256
- field810.tag = '810';
257
- field810.ind2 = ' ';
258
- // 810: Fix punctuation elsewhere. (Note that the current support is lagging...)
167
+ const field810 = clone(field);
168
+ field.tag = "490";
169
+ field.ind1 = "1";
170
+ field.ind2 = " ";
171
+ sortAdjacentSubfields(field);
172
+ field810.tag = "810";
173
+ field810.ind2 = " ";
259
174
  record.insertField(field810);
260
175
  }
261
176
  function field440To490And830(field, record) {
262
- // might be generic... if so, move to utils...
263
- if (field.tag !== '440') {
177
+ if (field.tag !== "440") {
264
178
  return;
265
179
  }
266
- const field830 = (0, _clone.default)(field);
267
- field.tag = '490';
268
- field.ind1 = '1';
269
- field.ind2 = ' ';
270
- // 490: Fix punctuation elsewhere. (Note that the current support is lagging...)
271
- field830.tag = '830';
272
- // 830: Fix punctuation elsewhere. (Note that the current support is lagging...)
180
+ const field830 = clone(field);
181
+ field.tag = "490";
182
+ field.ind1 = "1";
183
+ field.ind2 = " ";
184
+ field830.tag = "830";
273
185
  record.insertField(field830);
274
186
  }
275
187
  function isAlephRecord(record) {
276
- // Records that are already in Aleph are not processed as aggressively as genuinely new ones:
277
- return record.fields.some(field => ['CAT', 'LKR', 'LOW', 'SID'].includes(field.tag));
188
+ return record.fields.some((field) => ["CAT", "LKR", "LOW", "SID"].includes(field.tag));
278
189
  }
279
190
  function field260To264s(field, record) {
280
- // might be generic... if so, move to utils...
281
- // As per my quick reading of usemarcon-cyrillux
282
- if (field.tag !== '260') {
191
+ if (field.tag !== "260") {
283
192
  return;
284
193
  }
285
194
  createCopyright264Field(field);
286
- field.tag = '264';
287
- field.ind1 = ' ';
288
- field.ind2 = '1';
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...)
291
-
195
+ field.tag = "264";
196
+ field.ind1 = " ";
197
+ field.ind2 = "1";
292
198
  function getCopyrightYear(string) {
293
199
  if (string.match(/^(?:\[?[Ccp]|[^0-9]*(?:cop|©|℗))[^0-9]*(?:1[789][0-9][0-9]|20[0-2][0-9])[^0-9]*$/u)) {
294
- return string.replace(/[^0-9]/ug, '');
200
+ return string.replace(/[^0-9]/ug, "");
295
201
  }
296
202
  return false;
297
203
  }
298
- field.subfields?.forEach(sf => field260To264Normalization(sf)); // eslint-disable-line array-callback-return
299
-
204
+ field.subfields?.forEach((sf) => field260To264Normalization(sf));
300
205
  function field260To264Normalization(subfield) {
301
206
  subfield.value = field260To264Normalization2(subfield);
302
207
  }
303
- function createCopyright264Value(field) {
304
- // Extract/split copyright year to a separate field:
305
- const [c] = field.subfields.filter(sf => sf.code === 'c');
208
+ function createCopyright264Value(field2) {
209
+ const [c] = field2.subfields.filter((sf) => sf.code === "c");
306
210
  if (!c) {
307
- return undefined;
211
+ return void 0;
308
212
  }
309
213
  const copyrightYear = getCopyrightYear(c.value);
310
214
  if (!copyrightYear) {
311
- return undefined;
215
+ return void 0;
312
216
  }
313
- const copType = c.value.match(/(?:^\[?p|℗)/u) ? '℗' : '©';
314
- const returnValue = c.value.includes('[') ? `[${copType}${copyrightYear}]` : `${copType}${copyrightYear}`;
315
- // Moidy the original value:
217
+ const copType = c.value.match(/(?:^\[?p|℗)/u) ? "\u2117" : "\xA9";
218
+ const returnValue = c.value.includes("[") ? `[${copType}${copyrightYear}]` : `${copType}${copyrightYear}`;
316
219
  c.value = `[${copyrightYear}]`;
317
220
  return returnValue;
318
221
  }
319
- function createCopyright264Field(field) {
320
- const c = createCopyright264Value(field);
222
+ function createCopyright264Field(field2) {
223
+ const c = createCopyright264Value(field2);
321
224
  if (!c) {
322
- return undefined;
225
+ return void 0;
323
226
  }
324
- const data = {
325
- 'tag': '264',
326
- 'ind1': ' ',
327
- 'ind2': '4',
328
- 'subfields': [{
329
- 'code': 'c',
330
- 'value': c
331
- }]
332
- };
227
+ const data = { "tag": "264", "ind1": " ", "ind2": "4", "subfields": [{ "code": "c", "value": c }] };
333
228
  record.insertField(data);
334
229
  }
335
230
  function field260To264Normalization2(subfield) {
336
- if (subfield.code === 'a') {
337
- return subfield.value.replace(/\b[Ss]\. ?l\./u, 'Kustannuspaikka tuntematon');
231
+ if (subfield.code === "a") {
232
+ return subfield.value.replace(/\b[Ss]\. ?l\./u, "Kustannuspaikka tuntematon");
338
233
  }
339
- if (subfield.code === 'b') {
340
- return subfield.value.replace(/\b[Ss]\. ?n\./u, 'kustantaja tuntematon');
234
+ if (subfield.code === "b") {
235
+ return subfield.value.replace(/\b[Ss]\. ?n\./u, "kustantaja tuntematon");
341
236
  }
342
- if (subfield.code === 'c') {
237
+ if (subfield.code === "c") {
343
238
  const year = getCopyrightYear(subfield.value);
344
239
  if (year) {
345
- const c = subfield.value.match(/(?:^p|℗)/u) ? 'p' : 'c';
346
- if (subfield.value.includes('[')) {
240
+ const c = subfield.value.match(/(?:^p|℗)/u) ? "p" : "c";
241
+ if (subfield.value.includes("[")) {
347
242
  return `${c}[${year}]`;
348
243
  }
349
244
  return `${c}${year}`;
350
245
  }
351
- return subfield.value.replace(/\b[Ss]\. ?a\./u, 'julkaisuaika tuntematon');
246
+ return subfield.value.replace(/\b[Ss]\. ?a\./u, "julkaisuaika tuntematon");
352
247
  }
353
248
  return subfield.value;
354
249
  }
355
250
  }
356
-
357
- /*
358
- function handle505(field) {
359
- if (field.tag !== '505') {
360
- return;
361
- }
362
- // Don't know how/why usemarcon-cyrillux is so sure about ind1...
363
- field.ind1 = '0';
364
- // usemarcon-cyrillux drops irrelevant subfields, so we do the same. However, we have included some control subfields in the kept side:
365
- const keptSubfields = field.subfields.filter(sf => ['a', 'g', 'r', 't', 'u', '6', '8', '9'].includes(sf.code));
366
-
367
- if (keptSubfields.some(sf => ['a', 'g', 'r', 't', 'u'].includes(sf.code))) {
368
- field.subfields = keptSubfields;
369
- return;
370
- }
371
- }
372
- */
373
-
374
251
  function translateFieldToFinnish(field) {
375
- if (!['020', '300'].includes(field.tag)) {
252
+ if (!["020", "300"].includes(field.tag)) {
376
253
  return;
377
254
  }
378
- field.subfields?.forEach(sf => translateSubfieldToFinnish(sf)); // eslint-disable-line array-callback-return
379
-
255
+ field.subfields?.forEach((sf) => translateSubfieldToFinnish(sf));
380
256
  function translateSubfieldToFinnish(subfield) {
381
- if (field.tag === '020' && ['a', 'q', 'z'].includes(subfield.code)) {
257
+ if (field.tag === "020" && ["a", "q", "z"].includes(subfield.code)) {
382
258
  subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value))));
383
259
  return;
384
260
  }
385
- if (field.tag === '300') {
261
+ if (field.tag === "300") {
386
262
  subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value))));
387
263
  return;
388
264
  }
389
265
  }
390
266
  }
391
267
  function expandEnglishAbbreviations(value) {
392
- return value.replace(/\bbk\.\b/gui, 'book').replace(/chiefly col\./ui, 'chiefly color').replace(/col\. ill\./ui, 'color illustrations').replace(/diagrs\./ui, 'diagrams').replace(/\bhbk\.\b/gui, 'hardcover').replace(/\bhbk\b/gui, 'hardcover').
393
- // expand to MTS-compliant form
394
- replace(/\b1 hr\./gui, '1 hour').replace(/\bhr\./gui, 'hours').replace(/\bill\./gui, 'illustrated').
395
- // or illustrations (or Swedish "illustrerad" or...)
396
- replace(/\billus\./gui, 'illustrated').
397
- // or illustrations
398
- replace(/incl\./gui, 'includes').replace(/fold\.? maps/gui, 'folded maps').
399
- // replace(/\bmin\./gu, 'minutes').
400
- // replace(/\bmin\b/gu, 'minutes').
401
- replace(/\bp\.\b/gui, 'pages').replace(/\bp\b/gu, 'pages').replace(/\bpbk\.\b/gui, 'paperback').replace(/\bpbk\b/gui, 'paperback').
402
- // expand to MTS-compliant form
403
- replace(/\bpdf\b/gui, 'PDF').replace(/\bports\./gui, 'portraits').replace('sd., col.', 'sound, color').replace(/ *\((?:chiefly col\.|chiefly color|some col[s.])\)/gui, '').replace(/\b1 hr\./gui, '1 hour');
268
+ return value.replace(/\bbk\.\b/gui, "book").replace(/chiefly col\./ui, "chiefly color").replace(/col\. ill\./ui, "color illustrations").replace(/diagrs\./ui, "diagrams").replace(/\bhbk\.\b/gui, "hardcover").replace(/\bhbk\b/gui, "hardcover").replace(/\b1 hr\./gui, "1 hour").replace(/\bhr\./gui, "hours").replace(/\bill\./gui, "illustrated").replace(/\billus\./gui, "illustrated").replace(/incl\./gui, "includes").replace(/fold\.? maps/gui, "folded maps").replace(/\bp\.\b/gui, "pages").replace(/\bp\b/gu, "pages").replace(/\bpbk\.\b/gui, "paperback").replace(/\bpbk\b/gui, "paperback").replace(/\bpdf\b/gui, "PDF").replace(/\bports\./gui, "portraits").replace("sd., col.", "sound, color").replace(/ *\((?:chiefly col\.|chiefly color|some col[s.])\)/gui, "").replace(/\b1 hr\./gui, "1 hour");
404
269
  }
405
270
  function expandFinnishAbbreviations(value) {
406
- return value.replace(/\bcn\. /gu, 'noin ').
407
- // replace(/\bmin\./gu, 'minuuttia').
408
- // replace(/\bmin\b/gu, 'minuuttia').
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');
410
- // <- removal of brackets above could use a better location
271
+ return value.replace(/\bcn\. /gu, "noin ").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");
411
272
  }
412
273
  function expandSwedishAbbreviations(value) {
413
- return value.replace(/\bca\. /gu, 'circa ').replace(/\bhft\./gui, 'häftad').replace(/\bhft\b/gui, 'häftad');
414
- // replace(/\bmin\./gu, 'minuter').
415
- // replace(/\bmin\b/gu, 'minuter');
274
+ return value.replace(/\bca\. /gu, "circa ").replace(/\bhft\./gui, "h\xE4ftad").replace(/\bhft\b/gui, "h\xE4ftad");
416
275
  }
417
276
  function finnishTranslationsAndMappings(value) {
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ä').
419
- // https://github.com/NatLibFi/USEMARCON-BOOKWHERE-RDA/blob/master/bw_rda_kyril.rul#L365
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').
421
- // Based on usemacron-bookwhere (NB! usemarcon-cyrillux had kuvitus/kuvitettu)
422
- replace(/\binbunden\b/gui, 'kovakantinen').
423
- // swe
424
- replace(/\binsert\b/gui, 'liite').replace(/\binserts\b/gui, 'liitteitä').replace(/\bin various pagings/gui, 'useina numerointijaksoina').replace('leaves of plates', 'kuvalehteä').replace(/\bljudskiva\b/gui, 'äänilevy').replace(/\bljudskivor\b/gui, 'äänilevyä').replace(/\bmap\b/gui, 'kartta').replace(/\bmaps\b/gui, 'karttoja').
425
- // or karttaa?
426
- replace('minutes', 'minuuttia').replace('mjuka pärmar', 'pehmeäkantinen').replace('online resource', 'verkkoaineisto').replace('onlineresurs', 'verkkoaineisto').replace('onumrerade', 'numeroimatonta').replace('pages of plates', 'kuvalehteä').replace(/\bpages\b/gui, 'sivua').replace(/\bpaperback\b/gui, 'pehmeäkantinen').
427
- // MTS alt
428
- replace(/\bSeiten\b/gu, 'sivua').replace(/\bsoftcover\b/gui, 'pehmeäkantinen').
429
- // MTS pref
430
- replace('sound, color', 'äänellinen, värillinen').replace('sound cassettes', 'äänikasettia').replace('sound cassette', 'äänikasetti').replace('sound discs', 'äänilevyä').replace(/sound disc\b/gui, 'äänilevy').replace(/(?:spiral[- ]?bound|spiralrygg)/gui, 'kierreselkä').replace('svartvit', 'mustavalkoinen').replace('unnumbered', 'numeroimatonta').replace('(various pagings)', '(useita numerointijaksoja)').replace(/\bverkkojulkaisu\b/gui, 'verkkoaineisto').replace('videodiscs', 'videolevyä').replace('videodisc', 'videolevy').replace(/\b1 hour\b/gui, '1 tunti');
277
+ return value.replace("analog", "analoginen").replace("approximately", "noin").replace("audio discs", "\xE4\xE4nilevy\xE4").replace("black and white", "mustavalkoinen").replace(/\bbilaga\b/gui, "liite").replace(/\bbilagor\b/gui, "liitett\xE4").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\xE4\xE4osin v\xE4rikuvitettu").replace("chiefly", "p\xE4\xE4osin").replace(/\bcirca\b/gui, "noin").replace(/coil[- ]?bound/gui, "kierreselk\xE4").replace("color illustrations", "v\xE4rikuvitus").replace(/comb[- ]?bound/gui, "kierreselk\xE4").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\xE4rikuvitus").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").replace(/\binbunden\b/gui, "kovakantinen").replace(/\binsert\b/gui, "liite").replace(/\binserts\b/gui, "liitteit\xE4").replace(/\bin various pagings/gui, "useina numerointijaksoina").replace("leaves of plates", "kuvalehte\xE4").replace(/\bljudskiva\b/gui, "\xE4\xE4nilevy").replace(/\bljudskivor\b/gui, "\xE4\xE4nilevy\xE4").replace(/\bmap\b/gui, "kartta").replace(/\bmaps\b/gui, "karttoja").replace("minutes", "minuuttia").replace("mjuka p\xE4rmar", "pehme\xE4kantinen").replace("online resource", "verkkoaineisto").replace("onlineresurs", "verkkoaineisto").replace("onumrerade", "numeroimatonta").replace("pages of plates", "kuvalehte\xE4").replace(/\bpages\b/gui, "sivua").replace(/\bpaperback\b/gui, "pehme\xE4kantinen").replace(/\bSeiten\b/gu, "sivua").replace(/\bsoftcover\b/gui, "pehme\xE4kantinen").replace("sound, color", "\xE4\xE4nellinen, v\xE4rillinen").replace("sound cassettes", "\xE4\xE4nikasettia").replace("sound cassette", "\xE4\xE4nikasetti").replace("sound discs", "\xE4\xE4nilevy\xE4").replace(/sound disc\b/gui, "\xE4\xE4nilevy").replace(/(?:spiral[- ]?bound|spiralrygg)/gui, "kierreselk\xE4").replace("svartvit", "mustavalkoinen").replace("unnumbered", "numeroimatonta").replace("(various pagings)", "(useita numerointijaksoja)").replace(/\bverkkojulkaisu\b/gui, "verkkoaineisto").replace("videodiscs", "videolevy\xE4").replace("videodisc", "videolevy").replace(/\b1 hour\b/gui, "1 tunti");
431
278
  }
432
- //# sourceMappingURL=cyrillux-usemarcon-replacement.js.map
279
+ //# sourceMappingURL=cyrillux-usemarcon-replacement.js.map