@natlibfi/marc-record-validators-melinda 11.6.7-alpha.1 → 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 +1,7 @@
1
- {"version":3,"file":"mergeConstraints.js","names":["_debug","_interopRequireDefault","require","e","__esModule","default","debug","createDebugLogger","debugDev","extend","keyX00","keyX10","keyX11","keyX30","mergeConstraints","key","constraintToValue","tagsConstraints","constraintName","getMergeConstraintsForTag","tag","tagsConstraintsArray","filter","entry","length"],"sources":["../../src/merge-fields/mergeConstraints.js"],"sourcesContent":["import createDebugLogger from 'debug';\nconst debug = createDebugLogger('@natlibfi/melinda-marc-record-merge-reducers:mergeConstraints');\n//const debugData = debug.extend('data');\nconst debugDev = debug.extend('dev');\n\n// Specs: https://workgroups.helsinki.fi/x/K1ohCw (though we occasionally differ from them)...\n\n// \"key\" is an unique key that must match (be absent or exist+be identical) in both.\n// \"paired\" refers to a field that must either exist in both or be absent in both (negative XOR). Typically it's not defined.\n// NB: key+paired with identical values is an attempt to prevent copy for (ET) fields, and to force separate fields on (T) fields.\n// NB! If base has eg. no 264, two+ 264 fields can be copied from the source.\n\n// NB! not all X00 fields have, say, $x subfield. However, we can still share them...\n// $h is non-1XX?, $i is 7XX only, $w is 8XX only...\nconst keyX00 = 'abcjloqrtuwx'; // Shared: $abcdefg...\nconst keyX10 = 'abcdfghlnoprstuwx';\nconst keyX11 = 'acdefghlnpqstuwx';\nconst keyX30 = 'adfghklmnoprstvwxyz';\n\nconst mergeConstraints = [\n {'tag': '010', 'required': 'a', 'key': 'a'},\n {'tag': '013', 'required': 'a', 'key': 'a'}, // We have 2 instances in Melinda...\n {'tag': '015', 'required': 'a', 'key': 'a'},\n {'tag': '016', 'required': 'a', 'key': 'a2'},\n {'tag': '017', 'required': 'a', 'key': 'a'},\n {'tag': '018', 'required': 'a', 'key': 'a'},\n {'tag': '020', 'required': '', 'paired': 'a', 'key': 'a'}, // NB! how to handle $z-only cases? 'required-fallback'='z'?\n {'tag': '022', 'required': '', 'paired': 'a', 'key': 'alz'},\n {'tag': '024', 'required': '', 'paired': 'a', 'key': 'ad'},\n {'tag': '025', 'required': 'a', 'key': 'a'},\n {'tag': '026', 'required': 'a', 'key': 'a'},\n {'tag': '027', 'required': 'a', 'key': 'a'}, // on tuolla pari $z:ää\n {'tag': '028', 'required': 'a', 'key': 'ab'},\n {'tag': '030', 'required': 'a', 'key': 'a'},\n {'tag': '031', 'required': '', 'key': 'abcegmnopr2'}, // mites tämmöisen käytännössä avaimettoman klaarais? TODO: tests\n {'tag': '032', 'required': 'a', 'key': 'ab'},\n {'tag': '033', 'required': 'a', 'key': 'abcp0123'}, // 0,1% are without $a. Ignore them for now.\n {'tag': '034', 'required': 'ab', 'key': 'abcdefghjkmnprstxyz0123'},\n {'tag': '035', 'required': '', 'key': 'az'},\n {'tag': '036', 'required': 'a', 'key': 'a'},\n {'tag': '037', 'required': 'b', 'key': 'ab'},\n {'tag': '039', 'required': 'a'},\n {'tag': '040', 'required': '', 'key': ''},\n {'tag': '041', 'required': '', 'paired': '2', 'key': ''}, // Don't put $2 in 'key'! hasCommonNominator() would get into trouble with it...\n {'tag': '042', 'required': 'a', 'key': ''}, // NB: preprocessor hacks applied\n {'tag': '043', 'required': 'a', 'key': 'abc'},\n {'tag': '044', 'required': '', 'key': 'abc', 'paired': 'abc'},\n {'tag': '045', 'required': '', 'key': 'abc', 'paired': 'abc'}, // (ET) // 045 is problematic either-$a or $b or $c...\n {'tag': '046', 'required': 'a', 'key': 'abcdejklmnop', 'paired': 'abcdejklmnop'},\n {'tag': '047', 'required': 'a', 'key': 'a2'},\n {'tag': '048', 'required': '', 'paired': 'ab', 'key': 'ba'},\n {'tag': '049', 'required': '', 'key': 'abcd'},\n {'tag': '050', 'required': 'a', 'key': 'ab13'},\n {'tag': '051', 'required': 'a', 'key': 'abc'}, // 2021-08-27: only one field in the whole Melinda\n {'tag': '052', 'required': 'a', 'key': 'abd'},\n {'tag': '055', 'required': 'a', 'key': 'ab'},\n {'tag': '060', 'required': 'a', 'key': 'ab'},\n {'tag': '061', 'required': 'a', 'paired': 'b', 'key': 'abc'},\n {'tag': '066', 'required': 'c'},\n {'tag': '070', 'required': 'a', 'key': 'ab'},\n {'tag': '071', 'required': 'a', 'paired': 'abc', 'key': 'abc'}, // N=3\n {'tag': '072', 'required': 'a', 'key': 'ax'},\n {'tag': '074', 'required': '', 'paired': 'a', 'key': 'az'},\n {'tag': '080', 'required': 'a', 'paired': 'bx', 'key': 'abx'},\n {'tag': '082', 'required': 'a', 'paired': 'b', 'key': 'abmq2'},\n {'tag': '083', 'required': 'a', 'paired': 'b', 'key': 'abmqy'},\n {'tag': '084', 'required': 'a', 'paired': 'b2', 'key': 'abq2'},\n {'tag': '085', 'required': '', 'paired': 'abcfrstuvwyz', 'key': 'abcfrstuvwxyz'},\n {'tag': '086', 'required': '', 'paired': 'a', 'key': 'a'},\n {'tag': '088', 'required': '', 'paired': 'a', 'key': 'a'},\n // NB! 100, 110 and 111 may have title parts that are handled elsewhere\n {'tag': '100', 'required': 'a', 'paired': 't', 'key': keyX00},\n {'tag': '110', 'required': 'a', 'paired': 'bt', 'key': keyX10},\n {'tag': '111', 'required': 'a', 'paired': 't', 'key': keyX11},\n // NB! 130 has no name part, key is used for title part\n {'tag': '130', 'required': 'a', 'key': keyX30},\n {'tag': '210', 'required': 'a', 'key': 'ab'},\n {'tag': '222', 'required': 'a', 'key': 'ab'},\n {'tag': '240', 'required': 'a', 'key': 'adfghklmnoprs'},\n {'tag': '242', 'required': 'a', 'key': 'abchnpy'},\n {'tag': '243', 'required': 'a', 'key': 'adfghklmnoprs'},\n {'tag': '245', 'required': 'a', 'key': 'abcghnps', 'paired': 'abnps'},\n {'tag': '246', 'required': 'a', 'key': 'abfnp'},\n {'tag': '247', 'required': 'a', 'key': 'abfnpx'},\n {'tag': '250', 'required': 'a', 'key': 'ab'},\n {'tag': '251', 'required': 'a', 'key': 'a'},\n {'tag': '254', 'required': 'a', 'key': 'a'},\n {'tag': '255', 'required': 'a', 'key': 'abcdefg', 'paired': 'abcdefg'},\n {'tag': '256', 'required': 'a', 'key': 'a'},\n {'tag': '257', 'required': 'a', 'key': 'a'},\n {'tag': '258', 'required': 'a', 'key': 'a'}, // Melinda: N=1\n //{'tag': '260', 'required': '', 'paired': 'abcefg', 'key': 'abcefg'},\n {'tag': '260', 'required': '', 'key': 'abcefg'},\n {'tag': '263', 'required': 'a', 'key': 'a'},\n //{'tag': '264', 'required': '', 'paired': 'abc', 'key': 'abc'}, // NB \"S.l.\" normalizations?\" not implemented\n {'tag': '264', 'required': '', 'key': 'abc'}, // NB \"S.l.\" normalizations?\" not implemented\n // SKIP TAG 270 ON PURPOSE! Melinda's N=43.\n {'tag': '300', 'required': 'a', 'key': 'abcefg'},\n {'tag': '306', 'required': 'a', 'key': 'a'},\n // SKIP TAG 307 ON PURPOSE! N=0\n {'tag': '310', 'required': 'a', 'key': 'ab'},\n {'tag': '321', 'required': 'a', 'key': 'ab'},\n {'tag': '335', 'required': 'a', 'key': 'ab'}, // Melinda N=1 (a test field). M might increase?\n {'tag': '336', 'required': 'b2', 'key': 'ab2'}, // MET-88: don't merge different $a subfields\n {'tag': '337', 'required': 'b2', 'key': 'ab2'}, // MET-88: don't merge different $a subfields\n {'tag': '338', 'required': 'b2', 'key': 'ab2'}, // / MET-88: don't merge different $a subfields\n {'tag': '340', 'required': '', 'paired': 'abcdefghijkmnop', 'key': 'abcdefghijkmnop'},\n {'tag': '341', 'required': '', 'paired': 'abcde', 'key': 'abcde'}, // NEW! Starting to appear!\n {'tag': '342', 'required': '', 'paired': 'abcdefghijklmnopqrstuvw', 'key': 'abcdefghijklmnopqrstuvw'}, // SKIP 342. NOT SEEN!\n {'tag': '343', 'required': '', 'paired': 'abcdefghi', 'key': 'abcdefghi'}, // SKIP 343.\n {'tag': '344', 'required': '', 'paired': 'abcdefgh', 'key': 'abcdefgh'},\n {'tag': '345', 'required': '', 'paired': 'abcd', 'key': 'abcd'},\n {'tag': '346', 'required': '', 'paired': 'ab', 'key': 'ab'},\n {'tag': '347', 'required': '', 'paired': 'abcdef', 'key': 'abcdef'},\n {'tag': '348', 'required': '', 'paired': 'ab', 'key': 'ab'},\n {'tag': '348', 'required': '', 'paired': 'abc', 'key': 'abc'},\n {'tag': '351', 'required': '', 'paired': 'abc', 'key': 'abc'},\n {'tag': '352', 'required': '', 'paired': 'abcdefgiq', 'key': 'abcdefgiq'},\n {'tag': '355', 'required': '', 'paired': 'abcdefghj', 'key': 'abcdefghj'},\n {'tag': '357', 'required': 'a', 'key': 'abcg'},\n {'tag': '362', 'required': 'a', 'key': 'az'},\n {'tag': '363', 'required': '', 'paired': 'abcdefghijklmuv', 'key': 'abcdefghijklmuv'},\n {'tag': '365', 'required': 'b', 'paired': 'abcdefghijkm', 'key': 'abcdefghijkm'}, // N=0\n {'tag': '366', 'required': '', 'paired': 'abcdefgjkm', 'key': 'abcdefgjkm'},\n {'tag': '370', 'required': '', 'paired': 'cfgistuv', 'key': 'cfgistuv'},\n {'tag': '377', 'required': '', 'paired': 'al', 'key': 'al'},\n {'tag': '380', 'required': 'a', 'key': 'a'},\n {'tag': '381', 'required': 'auv', 'key': 'auv'},\n {'tag': '382', 'required': ''},\n {'tag': '383', 'required': 'abcde', 'key': 'abcde'},\n {'tag': '384', 'required': 'a', 'key': 'a'},\n {'tag': '385', 'required': 'a', 'paired': 'abmn', 'key': 'abmn'},\n {'tag': '386', 'required': 'a', 'paired': 'abmn', 'key': 'abmn'},\n {'tag': '388', 'required': 'a', 'key': 'a'},\n {'tag': '490', 'required': 'a', 'key': 'axvl'},\n {'tag': '500', 'required': 'a', 'key': 'a'},\n {'tag': '501', 'required': 'a', 'key': 'a'},\n {'tag': '502', 'required': 'a', 'key': 'abcdgo'},\n {'tag': '504', 'required': 'a', 'paired': 'ab', 'key': 'ab'},\n {'tag': '505', 'required': '', 'paired': 'agrtu', 'key': 'agrtu'},\n {'tag': '506', 'required': 'a', 'paired': '', 'key': 'abcdefgqu'},\n {'tag': '507', 'required': 'a', 'paired': 'ab', 'key': 'ab'},\n {'tag': '508', 'required': 'a', 'key': 'a'},\n {'tag': '509', 'required': 'a', 'key': 'acd'},\n {'tag': '510', 'required': 'a', 'key': 'abcx'},\n {'tag': '511', 'required': 'a', 'key': 'a'},\n {'tag': '513', 'required': '', 'paired': 'ab', 'key': 'ab'},\n {'tag': '514', 'required': '', 'paired': 'abcdefghijkmuz', 'key': 'abcdefghijkmuz'},\n {'tag': '515', 'required': 'a', 'key': 'a'},\n {'tag': '518', 'required': '', 'paired': 'adop', 'key': 'adop'},\n {'tag': '520', 'required': 'a', 'paired': 'abc', 'key': 'abc'},\n {'tag': '521', 'required': 'a', 'paired': 'ab', 'key': 'ab'},\n {'tag': '522', 'required': 'a', 'key': 'a'},\n {'tag': '524', 'required': 'a', 'key': 'a'},\n {'tag': '525', 'required': 'a', 'key': 'a'},\n {'tag': '526', 'required': 'a', 'paired': 'abcdi', 'key': 'abcdi'},\n {'tag': '530', 'required': 'a', 'paired': 'abcd', 'key': 'abcd'},\n {'tag': '532', 'required': 'a', 'key': 'a'},\n {'tag': '533', 'required': 'a', 'paired': 'abcdefmn7', 'key': 'abcdefmn7'},\n {'tag': '534', 'required': '', 'paired': 'abcempt', 'key': 'abcempt'},\n {'tag': '535', 'required': '', 'paired': 'abcdg', 'key': 'abcdg'},\n {'tag': '536', 'required': '', 'paired': 'abcdefgh', 'key': 'abcdefgh'},\n {'tag': '538', 'required': 'a', 'paired': 'aiu', 'key': 'aiu'},\n {'tag': '540', 'required': '', 'paired': 'abcdfgqu', 'key': 'abcdfgqu'},\n {'tag': '541', 'required': '', 'paired': 'abcdefhno', 'key': 'abcdefhno'},\n {'tag': '542', 'required': '', 'paired': 'abcdfghijklmopqrsu', 'key': 'abcdfghijklmopqrsu'},\n {'tag': '544', 'required': '', 'paired': 'abcden', 'key': 'abcden'},\n {'tag': '545', 'required': '', 'paired': 'abu', 'key': 'abu'},\n {'tag': '546', 'required': '', 'paired': 'ab', 'key': 'ab'},\n {'tag': '547', 'required': 'a', 'key': 'a'},\n {'tag': '550', 'required': 'a', 'key': 'a'},\n {'tag': '552', 'required': '', 'paired': 'abcdefghijklmnopuz', 'key': 'abcdefghijklmnopuz'},\n {'tag': '555', 'required': 'a', 'paired': 'abcdu', 'key': 'abcdu'},\n {'tag': '556', 'required': 'a', 'key': 'az'},\n {'tag': '561', 'required': 'a', 'key': 'au'},\n {'tag': '562', 'required': '', 'paired': 'abcde', 'key': 'abcde'},\n {'tag': '563', 'required': 'a', 'key': 'au'},\n {'tag': '565', 'required': '', 'paired': 'abc', 'key': 'abc'},\n {'tag': '567', 'required': '', 'paired': 'ab', 'key': 'ab'},\n {'tag': '580', 'required': 'a', 'key': 'a'},\n {'tag': '581', 'required': 'a', 'key': 'a'},\n {'tag': '583', 'required': '', 'paired': 'abcdefhijklnou', 'key': 'abcdefhijklnou'},\n {'tag': '584', 'required': '', 'paired': 'ab', 'key': 'ab'},\n {'tag': '585', 'required': 'a', 'key': 'a'},\n {'tag': '586', 'required': 'a', 'key': 'a'},\n {'tag': '588', 'required': 'a', 'key': 'a'},\n // NB! Currently we never merge 59X fields (see mergableTags.js). Doublish removals such as MELKEHITYS-3147 are handled by postprocessor.\n {'tag': '590', 'required': ''},\n {'tag': '591', 'required': ''},\n {'tag': '592', 'required': ''},\n {'tag': '593', 'required': ''},\n {'tag': '594', 'required': ''},\n {'tag': '595', 'required': ''},\n {'tag': '596', 'required': ''},\n {'tag': '597', 'required': ''},\n {'tag': '598', 'required': ''},\n {'tag': '599', 'required': ''},\n {'tag': '600', 'required': 'a', 'paired': 'tvxyz', 'key': keyX00},\n {'tag': '610', 'required': 'a', 'paired': 'btvxyz', 'key': keyX10},\n {'tag': '611', 'required': 'a', 'paired': 'tvxyz', 'key': keyX11},\n {'tag': '630', 'required': 'a', 'paired': 'atvxyz', 'key': keyX30},\n // NB! 700, 710 and 711 may have title parts that are handled elsewhere\n {'tag': '647', 'required': 'a', 'paired': 'avxyz', 'key': 'acdgvxyz02'},\n {'tag': '648', 'required': 'a', 'paired': 'avxyz', 'key': 'avxyz02'},\n {'tag': '650', 'required': 'a', 'paired': 'abcdegvxyz', 'key': 'abcdegvxyz20'},\n {'tag': '651', 'required': 'a', 'paired': 'aegvxyz', 'key': 'aegvxyz20'},\n {'tag': '653', 'required': 'a', 'paired': 'a', 'key': 'a'}, // this is interesting as a can be repeated\n {'tag': '654', 'required': '', 'paired': 'abcevxyz'},\n {'tag': '655', 'required': 'a', 'paired': 'abcvxyz', 'key': 'avxyz20'},\n {'tag': '656', 'required': 'a', 'paired': 'akvxyz'}, // N=0\n {'tag': '657', 'required': 'a', 'paired': 'avxyz'}, // N=0\n {'tag': '658', 'required': 'a', 'paired': 'abcd'}, // N=0\n {'tag': '662', 'required': '', 'paired': 'abcdefgh'}, // N=0\n {'tag': '688', 'required': 'a'}, // N=0\n {'tag': '700', 'required': 'a', 'paired': 't', 'key': keyX00}, // h/i/m/o/r/s/x are missing from 100\n {'tag': '710', 'required': 'a', 'paired': 'bt', 'key': keyX10}, // h/j/m/o/r/s/x are missing from 110\n {'tag': '711', 'required': 'a', 'paired': 'cdeflns', 'key': keyX11}, // h/i/s/x are missing from 711\n {'tag': '720', 'required': 'a', 'key': 'a'},\n // NB! 730 has no name part, key is used for title part\n {'tag': '730', 'required': 'a', 'key': keyX30}, // NB: 130->730 magic subfields might not agree...\n {'tag': '740', 'required': 'a', 'key': 'ahnp'},\n {'tag': '751', 'required': 'a', 'key': 'a'}, // N=11, kaikissa pelkkä $a\n {'tag': '752', 'required': '', 'key': 'abcdefgh'}, // N=12234\n {'tag': '753', 'required': '', 'key': 'abc'},\n {'tag': '754', 'required': '', 'key': 'acdxz'}, // N=3\n {'tag': '758', 'required': 'a', 'key': 'ai'}, // N=1\n\n {'tag': '760', 'required': 'tw', key: 'twxy'},\n {'tag': '762', 'required': 't', key: 'abcdhmstxy'},\n {'tag': '765', 'required': 't', key: 'abcdhmrstuwxyz'},\n {'tag': '767', 'required': 't', key: 'abcdhmrstuwxyz'},\n {'tag': '770', 'required': 't', 'paired': 'ruxyz', key: 'abcdhmrstuwxyz'},\n {'tag': '772', 'required': 't', key: 'abcdhmrstuwxyz'},\n {'tag': '773', 'required': 'w', key: 'wgq'}, // Kirjavälitys should not have any component parts. However, this need to be re-thought...\n // Currently we (appently) drop fields that don't contain 773$w...\n {'tag': '774', 'required': '', 'paired': 'nruxyz', 'key': 'npqrstrxyz'},\n {'tag': '775', 'required': '', 'paired': 'ruxyz', 'key': 'abcdefhmstuxyz'},\n {'tag': '776', 'required': '', 'paired': 'ruxyz', 'key': 'abcdhmsuwxyz'},\n {'tag': '777', 'required': '', 'paired': 'ruxyz', 'key': 'abcdhmstuxyz'},\n {'tag': '780', 'required': '', 'paired': 'ruxyz', 'key': 'abcdhmstuxyz'},\n {'tag': '785', 'required': '', 'paired': 'uxyz', 'key': 'abcdhmstuxyz'},\n {'tag': '786', 'required': '', 'paired': 'abcrstuxyz', 'key': 'abcdhijmprstuxyz4'},\n {'tag': '787', 'required': '', 'paired': 'abcdhmstuxyz4'},\n {'tag': '788', 'required': '', 'paired': 'stx', 'key': 'abdestx'},\n {'tag': '800', 'required': 'a', 'paired': 't', 'key': keyX00},\n {'tag': '810', 'required': 'a', 'paired': 'bt', 'key': keyX10},\n {'tag': '811', 'required': 'a', 'paired': 't', 'key': keyX11},\n {'tag': '830', 'required': 'a', 'key': keyX30},\n {'tag': '840', 'required': 'a'},\n {'tag': '841', 'required': 'a'},\n {'tag': '842', 'required': 'a'},\n {'tag': '843', 'required': 'a'},\n {'tag': '844', 'required': 'a'},\n {'tag': '845', 'required': 'a'},\n {'tag': '850', 'required': 'a', 'key': 'a'},\n {'tag': '852', 'required': 'a'}, // HMM... we might want to reconsider this...\n {'tag': '853', 'required': 'a'},\n {'tag': '854', 'required': 'a'},\n {'tag': '855', 'required': 'a'},\n {'tag': '856', 'required': 'u', 'paired': 'u', 'key': 'opuw23'}, // 856 is built around $u...\n {'tag': '863', 'required': 'a'},\n {'tag': '864', 'required': 'a'},\n {'tag': '865', 'required': 'a'},\n {'tag': '866', 'required': 'a'},\n {'tag': '867', 'required': 'a'},\n {'tag': '868', 'required': 'a'},\n {'tag': '876', 'required': 'a'},\n {'tag': '877', 'required': 'a'},\n {'tag': '878', 'required': 'a'},\n {'tag': '880', 'required': '', 'paired': 'a', 'key': 'abcdefghijklmnopqrstuvwxyz'},\n {'tag': '881', 'required': ''},\n {'tag': '882', 'required': ''},\n {'tag': '883', 'required': ''},\n {'tag': '884', 'required': '', 'paired': 'agkq'},\n {'tag': '885', 'required': ''},\n {'tag': '886', 'required': ''},\n {'tag': '887', 'required': ''},\n {'tag': '900', 'required': ''},\n {'tag': '901', 'required': ''},\n {'tag': '910', 'required': ''},\n {'tag': '935', 'required': 'a', 'key': 'az'}, // Fono information at least\n {'tag': '940', 'required': ''},\n {'tag': '946', 'required': 'a', 'key': 'abfnp'}, // Copied from 246. However, final version might contain some elements from field 245 as well\n {'tag': '960', 'required': ''},\n {'tag': '973', 'required': 'w', 'key': 'w'}, // Viola multi-hosts\n {'tag': '995', 'required': ''},\n {'tag': 'CAT', 'required': ''},\n {'tag': 'LOW', 'required': ''},\n {'tag': 'SID', 'required': ''}\n];\n\nfunction constraintToValue(tagsConstraints, constraintName) {\n if (constraintName in tagsConstraints) {\n return tagsConstraints[constraintName];\n }\n return null; // NB! \"\" might mean \"apply to everything\" (eg. 040.key) while null means that it is not applied.\n}\n\nexport function getMergeConstraintsForTag(tag, constraintName) {\n const tagsConstraintsArray = mergeConstraints.filter(entry => tag === entry.tag);\n if (tagsConstraintsArray.length === 0) {\n debugDev(`WARNING\\tNo key found for ${tag}. Returning NULL!`);\n return null;\n }\n // NB! should we support multiple contains for a field? Eg. 505$a vs 505($tg)+\n if (tagsConstraintsArray.length > 1) {\n debugDev(`WARNING\\tMultiple values for '${constraintName}' (N=${tagsConstraintsArray.length}) found in ${tag}. Using first values.`);\n }\n return constraintToValue(tagsConstraintsArray[0], constraintName);\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/merge-fields/mergeConstraints.js"],
4
+ "sourcesContent": ["import createDebugLogger from 'debug';\nconst debug = createDebugLogger('@natlibfi/melinda-marc-record-merge-reducers:mergeConstraints');\n//const debugData = debug.extend('data');\nconst debugDev = debug.extend('dev');\n\n// Specs: https://workgroups.helsinki.fi/x/K1ohCw (though we occasionally differ from them)...\n\n// \"key\" is an unique key that must match (be absent or exist+be identical) in both.\n// \"paired\" refers to a field that must either exist in both or be absent in both (negative XOR). Typically it's not defined.\n// NB: key+paired with identical values is an attempt to prevent copy for (ET) fields, and to force separate fields on (T) fields.\n// NB! If base has eg. no 264, two+ 264 fields can be copied from the source.\n\n// NB! not all X00 fields have, say, $x subfield. However, we can still share them...\n// $h is non-1XX?, $i is 7XX only, $w is 8XX only...\nconst keyX00 = 'abcjloqrtuwx'; // Shared: $abcdefg...\nconst keyX10 = 'abcdfghlnoprstuwx';\nconst keyX11 = 'acdefghlnpqstuwx';\nconst keyX30 = 'adfghklmnoprstvwxyz';\n\nconst mergeConstraints = [\n {'tag': '010', 'required': 'a', 'key': 'a'},\n {'tag': '013', 'required': 'a', 'key': 'a'}, // We have 2 instances in Melinda...\n {'tag': '015', 'required': 'a', 'key': 'a'},\n {'tag': '016', 'required': 'a', 'key': 'a2'},\n {'tag': '017', 'required': 'a', 'key': 'a'},\n {'tag': '018', 'required': 'a', 'key': 'a'},\n {'tag': '020', 'required': '', 'paired': 'a', 'key': 'a'}, // NB! how to handle $z-only cases? 'required-fallback'='z'?\n {'tag': '022', 'required': '', 'paired': 'a', 'key': 'alz'},\n {'tag': '024', 'required': '', 'paired': 'a', 'key': 'ad'},\n {'tag': '025', 'required': 'a', 'key': 'a'},\n {'tag': '026', 'required': 'a', 'key': 'a'},\n {'tag': '027', 'required': 'a', 'key': 'a'}, // on tuolla pari $z:\u00E4\u00E4\n {'tag': '028', 'required': 'a', 'key': 'ab'},\n {'tag': '030', 'required': 'a', 'key': 'a'},\n {'tag': '031', 'required': '', 'key': 'abcegmnopr2'}, // mites t\u00E4mm\u00F6isen k\u00E4yt\u00E4nn\u00F6ss\u00E4 avaimettoman klaarais? TODO: tests\n {'tag': '032', 'required': 'a', 'key': 'ab'},\n {'tag': '033', 'required': 'a', 'key': 'abcp0123'}, // 0,1% are without $a. Ignore them for now.\n {'tag': '034', 'required': 'ab', 'key': 'abcdefghjkmnprstxyz0123'},\n {'tag': '035', 'required': '', 'key': 'az'},\n {'tag': '036', 'required': 'a', 'key': 'a'},\n {'tag': '037', 'required': 'b', 'key': 'ab'},\n {'tag': '039', 'required': 'a'},\n {'tag': '040', 'required': '', 'key': ''},\n {'tag': '041', 'required': '', 'paired': '2', 'key': ''}, // Don't put $2 in 'key'! hasCommonNominator() would get into trouble with it...\n {'tag': '042', 'required': 'a', 'key': ''}, // NB: preprocessor hacks applied\n {'tag': '043', 'required': 'a', 'key': 'abc'},\n {'tag': '044', 'required': '', 'key': 'abc', 'paired': 'abc'},\n {'tag': '045', 'required': '', 'key': 'abc', 'paired': 'abc'}, // (ET) // 045 is problematic either-$a or $b or $c...\n {'tag': '046', 'required': 'a', 'key': 'abcdejklmnop', 'paired': 'abcdejklmnop'},\n {'tag': '047', 'required': 'a', 'key': 'a2'},\n {'tag': '048', 'required': '', 'paired': 'ab', 'key': 'ba'},\n {'tag': '049', 'required': '', 'key': 'abcd'},\n {'tag': '050', 'required': 'a', 'key': 'ab13'},\n {'tag': '051', 'required': 'a', 'key': 'abc'}, // 2021-08-27: only one field in the whole Melinda\n {'tag': '052', 'required': 'a', 'key': 'abd'},\n {'tag': '055', 'required': 'a', 'key': 'ab'},\n {'tag': '060', 'required': 'a', 'key': 'ab'},\n {'tag': '061', 'required': 'a', 'paired': 'b', 'key': 'abc'},\n {'tag': '066', 'required': 'c'},\n {'tag': '070', 'required': 'a', 'key': 'ab'},\n {'tag': '071', 'required': 'a', 'paired': 'abc', 'key': 'abc'}, // N=3\n {'tag': '072', 'required': 'a', 'key': 'ax'},\n {'tag': '074', 'required': '', 'paired': 'a', 'key': 'az'},\n {'tag': '080', 'required': 'a', 'paired': 'bx', 'key': 'abx'},\n {'tag': '082', 'required': 'a', 'paired': 'b', 'key': 'abmq2'},\n {'tag': '083', 'required': 'a', 'paired': 'b', 'key': 'abmqy'},\n {'tag': '084', 'required': 'a', 'paired': 'b2', 'key': 'abq2'},\n {'tag': '085', 'required': '', 'paired': 'abcfrstuvwyz', 'key': 'abcfrstuvwxyz'},\n {'tag': '086', 'required': '', 'paired': 'a', 'key': 'a'},\n {'tag': '088', 'required': '', 'paired': 'a', 'key': 'a'},\n // NB! 100, 110 and 111 may have title parts that are handled elsewhere\n {'tag': '100', 'required': 'a', 'paired': 't', 'key': keyX00},\n {'tag': '110', 'required': 'a', 'paired': 'bt', 'key': keyX10},\n {'tag': '111', 'required': 'a', 'paired': 't', 'key': keyX11},\n // NB! 130 has no name part, key is used for title part\n {'tag': '130', 'required': 'a', 'key': keyX30},\n {'tag': '210', 'required': 'a', 'key': 'ab'},\n {'tag': '222', 'required': 'a', 'key': 'ab'},\n {'tag': '240', 'required': 'a', 'key': 'adfghklmnoprs'},\n {'tag': '242', 'required': 'a', 'key': 'abchnpy'},\n {'tag': '243', 'required': 'a', 'key': 'adfghklmnoprs'},\n {'tag': '245', 'required': 'a', 'key': 'abcghnps', 'paired': 'abnps'},\n {'tag': '246', 'required': 'a', 'key': 'abfnp'},\n {'tag': '247', 'required': 'a', 'key': 'abfnpx'},\n {'tag': '250', 'required': 'a', 'key': 'ab'},\n {'tag': '251', 'required': 'a', 'key': 'a'},\n {'tag': '254', 'required': 'a', 'key': 'a'},\n {'tag': '255', 'required': 'a', 'key': 'abcdefg', 'paired': 'abcdefg'},\n {'tag': '256', 'required': 'a', 'key': 'a'},\n {'tag': '257', 'required': 'a', 'key': 'a'},\n {'tag': '258', 'required': 'a', 'key': 'a'}, // Melinda: N=1\n //{'tag': '260', 'required': '', 'paired': 'abcefg', 'key': 'abcefg'},\n {'tag': '260', 'required': '', 'key': 'abcefg'},\n {'tag': '263', 'required': 'a', 'key': 'a'},\n //{'tag': '264', 'required': '', 'paired': 'abc', 'key': 'abc'}, // NB \"S.l.\" normalizations?\" not implemented\n {'tag': '264', 'required': '', 'key': 'abc'}, // NB \"S.l.\" normalizations?\" not implemented\n // SKIP TAG 270 ON PURPOSE! Melinda's N=43.\n {'tag': '300', 'required': 'a', 'key': 'abcefg'},\n {'tag': '306', 'required': 'a', 'key': 'a'},\n // SKIP TAG 307 ON PURPOSE! N=0\n {'tag': '310', 'required': 'a', 'key': 'ab'},\n {'tag': '321', 'required': 'a', 'key': 'ab'},\n {'tag': '335', 'required': 'a', 'key': 'ab'}, // Melinda N=1 (a test field). M might increase?\n {'tag': '336', 'required': 'b2', 'key': 'ab2'}, // MET-88: don't merge different $a subfields\n {'tag': '337', 'required': 'b2', 'key': 'ab2'}, // MET-88: don't merge different $a subfields\n {'tag': '338', 'required': 'b2', 'key': 'ab2'}, // / MET-88: don't merge different $a subfields\n {'tag': '340', 'required': '', 'paired': 'abcdefghijkmnop', 'key': 'abcdefghijkmnop'},\n {'tag': '341', 'required': '', 'paired': 'abcde', 'key': 'abcde'}, // NEW! Starting to appear!\n {'tag': '342', 'required': '', 'paired': 'abcdefghijklmnopqrstuvw', 'key': 'abcdefghijklmnopqrstuvw'}, // SKIP 342. NOT SEEN!\n {'tag': '343', 'required': '', 'paired': 'abcdefghi', 'key': 'abcdefghi'}, // SKIP 343.\n {'tag': '344', 'required': '', 'paired': 'abcdefgh', 'key': 'abcdefgh'},\n {'tag': '345', 'required': '', 'paired': 'abcd', 'key': 'abcd'},\n {'tag': '346', 'required': '', 'paired': 'ab', 'key': 'ab'},\n {'tag': '347', 'required': '', 'paired': 'abcdef', 'key': 'abcdef'},\n {'tag': '348', 'required': '', 'paired': 'ab', 'key': 'ab'},\n {'tag': '348', 'required': '', 'paired': 'abc', 'key': 'abc'},\n {'tag': '351', 'required': '', 'paired': 'abc', 'key': 'abc'},\n {'tag': '352', 'required': '', 'paired': 'abcdefgiq', 'key': 'abcdefgiq'},\n {'tag': '355', 'required': '', 'paired': 'abcdefghj', 'key': 'abcdefghj'},\n {'tag': '357', 'required': 'a', 'key': 'abcg'},\n {'tag': '362', 'required': 'a', 'key': 'az'},\n {'tag': '363', 'required': '', 'paired': 'abcdefghijklmuv', 'key': 'abcdefghijklmuv'},\n {'tag': '365', 'required': 'b', 'paired': 'abcdefghijkm', 'key': 'abcdefghijkm'}, // N=0\n {'tag': '366', 'required': '', 'paired': 'abcdefgjkm', 'key': 'abcdefgjkm'},\n {'tag': '370', 'required': '', 'paired': 'cfgistuv', 'key': 'cfgistuv'},\n {'tag': '377', 'required': '', 'paired': 'al', 'key': 'al'},\n {'tag': '380', 'required': 'a', 'key': 'a'},\n {'tag': '381', 'required': 'auv', 'key': 'auv'},\n {'tag': '382', 'required': ''},\n {'tag': '383', 'required': 'abcde', 'key': 'abcde'},\n {'tag': '384', 'required': 'a', 'key': 'a'},\n {'tag': '385', 'required': 'a', 'paired': 'abmn', 'key': 'abmn'},\n {'tag': '386', 'required': 'a', 'paired': 'abmn', 'key': 'abmn'},\n {'tag': '388', 'required': 'a', 'key': 'a'},\n {'tag': '490', 'required': 'a', 'key': 'axvl'},\n {'tag': '500', 'required': 'a', 'key': 'a'},\n {'tag': '501', 'required': 'a', 'key': 'a'},\n {'tag': '502', 'required': 'a', 'key': 'abcdgo'},\n {'tag': '504', 'required': 'a', 'paired': 'ab', 'key': 'ab'},\n {'tag': '505', 'required': '', 'paired': 'agrtu', 'key': 'agrtu'},\n {'tag': '506', 'required': 'a', 'paired': '', 'key': 'abcdefgqu'},\n {'tag': '507', 'required': 'a', 'paired': 'ab', 'key': 'ab'},\n {'tag': '508', 'required': 'a', 'key': 'a'},\n {'tag': '509', 'required': 'a', 'key': 'acd'},\n {'tag': '510', 'required': 'a', 'key': 'abcx'},\n {'tag': '511', 'required': 'a', 'key': 'a'},\n {'tag': '513', 'required': '', 'paired': 'ab', 'key': 'ab'},\n {'tag': '514', 'required': '', 'paired': 'abcdefghijkmuz', 'key': 'abcdefghijkmuz'},\n {'tag': '515', 'required': 'a', 'key': 'a'},\n {'tag': '518', 'required': '', 'paired': 'adop', 'key': 'adop'},\n {'tag': '520', 'required': 'a', 'paired': 'abc', 'key': 'abc'},\n {'tag': '521', 'required': 'a', 'paired': 'ab', 'key': 'ab'},\n {'tag': '522', 'required': 'a', 'key': 'a'},\n {'tag': '524', 'required': 'a', 'key': 'a'},\n {'tag': '525', 'required': 'a', 'key': 'a'},\n {'tag': '526', 'required': 'a', 'paired': 'abcdi', 'key': 'abcdi'},\n {'tag': '530', 'required': 'a', 'paired': 'abcd', 'key': 'abcd'},\n {'tag': '532', 'required': 'a', 'key': 'a'},\n {'tag': '533', 'required': 'a', 'paired': 'abcdefmn7', 'key': 'abcdefmn7'},\n {'tag': '534', 'required': '', 'paired': 'abcempt', 'key': 'abcempt'},\n {'tag': '535', 'required': '', 'paired': 'abcdg', 'key': 'abcdg'},\n {'tag': '536', 'required': '', 'paired': 'abcdefgh', 'key': 'abcdefgh'},\n {'tag': '538', 'required': 'a', 'paired': 'aiu', 'key': 'aiu'},\n {'tag': '540', 'required': '', 'paired': 'abcdfgqu', 'key': 'abcdfgqu'},\n {'tag': '541', 'required': '', 'paired': 'abcdefhno', 'key': 'abcdefhno'},\n {'tag': '542', 'required': '', 'paired': 'abcdfghijklmopqrsu', 'key': 'abcdfghijklmopqrsu'},\n {'tag': '544', 'required': '', 'paired': 'abcden', 'key': 'abcden'},\n {'tag': '545', 'required': '', 'paired': 'abu', 'key': 'abu'},\n {'tag': '546', 'required': '', 'paired': 'ab', 'key': 'ab'},\n {'tag': '547', 'required': 'a', 'key': 'a'},\n {'tag': '550', 'required': 'a', 'key': 'a'},\n {'tag': '552', 'required': '', 'paired': 'abcdefghijklmnopuz', 'key': 'abcdefghijklmnopuz'},\n {'tag': '555', 'required': 'a', 'paired': 'abcdu', 'key': 'abcdu'},\n {'tag': '556', 'required': 'a', 'key': 'az'},\n {'tag': '561', 'required': 'a', 'key': 'au'},\n {'tag': '562', 'required': '', 'paired': 'abcde', 'key': 'abcde'},\n {'tag': '563', 'required': 'a', 'key': 'au'},\n {'tag': '565', 'required': '', 'paired': 'abc', 'key': 'abc'},\n {'tag': '567', 'required': '', 'paired': 'ab', 'key': 'ab'},\n {'tag': '580', 'required': 'a', 'key': 'a'},\n {'tag': '581', 'required': 'a', 'key': 'a'},\n {'tag': '583', 'required': '', 'paired': 'abcdefhijklnou', 'key': 'abcdefhijklnou'},\n {'tag': '584', 'required': '', 'paired': 'ab', 'key': 'ab'},\n {'tag': '585', 'required': 'a', 'key': 'a'},\n {'tag': '586', 'required': 'a', 'key': 'a'},\n {'tag': '588', 'required': 'a', 'key': 'a'},\n // NB! Currently we never merge 59X fields (see mergableTags.js). Doublish removals such as MELKEHITYS-3147 are handled by postprocessor.\n {'tag': '590', 'required': ''},\n {'tag': '591', 'required': ''},\n {'tag': '592', 'required': ''},\n {'tag': '593', 'required': ''},\n {'tag': '594', 'required': ''},\n {'tag': '595', 'required': ''},\n {'tag': '596', 'required': ''},\n {'tag': '597', 'required': ''},\n {'tag': '598', 'required': ''},\n {'tag': '599', 'required': ''},\n {'tag': '600', 'required': 'a', 'paired': 'tvxyz', 'key': keyX00},\n {'tag': '610', 'required': 'a', 'paired': 'btvxyz', 'key': keyX10},\n {'tag': '611', 'required': 'a', 'paired': 'tvxyz', 'key': keyX11},\n {'tag': '630', 'required': 'a', 'paired': 'atvxyz', 'key': keyX30},\n // NB! 700, 710 and 711 may have title parts that are handled elsewhere\n {'tag': '647', 'required': 'a', 'paired': 'avxyz', 'key': 'acdgvxyz02'},\n {'tag': '648', 'required': 'a', 'paired': 'avxyz', 'key': 'avxyz02'},\n {'tag': '650', 'required': 'a', 'paired': 'abcdegvxyz', 'key': 'abcdegvxyz20'},\n {'tag': '651', 'required': 'a', 'paired': 'aegvxyz', 'key': 'aegvxyz20'},\n {'tag': '653', 'required': 'a', 'paired': 'a', 'key': 'a'}, // this is interesting as a can be repeated\n {'tag': '654', 'required': '', 'paired': 'abcevxyz'},\n {'tag': '655', 'required': 'a', 'paired': 'abcvxyz', 'key': 'avxyz20'},\n {'tag': '656', 'required': 'a', 'paired': 'akvxyz'}, // N=0\n {'tag': '657', 'required': 'a', 'paired': 'avxyz'}, // N=0\n {'tag': '658', 'required': 'a', 'paired': 'abcd'}, // N=0\n {'tag': '662', 'required': '', 'paired': 'abcdefgh'}, // N=0\n {'tag': '688', 'required': 'a'}, // N=0\n {'tag': '700', 'required': 'a', 'paired': 't', 'key': keyX00}, // h/i/m/o/r/s/x are missing from 100\n {'tag': '710', 'required': 'a', 'paired': 'bt', 'key': keyX10}, // h/j/m/o/r/s/x are missing from 110\n {'tag': '711', 'required': 'a', 'paired': 'cdeflns', 'key': keyX11}, // h/i/s/x are missing from 711\n {'tag': '720', 'required': 'a', 'key': 'a'},\n // NB! 730 has no name part, key is used for title part\n {'tag': '730', 'required': 'a', 'key': keyX30}, // NB: 130->730 magic subfields might not agree...\n {'tag': '740', 'required': 'a', 'key': 'ahnp'},\n {'tag': '751', 'required': 'a', 'key': 'a'}, // N=11, kaikissa pelkk\u00E4 $a\n {'tag': '752', 'required': '', 'key': 'abcdefgh'}, // N=12234\n {'tag': '753', 'required': '', 'key': 'abc'},\n {'tag': '754', 'required': '', 'key': 'acdxz'}, // N=3\n {'tag': '758', 'required': 'a', 'key': 'ai'}, // N=1\n\n {'tag': '760', 'required': 'tw', key: 'twxy'},\n {'tag': '762', 'required': 't', key: 'abcdhmstxy'},\n {'tag': '765', 'required': 't', key: 'abcdhmrstuwxyz'},\n {'tag': '767', 'required': 't', key: 'abcdhmrstuwxyz'},\n {'tag': '770', 'required': 't', 'paired': 'ruxyz', key: 'abcdhmrstuwxyz'},\n {'tag': '772', 'required': 't', key: 'abcdhmrstuwxyz'},\n {'tag': '773', 'required': 'w', key: 'wgq'}, // Kirjav\u00E4litys should not have any component parts. However, this need to be re-thought...\n // Currently we (appently) drop fields that don't contain 773$w...\n {'tag': '774', 'required': '', 'paired': 'nruxyz', 'key': 'npqrstrxyz'},\n {'tag': '775', 'required': '', 'paired': 'ruxyz', 'key': 'abcdefhmstuxyz'},\n {'tag': '776', 'required': '', 'paired': 'ruxyz', 'key': 'abcdhmsuwxyz'},\n {'tag': '777', 'required': '', 'paired': 'ruxyz', 'key': 'abcdhmstuxyz'},\n {'tag': '780', 'required': '', 'paired': 'ruxyz', 'key': 'abcdhmstuxyz'},\n {'tag': '785', 'required': '', 'paired': 'uxyz', 'key': 'abcdhmstuxyz'},\n {'tag': '786', 'required': '', 'paired': 'abcrstuxyz', 'key': 'abcdhijmprstuxyz4'},\n {'tag': '787', 'required': '', 'paired': 'abcdhmstuxyz4'},\n {'tag': '788', 'required': '', 'paired': 'stx', 'key': 'abdestx'},\n {'tag': '800', 'required': 'a', 'paired': 't', 'key': keyX00},\n {'tag': '810', 'required': 'a', 'paired': 'bt', 'key': keyX10},\n {'tag': '811', 'required': 'a', 'paired': 't', 'key': keyX11},\n {'tag': '830', 'required': 'a', 'key': keyX30},\n {'tag': '840', 'required': 'a'},\n {'tag': '841', 'required': 'a'},\n {'tag': '842', 'required': 'a'},\n {'tag': '843', 'required': 'a'},\n {'tag': '844', 'required': 'a'},\n {'tag': '845', 'required': 'a'},\n {'tag': '850', 'required': 'a', 'key': 'a'},\n {'tag': '852', 'required': 'a'}, // HMM... we might want to reconsider this...\n {'tag': '853', 'required': 'a'},\n {'tag': '854', 'required': 'a'},\n {'tag': '855', 'required': 'a'},\n {'tag': '856', 'required': 'u', 'paired': 'u', 'key': 'opuw23'}, // 856 is built around $u...\n {'tag': '863', 'required': 'a'},\n {'tag': '864', 'required': 'a'},\n {'tag': '865', 'required': 'a'},\n {'tag': '866', 'required': 'a'},\n {'tag': '867', 'required': 'a'},\n {'tag': '868', 'required': 'a'},\n {'tag': '876', 'required': 'a'},\n {'tag': '877', 'required': 'a'},\n {'tag': '878', 'required': 'a'},\n {'tag': '880', 'required': '', 'paired': 'a', 'key': 'abcdefghijklmnopqrstuvwxyz'},\n {'tag': '881', 'required': ''},\n {'tag': '882', 'required': ''},\n {'tag': '883', 'required': ''},\n {'tag': '884', 'required': '', 'paired': 'agkq'},\n {'tag': '885', 'required': ''},\n {'tag': '886', 'required': ''},\n {'tag': '887', 'required': ''},\n {'tag': '900', 'required': ''},\n {'tag': '901', 'required': ''},\n {'tag': '910', 'required': ''},\n {'tag': '935', 'required': 'a', 'key': 'az'}, // Fono information at least\n {'tag': '940', 'required': ''},\n {'tag': '946', 'required': 'a', 'key': 'abfnp'}, // Copied from 246. However, final version might contain some elements from field 245 as well\n {'tag': '960', 'required': ''},\n {'tag': '973', 'required': 'w', 'key': 'w'}, // Viola multi-hosts\n {'tag': '995', 'required': ''},\n {'tag': 'CAT', 'required': ''},\n {'tag': 'LOW', 'required': ''},\n {'tag': 'SID', 'required': ''}\n];\n\nfunction constraintToValue(tagsConstraints, constraintName) {\n if (constraintName in tagsConstraints) {\n return tagsConstraints[constraintName];\n }\n return null; // NB! \"\" might mean \"apply to everything\" (eg. 040.key) while null means that it is not applied.\n}\n\nexport function getMergeConstraintsForTag(tag, constraintName) {\n const tagsConstraintsArray = mergeConstraints.filter(entry => tag === entry.tag);\n if (tagsConstraintsArray.length === 0) {\n debugDev(`WARNING\\tNo key found for ${tag}. Returning NULL!`);\n return null;\n }\n // NB! should we support multiple contains for a field? Eg. 505$a vs 505($tg)+\n if (tagsConstraintsArray.length > 1) {\n debugDev(`WARNING\\tMultiple values for '${constraintName}' (N=${tagsConstraintsArray.length}) found in ${tag}. Using first values.`);\n }\n return constraintToValue(tagsConstraintsArray[0], constraintName);\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1,122 +1,63 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.mergeField = mergeField;
7
- var _debug = _interopRequireDefault(require("debug"));
8
- var _utils = require("../utils");
9
- var _subfield6Utils = require("../subfield6Utils.js");
10
- var _normalizeFieldForComparison = require("../normalizeFieldForComparison");
11
- var _mergeOrAddSubfield = require("./mergeOrAddSubfield");
12
- var _mergeIndicator = require("./mergeIndicator");
13
- var _mergableTag = require("./mergableTag");
14
- var _counterpartField = require("./counterpartField");
15
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
16
- //import {MarcRecord} from '@natlibfi/marc-record';
17
-
18
- //import {default as normalizeEncoding} from '@natlibfi/marc-record-validators-melinda/dist/normalize-utf8-diacritics';
19
- //import {postprocessRecords} from './mergeOrAddPostprocess.js';
20
- //import {preprocessBeforeAdd} from './processFilter.js';
21
-
22
- //import fs from 'fs';
23
- //import path from 'path';
24
-
25
- //const defaultConfig = JSON.parse(fs.readFileSync(path.join(__dirname, '..', '..', 'src', 'reducers', 'config.json'), 'utf8'));
26
-
27
- // Specs: https://workgroups.helsinki.fi/x/K1ohCw (though we occasionally differ from them)...
28
-
29
- const debug = (0, _debug.default)('@natlibfi/melinda-marc-record-merge-reducers:mergeField');
30
- //const debugData = debug.extend('data');
31
- const debugDev = debug.extend('dev');
32
-
33
- // NB! Can we do this via config.json?
1
+ import createDebugLogger from "debug";
2
+ import { fieldToString, fieldsToString, fieldsAreIdentical, nvdebug, hasCopyright, removeCopyright, subfieldToString } from "../utils.js";
3
+ import { fieldGetOccurrenceNumberPairs } from "../subfield6Utils.js";
4
+ import { cloneAndNormalizeFieldForComparison, cloneAndRemovePunctuation, isEnnakkotietoSubfieldG } from "../normalizeFieldForComparison.js";
5
+ import { mergeOrAddSubfield } from "./mergeOrAddSubfield.js";
6
+ import { mergeIndicators } from "./mergeIndicator.js";
7
+ import { mergableTag } from "./mergableTag.js";
8
+ import { getCounterpart } from "./counterpartField.js";
9
+ const debug = createDebugLogger("@natlibfi/melinda-marc-record-merge-reducers:mergeField");
10
+ const debugDev = debug.extend("dev");
34
11
  function removeEnnakkotieto(field) {
35
- const tmp = field.subfields.filter(subfield => !(0, _normalizeFieldForComparison.isEnnakkotietoSubfieldG)(subfield));
36
- // remove only iff some other subfield remains
12
+ const tmp = field.subfields.filter((subfield) => !isEnnakkotietoSubfieldG(subfield));
37
13
  if (tmp.length > 0) {
38
14
  field.subfields = tmp;
39
15
  }
40
16
  }
41
17
  function copyrightYearHack(baseRecord, baseField, sourceField) {
42
- if (baseField.tag !== '264' || sourceField.tag !== '260') {
18
+ if (baseField.tag !== "264" || sourceField.tag !== "260") {
43
19
  return;
44
20
  }
45
- const relevantSubfields = sourceField.subfields.filter(sf => sf.code === 'c' && (0, _utils.hasCopyright)(sf.value));
46
- relevantSubfields.forEach(sf => {
47
- // Add new:
48
- const value = sf.value.replace(/\.$/u, '');
49
- baseRecord.insertField({
50
- 'tag': '264',
51
- 'ind1': ' ',
52
- 'ind2': '4',
53
- 'subfields': [{
54
- 'code': 'c',
55
- value
56
- }]
57
- });
58
- // Modify original subfield:
59
- sf.value = (0, _utils.removeCopyright)(sf.value);
21
+ const relevantSubfields = sourceField.subfields.filter((sf) => sf.code === "c" && hasCopyright(sf.value));
22
+ relevantSubfields.forEach((sf) => {
23
+ const value = sf.value.replace(/\.$/u, "");
24
+ baseRecord.insertField({ "tag": "264", "ind1": " ", "ind2": "4", "subfields": [{ "code": "c", value }] });
25
+ sf.value = removeCopyright(sf.value);
60
26
  });
61
27
  }
62
28
  function mergeField2(baseRecord, baseField, sourceField, config, candFieldPairs880 = []) {
63
- //// Identical fields
64
- // No need to check every subfield separately.
65
- // Also no need to postprocess the resulting field.
66
- if ((0, _utils.fieldToString)(baseField) === (0, _utils.fieldToString)(sourceField)) {
29
+ if (fieldToString(baseField) === fieldToString(sourceField)) {
67
30
  return baseRecord;
68
31
  }
69
-
70
- // If a base ennakkotieto is merged with real data, remove ennakkotieto subfield:
71
- // (If our prepub normalizations are ok, this should not be needed.
72
- // However, it's simple and works well enough, so let's keep it here.)
73
- if (baseField.subfields?.find(sf => (0, _normalizeFieldForComparison.isEnnakkotietoSubfieldG)(sf)) && !sourceField.subfields?.find(sf => (0, _normalizeFieldForComparison.isEnnakkotietoSubfieldG)(sf))) {
32
+ if (baseField.subfields?.find((sf) => isEnnakkotietoSubfieldG(sf)) && !sourceField.subfields?.find((sf) => isEnnakkotietoSubfieldG(sf))) {
74
33
  removeEnnakkotieto(baseField);
75
34
  baseField.merged = 1;
76
35
  }
77
36
  copyrightYearHack(baseRecord, baseField, sourceField);
78
- (0, _mergeIndicator.mergeIndicators)(baseField, sourceField, config);
79
-
80
- // We want to add the incoming subfields without punctuation, and add puctuation later on.
81
- // (Cloning is harmless, but probably not needed.)
82
- // NEW: we also drag the normalized version along. It is needed for the merge-or-add decision
83
- const normalizedSourceField = (0, _normalizeFieldForComparison.cloneAndNormalizeFieldForComparison)(sourceField); // This is for comparison
84
- const strippedSourceField = (0, _normalizeFieldForComparison.cloneAndRemovePunctuation)(sourceField); // This is for adding subfields
85
-
86
- //nvdebug(` MERGING SUBFIELDS OF '${fieldToString(sourceField)}' (original)`, debugDev);
87
- //nvdebug(` MERGING SUBFIELDS OF '${fieldToString(normalizedSourceField)}' (comparison)`, debugDev);
88
- (0, _utils.nvdebug)(` MERGING SUBFIELDS OF '${(0, _utils.fieldToString)(strippedSourceField)}' (merge/add)`, debugDev);
37
+ mergeIndicators(baseField, sourceField, config);
38
+ const normalizedSourceField = cloneAndNormalizeFieldForComparison(sourceField);
39
+ const strippedSourceField = cloneAndRemovePunctuation(sourceField);
40
+ nvdebug(` MERGING SUBFIELDS OF '${fieldToString(strippedSourceField)}' (merge/add)`, debugDev);
89
41
  sourceField.subfields.forEach((originalSubfield, index) => {
90
- //strippedSourceField.subfields.forEach((subfieldForMergeOrAdd, index) => {
91
42
  const normalizedSubfield = normalizedSourceField.subfields[index];
92
43
  const punctlessSubfield = strippedSourceField.subfields[index];
93
- const originalBaseValue = (0, _utils.fieldToString)(baseField);
94
- (0, _utils.nvdebug)(` TRYING TO MERGE SUBFIELD '${(0, _utils.subfieldToString)(originalSubfield)}' TO '${originalBaseValue}'`, debugDev);
95
- const subfieldData = {
96
- 'tag': sourceField.tag,
97
- 'code': originalSubfield.code,
98
- 'originalValue': originalSubfield.value,
99
- 'normalizedValue': normalizedSubfield.value,
100
- 'punctuationlessValue': punctlessSubfield.value
101
- };
102
- (0, _mergeOrAddSubfield.mergeOrAddSubfield)(baseField, subfieldData, candFieldPairs880); // candSubfield);
103
- const newValue = (0, _utils.fieldToString)(baseField);
44
+ const originalBaseValue = fieldToString(baseField);
45
+ nvdebug(` TRYING TO MERGE SUBFIELD '${subfieldToString(originalSubfield)}' TO '${originalBaseValue}'`, debugDev);
46
+ const subfieldData = { "tag": sourceField.tag, "code": originalSubfield.code, "originalValue": originalSubfield.value, "normalizedValue": normalizedSubfield.value, "punctuationlessValue": punctlessSubfield.value };
47
+ mergeOrAddSubfield(baseField, subfieldData, candFieldPairs880);
48
+ const newValue = fieldToString(baseField);
104
49
  if (originalBaseValue !== newValue) {
105
- (0, _utils.nvdebug)(` SUBFIELD MERGE RESULT: '${newValue}'`, debugDev);
106
- //debug(` TODO: sort subfields, handle punctuation...`);
50
+ nvdebug(` SUBFIELD MERGE RESULT: '${newValue}'`, debugDev);
107
51
  }
108
- //else { debugDev(` mergeOrAddSubfield() did not add '‡${fieldToString(subfieldForMergeOrAdd)}' to '${originalValue}'`); }
109
52
  });
110
53
  }
111
54
  function skipMergeField(baseRecord, sourceField, config) {
112
- if (!(0, _mergableTag.mergableTag)(sourceField.tag, config)) {
113
- (0, _utils.nvdebug)(`skipMergeField(): field '${(0, _utils.fieldToString)(sourceField)}' listed as skippable!`, debugDev);
55
+ if (!mergableTag(sourceField.tag, config)) {
56
+ nvdebug(`skipMergeField(): field '${fieldToString(sourceField)}' listed as skippable!`, debugDev);
114
57
  return true;
115
58
  }
116
-
117
- // Skip duplicate field:
118
- if (baseRecord.fields.some(baseField => !baseField.mergeCandidate && (0, _utils.fieldsAreIdentical)(sourceField, baseField))) {
119
- (0, _utils.nvdebug)(`skipMergeField(): field '${(0, _utils.fieldToString)(sourceField)}' already exists! No merge required!`, debugDev);
59
+ if (baseRecord.fields.some((baseField) => !baseField.mergeCandidate && fieldsAreIdentical(sourceField, baseField))) {
60
+ nvdebug(`skipMergeField(): field '${fieldToString(sourceField)}' already exists! No merge required!`, debugDev);
120
61
  sourceField.deleted = 1;
121
62
  return true;
122
63
  }
@@ -126,24 +67,21 @@ function sourceRecordIsBetter(baseField, sourceField) {
126
67
  if (!baseField.subfields) {
127
68
  return;
128
69
  }
129
- // MELINDA-8978: prefer Asteri version
130
70
  if (isAsteriField(sourceField) && !isAsteriField(baseField)) {
131
71
  return 1;
132
72
  }
133
73
  function isAsteriField(field) {
134
- if (field.subfields.some(sf => sf.code === '0' && sf.value.match(/^\((?:FI-ASTERI-[NW]|FIN1[13])\)[0-9]{9}$/u))) {
74
+ if (field.subfields.some((sf) => sf.code === "0" && sf.value.match(/^\((?:FI-ASTERI-[NW]|FIN1[13])\)[0-9]{9}$/u))) {
135
75
  return true;
136
76
  }
137
77
  }
138
78
  return false;
139
79
  }
140
80
  function swapDataBetweenFields(field1, field2) {
141
- // NB! Does not support controlfields yet! Add support if the need arises.
142
81
  if (field1.subfields) {
143
- // If field1 has subfields, then also field2 has them. No need to check the other field here.
144
- swapNamedData('ind1');
145
- swapNamedData('ind2');
146
- swapNamedData('subfields');
82
+ swapNamedData("ind1");
83
+ swapNamedData("ind2");
84
+ swapNamedData("subfields");
147
85
  return;
148
86
  }
149
87
  return;
@@ -153,32 +91,30 @@ function swapDataBetweenFields(field1, field2) {
153
91
  field2[name] = data;
154
92
  }
155
93
  }
156
- function mergeField(baseRecord, sourceRecord, sourceField, config) {
157
- (0, _utils.nvdebug)(`SELF: ${(0, _utils.fieldToString)(sourceField)}`, debugDev);
94
+ export function mergeField(baseRecord, sourceRecord, sourceField, config) {
95
+ nvdebug(`SELF: ${fieldToString(sourceField)}`, debugDev);
158
96
  sourceField.mergeCandidate = true;
159
- // skip duplicates and special cases:
160
97
  if (skipMergeField(baseRecord, sourceField, config)) {
161
- (0, _utils.nvdebug)(`mergeField(): don't merge '${(0, _utils.fieldToString)(sourceField)}'`, debugDev);
98
+ nvdebug(`mergeField(): don't merge '${fieldToString(sourceField)}'`, debugDev);
162
99
  delete sourceField.mergeCandidate;
163
100
  return false;
164
101
  }
165
- (0, _utils.nvdebug)(`mergeField(): Try to merge '${(0, _utils.fieldToString)(sourceField)}'.`, debugDev);
166
- const counterpartField = (0, _counterpartField.getCounterpart)(baseRecord, sourceRecord, sourceField, config);
102
+ nvdebug(`mergeField(): Try to merge '${fieldToString(sourceField)}'.`, debugDev);
103
+ const counterpartField = getCounterpart(baseRecord, sourceRecord, sourceField, config);
167
104
  if (counterpartField) {
168
105
  if (sourceRecordIsBetter(counterpartField, sourceField)) {
169
106
  swapDataBetweenFields(counterpartField, sourceField);
170
107
  }
171
- const candFieldPairs880 = sourceField.tag === '880' ? undefined : (0, _subfield6Utils.fieldGetOccurrenceNumberPairs)(sourceField, sourceRecord.fields);
172
- (0, _utils.nvdebug)(`mergeField(): Got counterpart: '${(0, _utils.fieldToString)(counterpartField)}'. Thus try merge...`, debugDev);
173
- (0, _utils.nvdebug)(`PAIR: ${candFieldPairs880 ? (0, _utils.fieldsToString)(candFieldPairs880) : 'NADA'}`, debugDev);
108
+ const candFieldPairs880 = sourceField.tag === "880" ? void 0 : fieldGetOccurrenceNumberPairs(sourceField, sourceRecord.fields);
109
+ nvdebug(`mergeField(): Got counterpart: '${fieldToString(counterpartField)}'. Thus try merge...`, debugDev);
110
+ nvdebug(`PAIR: ${candFieldPairs880 ? fieldsToString(candFieldPairs880) : "NADA"}`, debugDev);
174
111
  mergeField2(baseRecord, counterpartField, sourceField, config, candFieldPairs880);
175
112
  sourceField.deleted = 1;
176
113
  delete sourceField.mergeCandidate;
177
114
  return true;
178
115
  }
179
- // NB! Counterpartless field is inserted to 7XX even if field.tag says 1XX:
180
- debugDev(`mergeField(): No mergable counterpart found for '${(0, _utils.fieldToString)(sourceField)}'.`);
116
+ debugDev(`mergeField(): No mergable counterpart found for '${fieldToString(sourceField)}'.`);
181
117
  delete sourceField.mergeCandidate;
182
118
  return false;
183
119
  }
184
- //# sourceMappingURL=mergeField.js.map
120
+ //# sourceMappingURL=mergeField.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"mergeField.js","names":["_debug","_interopRequireDefault","require","_utils","_subfield6Utils","_normalizeFieldForComparison","_mergeOrAddSubfield","_mergeIndicator","_mergableTag","_counterpartField","e","__esModule","default","debug","createDebugLogger","debugDev","extend","removeEnnakkotieto","field","tmp","subfields","filter","subfield","isEnnakkotietoSubfieldG","length","copyrightYearHack","baseRecord","baseField","sourceField","tag","relevantSubfields","sf","code","hasCopyright","value","forEach","replace","insertField","removeCopyright","mergeField2","config","candFieldPairs880","fieldToString","find","merged","mergeIndicators","normalizedSourceField","cloneAndNormalizeFieldForComparison","strippedSourceField","cloneAndRemovePunctuation","nvdebug","originalSubfield","index","normalizedSubfield","punctlessSubfield","originalBaseValue","subfieldToString","subfieldData","mergeOrAddSubfield","newValue","skipMergeField","mergableTag","fields","some","mergeCandidate","fieldsAreIdentical","deleted","sourceRecordIsBetter","isAsteriField","match","swapDataBetweenFields","field1","field2","swapNamedData","name","data","mergeField","sourceRecord","counterpartField","getCounterpart","undefined","fieldGetOccurrenceNumberPairs","fieldsToString"],"sources":["../../src/merge-fields/mergeField.js"],"sourcesContent":["//import {MarcRecord} from '@natlibfi/marc-record';\nimport createDebugLogger from 'debug';\nimport {fieldToString, fieldsToString, fieldsAreIdentical, nvdebug, hasCopyright, removeCopyright, subfieldToString} from '../utils';\nimport {fieldGetOccurrenceNumberPairs} from '../subfield6Utils.js';\nimport {cloneAndNormalizeFieldForComparison, cloneAndRemovePunctuation, isEnnakkotietoSubfieldG} from '../normalizeFieldForComparison';\nimport {mergeOrAddSubfield} from './mergeOrAddSubfield';\nimport {mergeIndicators} from './mergeIndicator';\nimport {mergableTag} from './mergableTag';\nimport {getCounterpart} from './counterpartField';\n//import {default as normalizeEncoding} from '@natlibfi/marc-record-validators-melinda/dist/normalize-utf8-diacritics';\n//import {postprocessRecords} from './mergeOrAddPostprocess.js';\n//import {preprocessBeforeAdd} from './processFilter.js';\n\n//import fs from 'fs';\n//import path from 'path';\n\n\n//const defaultConfig = JSON.parse(fs.readFileSync(path.join(__dirname, '..', '..', 'src', 'reducers', 'config.json'), 'utf8'));\n\n// Specs: https://workgroups.helsinki.fi/x/K1ohCw (though we occasionally differ from them)...\n\nconst debug = createDebugLogger('@natlibfi/melinda-marc-record-merge-reducers:mergeField');\n//const debugData = debug.extend('data');\nconst debugDev = debug.extend('dev');\n\n// NB! Can we do this via config.json?\nfunction removeEnnakkotieto(field) {\n const tmp = field.subfields.filter(subfield => !isEnnakkotietoSubfieldG(subfield));\n // remove only iff some other subfield remains\n if (tmp.length > 0) {\n field.subfields = tmp;\n }\n}\n\n\nfunction copyrightYearHack(baseRecord, baseField, sourceField) {\n if (baseField.tag !== '264' || sourceField.tag !== '260') {\n return;\n }\n const relevantSubfields = sourceField.subfields.filter(sf => sf.code === 'c' && hasCopyright(sf.value));\n\n relevantSubfields.forEach(sf => {\n // Add new:\n const value = sf.value.replace(/\\.$/u, '');\n baseRecord.insertField({'tag': '264', 'ind1': ' ', 'ind2': '4', 'subfields': [{'code': 'c', value}]});\n // Modify original subfield:\n sf.value = removeCopyright(sf.value);\n });\n}\n\nfunction mergeField2(baseRecord, baseField, sourceField, config, candFieldPairs880 = []) {\n //// Identical fields\n // No need to check every subfield separately.\n // Also no need to postprocess the resulting field.\n if (fieldToString(baseField) === fieldToString(sourceField)) {\n return baseRecord;\n }\n\n // If a base ennakkotieto is merged with real data, remove ennakkotieto subfield:\n // (If our prepub normalizations are ok, this should not be needed.\n // However, it's simple and works well enough, so let's keep it here.)\n if (baseField.subfields?.find(sf => isEnnakkotietoSubfieldG(sf)) && !sourceField.subfields?.find(sf => isEnnakkotietoSubfieldG(sf))) {\n removeEnnakkotieto(baseField);\n baseField.merged = 1;\n }\n\n copyrightYearHack(baseRecord, baseField, sourceField);\n\n mergeIndicators(baseField, sourceField, config);\n\n\n // We want to add the incoming subfields without punctuation, and add puctuation later on.\n // (Cloning is harmless, but probably not needed.)\n // NEW: we also drag the normalized version along. It is needed for the merge-or-add decision\n const normalizedSourceField = cloneAndNormalizeFieldForComparison(sourceField); // This is for comparison\n const strippedSourceField = cloneAndRemovePunctuation(sourceField); // This is for adding subfields\n\n //nvdebug(` MERGING SUBFIELDS OF '${fieldToString(sourceField)}' (original)`, debugDev);\n //nvdebug(` MERGING SUBFIELDS OF '${fieldToString(normalizedSourceField)}' (comparison)`, debugDev);\n nvdebug(` MERGING SUBFIELDS OF '${fieldToString(strippedSourceField)}' (merge/add)`, debugDev);\n\n sourceField.subfields.forEach((originalSubfield, index) => {\n //strippedSourceField.subfields.forEach((subfieldForMergeOrAdd, index) => {\n const normalizedSubfield = normalizedSourceField.subfields[index];\n const punctlessSubfield = strippedSourceField.subfields[index];\n const originalBaseValue = fieldToString(baseField);\n nvdebug(` TRYING TO MERGE SUBFIELD '${subfieldToString(originalSubfield)}' TO '${originalBaseValue}'`, debugDev);\n\n const subfieldData = {'tag': sourceField.tag, 'code': originalSubfield.code, 'originalValue': originalSubfield.value, 'normalizedValue': normalizedSubfield.value, 'punctuationlessValue': punctlessSubfield.value};\n\n mergeOrAddSubfield(baseField, subfieldData, candFieldPairs880); // candSubfield);\n const newValue = fieldToString(baseField);\n if (originalBaseValue !== newValue) {\n nvdebug(` SUBFIELD MERGE RESULT: '${newValue}'`, debugDev);\n //debug(` TODO: sort subfields, handle punctuation...`);\n }\n //else { debugDev(` mergeOrAddSubfield() did not add '‡${fieldToString(subfieldForMergeOrAdd)}' to '${originalValue}'`); }\n\n });\n}\n\n\nfunction skipMergeField(baseRecord, sourceField, config) {\n if (!mergableTag(sourceField.tag, config)) {\n nvdebug(`skipMergeField(): field '${fieldToString(sourceField)}' listed as skippable!`, debugDev);\n return true;\n }\n\n // Skip duplicate field:\n if (baseRecord.fields.some(baseField => !baseField.mergeCandidate && fieldsAreIdentical(sourceField, baseField))) {\n nvdebug(`skipMergeField(): field '${fieldToString(sourceField)}' already exists! No merge required!`, debugDev);\n sourceField.deleted = 1;\n return true;\n }\n\n return false;\n}\n\nfunction sourceRecordIsBetter(baseField, sourceField) {\n if (!baseField.subfields) {\n return;\n }\n // MELINDA-8978: prefer Asteri version\n if (isAsteriField(sourceField) && !isAsteriField(baseField)) {\n return 1;\n }\n\n function isAsteriField(field) {\n if (field.subfields.some(sf => sf.code === '0' && sf.value.match(/^\\((?:FI-ASTERI-[NW]|FIN1[13])\\)[0-9]{9}$/u))) {\n return true;\n }\n }\n return false;\n}\n\nfunction swapDataBetweenFields(field1, field2) {\n // NB! Does not support controlfields yet! Add support if the need arises.\n if (field1.subfields) { // If field1 has subfields, then also field2 has them. No need to check the other field here.\n swapNamedData('ind1');\n swapNamedData('ind2');\n swapNamedData('subfields');\n return;\n }\n return;\n\n function swapNamedData(name) {\n const data = field1[name];\n field1[name] = field2[name];\n field2[name] = data;\n }\n\n}\n\nexport function mergeField(baseRecord, sourceRecord, sourceField, config) {\n nvdebug(`SELF: ${fieldToString(sourceField)}`, debugDev);\n\n sourceField.mergeCandidate = true;\n // skip duplicates and special cases:\n if (skipMergeField(baseRecord, sourceField, config)) {\n nvdebug(`mergeField(): don't merge '${fieldToString(sourceField)}'`, debugDev);\n delete sourceField.mergeCandidate;\n return false;\n }\n\n nvdebug(`mergeField(): Try to merge '${fieldToString(sourceField)}'.`, debugDev);\n const counterpartField = getCounterpart(baseRecord, sourceRecord, sourceField, config);\n\n if (counterpartField) {\n if (sourceRecordIsBetter(counterpartField, sourceField)) {\n swapDataBetweenFields(counterpartField, sourceField);\n }\n\n const candFieldPairs880 = sourceField.tag === '880' ? undefined : fieldGetOccurrenceNumberPairs(sourceField, sourceRecord.fields);\n nvdebug(`mergeField(): Got counterpart: '${fieldToString(counterpartField)}'. Thus try merge...`, debugDev);\n nvdebug(`PAIR: ${candFieldPairs880 ? fieldsToString(candFieldPairs880) : 'NADA'}`, debugDev);\n mergeField2(baseRecord, counterpartField, sourceField, config, candFieldPairs880);\n sourceField.deleted = 1;\n delete sourceField.mergeCandidate;\n return true;\n }\n // NB! Counterpartless field is inserted to 7XX even if field.tag says 1XX:\n debugDev(`mergeField(): No mergable counterpart found for '${fieldToString(sourceField)}'.`);\n delete sourceField.mergeCandidate;\n return false;\n}\n\n"],"mappings":"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","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/merge-fields/mergeField.js"],
4
+ "sourcesContent": ["//import {MarcRecord} from '@natlibfi/marc-record';\nimport createDebugLogger from 'debug';\nimport {fieldToString, fieldsToString, fieldsAreIdentical, nvdebug, hasCopyright, removeCopyright, subfieldToString} from '../utils.js';\nimport {fieldGetOccurrenceNumberPairs} from '../subfield6Utils.js';\nimport {cloneAndNormalizeFieldForComparison, cloneAndRemovePunctuation, isEnnakkotietoSubfieldG} from '../normalizeFieldForComparison.js';\nimport {mergeOrAddSubfield} from './mergeOrAddSubfield.js';\nimport {mergeIndicators} from './mergeIndicator.js';\nimport {mergableTag} from './mergableTag.js';\nimport {getCounterpart} from './counterpartField.js';\n//import {default as normalizeEncoding} from '@natlibfi/marc-record-validators-melinda/dist/normalize-utf8-diacritics';\n//import {postprocessRecords} from './mergeOrAddPostprocess.js';\n//import {preprocessBeforeAdd} from './processFilter.js';\n\n//import fs from 'fs';\n//import path from 'path';\n\n\n//const defaultConfig = JSON.parse(fs.readFileSync(path.join(__dirname, '..', '..', 'src', 'reducers', 'config.json'), 'utf8'));\n\n// Specs: https://workgroups.helsinki.fi/x/K1ohCw (though we occasionally differ from them)...\n\nconst debug = createDebugLogger('@natlibfi/melinda-marc-record-merge-reducers:mergeField');\n//const debugData = debug.extend('data');\nconst debugDev = debug.extend('dev');\n\n// NB! Can we do this via config.json?\nfunction removeEnnakkotieto(field) {\n const tmp = field.subfields.filter(subfield => !isEnnakkotietoSubfieldG(subfield));\n // remove only iff some other subfield remains\n if (tmp.length > 0) {\n field.subfields = tmp;\n }\n}\n\n\nfunction copyrightYearHack(baseRecord, baseField, sourceField) {\n if (baseField.tag !== '264' || sourceField.tag !== '260') {\n return;\n }\n const relevantSubfields = sourceField.subfields.filter(sf => sf.code === 'c' && hasCopyright(sf.value));\n\n relevantSubfields.forEach(sf => {\n // Add new:\n const value = sf.value.replace(/\\.$/u, '');\n baseRecord.insertField({'tag': '264', 'ind1': ' ', 'ind2': '4', 'subfields': [{'code': 'c', value}]});\n // Modify original subfield:\n sf.value = removeCopyright(sf.value);\n });\n}\n\nfunction mergeField2(baseRecord, baseField, sourceField, config, candFieldPairs880 = []) {\n //// Identical fields\n // No need to check every subfield separately.\n // Also no need to postprocess the resulting field.\n if (fieldToString(baseField) === fieldToString(sourceField)) {\n return baseRecord;\n }\n\n // If a base ennakkotieto is merged with real data, remove ennakkotieto subfield:\n // (If our prepub normalizations are ok, this should not be needed.\n // However, it's simple and works well enough, so let's keep it here.)\n if (baseField.subfields?.find(sf => isEnnakkotietoSubfieldG(sf)) && !sourceField.subfields?.find(sf => isEnnakkotietoSubfieldG(sf))) {\n removeEnnakkotieto(baseField);\n baseField.merged = 1;\n }\n\n copyrightYearHack(baseRecord, baseField, sourceField);\n\n mergeIndicators(baseField, sourceField, config);\n\n\n // We want to add the incoming subfields without punctuation, and add puctuation later on.\n // (Cloning is harmless, but probably not needed.)\n // NEW: we also drag the normalized version along. It is needed for the merge-or-add decision\n const normalizedSourceField = cloneAndNormalizeFieldForComparison(sourceField); // This is for comparison\n const strippedSourceField = cloneAndRemovePunctuation(sourceField); // This is for adding subfields\n\n //nvdebug(` MERGING SUBFIELDS OF '${fieldToString(sourceField)}' (original)`, debugDev);\n //nvdebug(` MERGING SUBFIELDS OF '${fieldToString(normalizedSourceField)}' (comparison)`, debugDev);\n nvdebug(` MERGING SUBFIELDS OF '${fieldToString(strippedSourceField)}' (merge/add)`, debugDev);\n\n sourceField.subfields.forEach((originalSubfield, index) => {\n //strippedSourceField.subfields.forEach((subfieldForMergeOrAdd, index) => {\n const normalizedSubfield = normalizedSourceField.subfields[index];\n const punctlessSubfield = strippedSourceField.subfields[index];\n const originalBaseValue = fieldToString(baseField);\n nvdebug(` TRYING TO MERGE SUBFIELD '${subfieldToString(originalSubfield)}' TO '${originalBaseValue}'`, debugDev);\n\n const subfieldData = {'tag': sourceField.tag, 'code': originalSubfield.code, 'originalValue': originalSubfield.value, 'normalizedValue': normalizedSubfield.value, 'punctuationlessValue': punctlessSubfield.value};\n\n mergeOrAddSubfield(baseField, subfieldData, candFieldPairs880); // candSubfield);\n const newValue = fieldToString(baseField);\n if (originalBaseValue !== newValue) {\n nvdebug(` SUBFIELD MERGE RESULT: '${newValue}'`, debugDev);\n //debug(` TODO: sort subfields, handle punctuation...`);\n }\n //else { debugDev(` mergeOrAddSubfield() did not add '\u2021${fieldToString(subfieldForMergeOrAdd)}' to '${originalValue}'`); }\n\n });\n}\n\n\nfunction skipMergeField(baseRecord, sourceField, config) {\n if (!mergableTag(sourceField.tag, config)) {\n nvdebug(`skipMergeField(): field '${fieldToString(sourceField)}' listed as skippable!`, debugDev);\n return true;\n }\n\n // Skip duplicate field:\n if (baseRecord.fields.some(baseField => !baseField.mergeCandidate && fieldsAreIdentical(sourceField, baseField))) {\n nvdebug(`skipMergeField(): field '${fieldToString(sourceField)}' already exists! No merge required!`, debugDev);\n sourceField.deleted = 1;\n return true;\n }\n\n return false;\n}\n\nfunction sourceRecordIsBetter(baseField, sourceField) {\n if (!baseField.subfields) {\n return;\n }\n // MELINDA-8978: prefer Asteri version\n if (isAsteriField(sourceField) && !isAsteriField(baseField)) {\n return 1;\n }\n\n function isAsteriField(field) {\n if (field.subfields.some(sf => sf.code === '0' && sf.value.match(/^\\((?:FI-ASTERI-[NW]|FIN1[13])\\)[0-9]{9}$/u))) {\n return true;\n }\n }\n return false;\n}\n\nfunction swapDataBetweenFields(field1, field2) {\n // NB! Does not support controlfields yet! Add support if the need arises.\n if (field1.subfields) { // If field1 has subfields, then also field2 has them. No need to check the other field here.\n swapNamedData('ind1');\n swapNamedData('ind2');\n swapNamedData('subfields');\n return;\n }\n return;\n\n function swapNamedData(name) {\n const data = field1[name];\n field1[name] = field2[name];\n field2[name] = data;\n }\n\n}\n\nexport function mergeField(baseRecord, sourceRecord, sourceField, config) {\n nvdebug(`SELF: ${fieldToString(sourceField)}`, debugDev);\n\n sourceField.mergeCandidate = true;\n // skip duplicates and special cases:\n if (skipMergeField(baseRecord, sourceField, config)) {\n nvdebug(`mergeField(): don't merge '${fieldToString(sourceField)}'`, debugDev);\n delete sourceField.mergeCandidate;\n return false;\n }\n\n nvdebug(`mergeField(): Try to merge '${fieldToString(sourceField)}'.`, debugDev);\n const counterpartField = getCounterpart(baseRecord, sourceRecord, sourceField, config);\n\n if (counterpartField) {\n if (sourceRecordIsBetter(counterpartField, sourceField)) {\n swapDataBetweenFields(counterpartField, sourceField);\n }\n\n const candFieldPairs880 = sourceField.tag === '880' ? undefined : fieldGetOccurrenceNumberPairs(sourceField, sourceRecord.fields);\n nvdebug(`mergeField(): Got counterpart: '${fieldToString(counterpartField)}'. Thus try merge...`, debugDev);\n nvdebug(`PAIR: ${candFieldPairs880 ? fieldsToString(candFieldPairs880) : 'NADA'}`, debugDev);\n mergeField2(baseRecord, counterpartField, sourceField, config, candFieldPairs880);\n sourceField.deleted = 1;\n delete sourceField.mergeCandidate;\n return true;\n }\n // NB! Counterpartless field is inserted to 7XX even if field.tag says 1XX:\n debugDev(`mergeField(): No mergable counterpart found for '${fieldToString(sourceField)}'.`);\n delete sourceField.mergeCandidate;\n return false;\n}\n\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }