@natlibfi/marc-record-validators-melinda 11.6.7 → 12.0.0-alpha.12

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 (563) hide show
  1. package/.github/workflows/{melinda-node-tests.yml → melinda-node-tests-and-publish.yml} +37 -12
  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 +43 -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 +873 -769
  47. package/dist/ending-punctuation-conf.js.map +7 -1
  48. package/dist/ending-punctuation.js +156 -169
  49. package/dist/ending-punctuation.js.map +7 -1
  50. package/dist/ending-punctuation.test.js +2385 -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 +182 -413
  107. package/dist/index.js.map +7 -1
  108. package/dist/indicator-fixes.js +66 -94
  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 +71 -128
  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 +187 -379
  125. package/dist/merge-fields/counterpartField.js.map +7 -1
  126. package/dist/merge-fields/dataProvenance.js +29 -0
  127. package/dist/merge-fields/dataProvenance.js.map +7 -0
  128. package/dist/merge-fields/index.js +25 -50
  129. package/dist/merge-fields/index.js.map +7 -1
  130. package/dist/merge-fields/mergableIndicator.js +18 -51
  131. package/dist/merge-fields/mergableIndicator.js.map +7 -1
  132. package/dist/merge-fields/mergableTag.js +78 -30
  133. package/dist/merge-fields/mergableTag.js.map +7 -1
  134. package/dist/merge-fields/mergeConfig.js +66 -171
  135. package/dist/merge-fields/mergeConfig.js.map +7 -1
  136. package/dist/merge-fields/mergeConstraints.js +323 -1214
  137. package/dist/merge-fields/mergeConstraints.js.map +7 -1
  138. package/dist/merge-fields/mergeField.js +47 -111
  139. package/dist/merge-fields/mergeField.js.map +7 -1
  140. package/dist/merge-fields/mergeIndicator.js +64 -118
  141. package/dist/merge-fields/mergeIndicator.js.map +7 -1
  142. package/dist/merge-fields/mergeOrAddPostprocess.js +14 -38
  143. package/dist/merge-fields/mergeOrAddPostprocess.js.map +7 -1
  144. package/dist/merge-fields/mergeOrAddSubfield.js +62 -104
  145. package/dist/merge-fields/mergeOrAddSubfield.js.map +7 -1
  146. package/dist/merge-fields/mergeSubfield.js +47 -95
  147. package/dist/merge-fields/mergeSubfield.js.map +7 -1
  148. package/dist/merge-fields/removeDuplicateSubfields.js +18 -31
  149. package/dist/merge-fields/removeDuplicateSubfields.js.map +7 -1
  150. package/dist/merge-fields/worldKnowledge.js +15 -40
  151. package/dist/merge-fields/worldKnowledge.js.map +7 -1
  152. package/dist/merge-fields.test.js +46 -0
  153. package/dist/merge-fields.test.js.map +7 -0
  154. package/dist/mergeField500Lisapainokset.js +27 -56
  155. package/dist/mergeField500Lisapainokset.js.map +7 -1
  156. package/dist/mergeField500Lisapainokset.test.js +44 -0
  157. package/dist/mergeField500Lisapainokset.test.js.map +7 -0
  158. package/dist/mergeRelatorTermFields.js +33 -69
  159. package/dist/mergeRelatorTermFields.js.map +7 -1
  160. package/dist/mergeRelatorTermFields.test.js +44 -0
  161. package/dist/mergeRelatorTermFields.test.js.map +7 -0
  162. package/dist/modernize-502.js +23 -55
  163. package/dist/modernize-502.js.map +7 -1
  164. package/dist/modernize-502.test.js +38 -0
  165. package/dist/modernize-502.test.js.map +7 -0
  166. package/dist/multiple-subfield-0.js +23 -48
  167. package/dist/multiple-subfield-0.js.map +7 -1
  168. package/dist/multiple-subfield-0.test.js +44 -0
  169. package/dist/multiple-subfield-0.test.js.map +7 -0
  170. package/dist/non-breaking-space.js +11 -32
  171. package/dist/non-breaking-space.js.map +7 -1
  172. package/dist/non-breaking-space.test.js +38 -0
  173. package/dist/non-breaking-space.test.js.map +7 -0
  174. package/dist/normalize-dashes.js +18 -37
  175. package/dist/normalize-dashes.js.map +7 -1
  176. package/dist/normalize-dashes.test.js +44 -0
  177. package/dist/normalize-dashes.test.js.map +7 -0
  178. package/dist/normalize-identifiers.js +54 -140
  179. package/dist/normalize-identifiers.js.map +7 -1
  180. package/dist/normalize-identifiers.test.js +44 -0
  181. package/dist/normalize-identifiers.test.js.map +7 -0
  182. package/dist/normalize-qualifying-information.js +23 -48
  183. package/dist/normalize-qualifying-information.js.map +7 -1
  184. package/dist/normalize-qualifying-information.test.js +44 -0
  185. package/dist/normalize-qualifying-information.test.js.map +7 -0
  186. package/dist/normalize-utf8-diacritics.js +19 -105
  187. package/dist/normalize-utf8-diacritics.js.map +7 -1
  188. package/dist/normalize-utf8-diacritics.test.js +44 -0
  189. package/dist/normalize-utf8-diacritics.test.js.map +7 -0
  190. package/dist/normalizeFieldForComparison.js +91 -158
  191. package/dist/normalizeFieldForComparison.js.map +7 -1
  192. package/dist/normalizeSubfieldValueForComparison.js +37 -77
  193. package/dist/normalizeSubfieldValueForComparison.js.map +7 -1
  194. package/dist/prepublicationUtils.js +58 -111
  195. package/dist/prepublicationUtils.js.map +7 -1
  196. package/dist/punctuation/index.js +56 -72
  197. package/dist/punctuation/index.js.map +7 -1
  198. package/dist/punctuation/rules/aut.js +372 -331
  199. package/dist/punctuation/rules/aut.js.map +7 -1
  200. package/dist/punctuation/rules/bib.js +420 -373
  201. package/dist/punctuation/rules/bib.js.map +7 -1
  202. package/dist/punctuation/rules/index.js +7 -21
  203. package/dist/punctuation/rules/index.js.map +7 -1
  204. package/dist/punctuation.test.js +44 -0
  205. package/dist/punctuation.test.js.map +7 -0
  206. package/dist/punctuation2.js +259 -802
  207. package/dist/punctuation2.js.map +7 -1
  208. package/dist/punctuation2.test.js +44 -0
  209. package/dist/punctuation2.test.js.map +7 -0
  210. package/dist/reindexSubfield6OccurenceNumbers.js +61 -96
  211. package/dist/reindexSubfield6OccurenceNumbers.js.map +7 -1
  212. package/dist/reindexSubfield6OccurenceNumbers.test.js +44 -0
  213. package/dist/reindexSubfield6OccurenceNumbers.test.js.map +7 -0
  214. package/dist/removeDuplicateDataFields.js +102 -202
  215. package/dist/removeDuplicateDataFields.js.map +7 -1
  216. package/dist/removeDuplicateDataFields.test.js +44 -0
  217. package/dist/removeDuplicateDataFields.test.js.map +7 -0
  218. package/dist/removeInferiorDataFields.js +104 -227
  219. package/dist/removeInferiorDataFields.js.map +7 -1
  220. package/dist/removeInferiorDataFields.test.js +44 -0
  221. package/dist/removeInferiorDataFields.test.js.map +7 -0
  222. package/dist/resolvable-ext-references-melinda.js +25 -60
  223. package/dist/resolvable-ext-references-melinda.js.map +7 -1
  224. package/dist/resolvable-ext-references-melinda.test.js +160 -0
  225. package/dist/resolvable-ext-references-melinda.test.js.map +7 -0
  226. package/dist/resolveOrphanedSubfield6s.js +32 -63
  227. package/dist/resolveOrphanedSubfield6s.js.map +7 -1
  228. package/dist/resolveOrphanedSubfield6s.test.js +44 -0
  229. package/dist/resolveOrphanedSubfield6s.test.js.map +7 -0
  230. package/dist/sanitize-vocabulary-source-codes.js +27 -55
  231. package/dist/sanitize-vocabulary-source-codes.js.map +7 -1
  232. package/dist/sanitize-vocabulary-source-codes.test.js +45 -0
  233. package/dist/sanitize-vocabulary-source-codes.test.js.map +7 -0
  234. package/dist/sort-tags.js +13 -25
  235. package/dist/sort-tags.js.map +7 -1
  236. package/dist/sort-tags.test.js +261 -0
  237. package/dist/sort-tags.test.js.map +7 -0
  238. package/dist/sortFields.js +152 -222
  239. package/dist/sortFields.js.map +7 -1
  240. package/dist/sortFields.test.js +44 -0
  241. package/dist/sortFields.test.js.map +7 -0
  242. package/dist/sortRelatorTerms.js +30 -68
  243. package/dist/sortRelatorTerms.js.map +7 -1
  244. package/dist/sortRelatorTerms.test.js +44 -0
  245. package/dist/sortRelatorTerms.test.js.map +7 -0
  246. package/dist/sortSubfields.js +102 -255
  247. package/dist/sortSubfields.js.map +7 -1
  248. package/dist/sortSubfields.test.js +44 -0
  249. package/dist/sortSubfields.test.js.map +7 -0
  250. package/dist/stripPunctuation.js +13 -36
  251. package/dist/stripPunctuation.js.map +7 -1
  252. package/dist/stripPunctuation.test.js +44 -0
  253. package/dist/stripPunctuation.test.js.map +7 -0
  254. package/dist/subfield-exclusion.js +28 -75
  255. package/dist/subfield-exclusion.js.map +7 -1
  256. package/dist/subfield-exclusion.test.js +471 -0
  257. package/dist/subfield-exclusion.test.js.map +7 -0
  258. package/dist/subfield6Utils.js +107 -269
  259. package/dist/subfield6Utils.js.map +7 -1
  260. package/dist/subfield8Utils.js +26 -50
  261. package/dist/subfield8Utils.js.map +7 -1
  262. package/dist/subfieldValueNormalizations.js +40 -74
  263. package/dist/subfieldValueNormalizations.js.map +7 -1
  264. package/dist/subfieldValueNormalizations.test.js +45 -0
  265. package/dist/subfieldValueNormalizations.test.js.map +7 -0
  266. package/dist/sync-007-and-300.js +22 -53
  267. package/dist/sync-007-and-300.js.map +7 -1
  268. package/dist/sync-007-and-300.test.js +44 -0
  269. package/dist/sync-007-and-300.test.js.map +7 -0
  270. package/dist/translate-terms.js +67 -155
  271. package/dist/translate-terms.js.map +7 -1
  272. package/dist/translate-terms.test.js +54 -0
  273. package/dist/translate-terms.test.js.map +7 -0
  274. package/dist/typeOfDate-008.js +10 -25
  275. package/dist/typeOfDate-008.js.map +7 -1
  276. package/dist/typeOfDate-008.test.js +40 -0
  277. package/dist/typeOfDate-008.test.js.map +7 -0
  278. package/dist/unicode-decomposition.js +94 -107
  279. package/dist/unicode-decomposition.js.map +7 -1
  280. package/dist/unicode-decomposition.test.js +94 -0
  281. package/dist/unicode-decomposition.test.js.map +7 -0
  282. package/dist/update-field-540.js +30 -75
  283. package/dist/update-field-540.js.map +7 -1
  284. package/dist/update-field-540.test.js +44 -0
  285. package/dist/update-field-540.test.js.map +7 -0
  286. package/dist/urn.js +55 -128
  287. package/dist/urn.js.map +7 -1
  288. package/dist/urn.test.js +44 -0
  289. package/dist/urn.test.js.map +7 -0
  290. package/dist/utils.js +78 -126
  291. package/dist/utils.js.map +7 -1
  292. package/eslint.config.mjs +1 -2
  293. package/package.json +28 -101
  294. package/src/access-rights.js +1 -1
  295. package/src/{access-rights.spec.js → access-rights.test.js} +9 -10
  296. package/src/addMissingField041.js +1 -1
  297. package/src/{addMissingField336.spec.js → addMissingField041.test.js} +13 -14
  298. package/src/addMissingField336.js +3 -3
  299. package/src/{addMissingField041.spec.js → addMissingField336.test.js} +13 -14
  300. package/src/addMissingField337.js +2 -2
  301. package/src/{addMissingField337.spec.js → addMissingField337.test.js} +13 -14
  302. package/src/addMissingField338.js +2 -2
  303. package/src/{addMissingField338.spec.js → addMissingField338.test.js} +13 -14
  304. package/src/cyrillux-usemarcon-replacement.js +18 -18
  305. package/src/{cyrillux-usemarcon-replacement.spec.js → cyrillux-usemarcon-replacement.test.js} +17 -14
  306. package/src/cyrillux.js +19 -12
  307. package/src/{cyrillux.spec.js → cyrillux.test.js} +13 -14
  308. package/src/disambiguateSeriesStatements.js +2 -2
  309. package/src/{disambiguateSeriesStatements.spec.js → disambiguateSeriesStatements.test.js} +12 -13
  310. package/src/double-commas.js +1 -1
  311. package/src/{double-commas.spec.js → double-commas.test.js} +9 -11
  312. package/src/duplicates-ind1.js +1 -1
  313. package/src/{duplicates-ind1.spec.js → duplicates-ind1.test.js} +12 -13
  314. package/src/{empty-fields.spec.js → empty-fields.test.js} +11 -13
  315. package/src/ending-punctuation-conf.js +6 -5
  316. package/src/ending-punctuation.js +115 -24
  317. package/src/{ending-punctuation.spec.js → ending-punctuation.test.js} +357 -275
  318. package/src/{ending-whitespace.spec.js → ending-whitespace.test.js} +12 -13
  319. package/src/field-008-18-34-character-groups.js +2 -2
  320. package/src/{field-008-18-34-character-groups.spec.js → field-008-18-34-character-groups.test.js} +13 -13
  321. package/src/field-505-separators.js +3 -3
  322. package/src/{field-505-separators.spec.js → field-505-separators.test.js} +16 -14
  323. package/src/field-521-fix.js +2 -2
  324. package/src/{field-521-fix.spec.js → field-521-fix.test.js} +12 -13
  325. package/src/field-exclusion.js +1 -1
  326. package/src/{field-exclusion.spec.js → field-exclusion.test.js} +60 -57
  327. package/src/{field-structure.spec.js → field-structure.test.js} +29 -29
  328. package/src/{fields-present.spec.js → fields-present.test.js} +12 -15
  329. package/src/fix-33X.js +4 -4
  330. package/src/{fix-33X.spec.js → fix-33X.test.js} +13 -14
  331. package/src/fix-country-codes.js +1 -1
  332. package/src/{fix-country-codes.spec.js → fix-country-codes.test.js} +12 -13
  333. package/src/fix-language-codes.js +5 -5
  334. package/src/{fix-language-codes.spec.js → fix-language-codes.test.js} +12 -13
  335. package/src/fixRelatorTerms.js +5 -5
  336. package/src/{fixRelatorTerms.spec.js → fixRelatorTerms.test.js} +13 -13
  337. package/src/{fixed-fields.spec.js → fixed-fields.test.js} +11 -14
  338. package/src/identical-fields.js +1 -1
  339. package/src/{identical-fields.spec.js → identical-fields.test.js} +9 -11
  340. package/src/index.js +132 -59
  341. package/src/indicator-fixes.js +17 -4
  342. package/src/{indicator-fixes.spec.js → indicator-fixes.test.js} +9 -12
  343. package/src/isbn-issn.js +12 -7
  344. package/src/{isbn-issn.spec.js → isbn-issn.test.js} +20 -22
  345. package/src/{item-language.spec.js → item-language.test.js} +21 -22
  346. package/src/melindaCustomMergeFields.js +1 -1
  347. package/src/merge-fields/controlSubfields.js +1 -1
  348. package/src/merge-fields/counterpartField.js +14 -9
  349. package/src/merge-fields/dataProvenance.js +41 -0
  350. package/src/merge-fields/index.js +12 -3
  351. package/src/merge-fields/mergableIndicator.js +1 -1
  352. package/src/merge-fields/mergeField.js +8 -8
  353. package/src/merge-fields/mergeIndicator.js +1 -1
  354. package/src/merge-fields/mergeOrAddPostprocess.js +4 -4
  355. package/src/merge-fields/mergeOrAddSubfield.js +2 -2
  356. package/src/merge-fields/mergeSubfield.js +4 -4
  357. package/src/merge-fields/removeDuplicateSubfields.js +2 -2
  358. package/src/{merge-fields.spec.js → merge-fields.test.js} +18 -15
  359. package/src/mergeField500Lisapainokset.js +1 -1
  360. package/src/{mergeField500Lisapainokset.spec.js → mergeField500Lisapainokset.test.js} +12 -13
  361. package/src/mergeRelatorTermFields.js +5 -7
  362. package/src/{mergeRelatorTermFields.spec.js → mergeRelatorTermFields.test.js} +12 -13
  363. package/src/modernize-502.js +1 -1
  364. package/src/{modernize-502.spec.js → modernize-502.test.js} +12 -13
  365. package/src/multiple-subfield-0.js +3 -3
  366. package/src/{multiple-subfield-0.spec.js → multiple-subfield-0.test.js} +13 -13
  367. package/src/{non-breaking-space.spec.js → non-breaking-space.test.js} +12 -13
  368. package/src/normalize-dashes.js +2 -2
  369. package/src/{normalize-dashes.spec.js → normalize-dashes.test.js} +12 -13
  370. package/src/normalize-identifiers.js +1 -1
  371. package/src/{normalize-identifiers.spec.js → normalize-identifiers.test.js} +12 -13
  372. package/src/normalize-qualifying-information.js +2 -2
  373. package/src/{normalize-qualifying-information.spec.js → normalize-qualifying-information.test.js} +12 -13
  374. package/src/normalize-utf8-diacritics.js +2 -2
  375. package/src/{normalize-utf8-diacritics.spec.js → normalize-utf8-diacritics.test.js} +13 -13
  376. package/src/normalizeFieldForComparison.js +32 -6
  377. package/src/normalizeSubfieldValueForComparison.js +1 -1
  378. package/src/prepublicationUtils.js +4 -4
  379. package/src/punctuation/index.js +1 -1
  380. package/src/punctuation/rules/index.js +2 -2
  381. package/src/{punctuation.spec.js → punctuation.test.js} +12 -13
  382. package/src/punctuation2.js +17 -8
  383. package/src/{punctuation2.spec.js → punctuation2.test.js} +12 -13
  384. package/src/reindexSubfield6OccurenceNumbers.js +5 -7
  385. package/src/{reindexSubfield6OccurenceNumbers.spec.js → reindexSubfield6OccurenceNumbers.test.js} +12 -13
  386. package/src/removeDuplicateDataFields.js +11 -19
  387. package/src/{removeDuplicateDataFields.spec.js → removeDuplicateDataFields.test.js} +12 -13
  388. package/src/removeInferiorDataFields.js +15 -12
  389. package/src/{removeInferiorDataFields.spec.js → removeInferiorDataFields.test.js} +13 -13
  390. package/src/resolvable-ext-references-melinda.js +1 -1
  391. package/src/{resolvable-ext-references-melinda.spec.js → resolvable-ext-references-melinda.test.js} +42 -27
  392. package/src/resolveOrphanedSubfield6s.js +6 -6
  393. package/src/{resolveOrphanedSubfield6s.spec.js → resolveOrphanedSubfield6s.test.js} +13 -13
  394. package/src/sanitize-vocabulary-source-codes.js +4 -4
  395. package/src/{sanitize-vocabulary-source-codes.spec.js → sanitize-vocabulary-source-codes.test.js} +16 -14
  396. package/src/{sort-tags.spec.js → sort-tags.test.js} +9 -11
  397. package/src/sortFields.js +4 -4
  398. package/src/{sortFields.spec.js → sortFields.test.js} +12 -13
  399. package/src/sortRelatorTerms.js +3 -3
  400. package/src/{sortRelatorTerms.spec.js → sortRelatorTerms.test.js} +13 -13
  401. package/src/sortSubfields.js +8 -6
  402. package/src/{sortSubfields.spec.js → sortSubfields.test.js} +13 -13
  403. package/src/stripPunctuation.js +3 -3
  404. package/src/{stripPunctuation.spec.js → stripPunctuation.test.js} +13 -13
  405. package/src/subfield-exclusion.js +1 -1
  406. package/src/{subfield-exclusion.spec.js → subfield-exclusion.test.js} +45 -36
  407. package/src/subfield6Utils.js +6 -10
  408. package/src/subfield8Utils.js +4 -4
  409. package/src/subfieldValueNormalizations.js +3 -3
  410. package/src/{subfieldValueNormalizations.spec.js → subfieldValueNormalizations.test.js} +18 -14
  411. package/src/sync-007-and-300.js +2 -2
  412. package/src/{sync-007-and-300.spec.js → sync-007-and-300.test.js} +13 -13
  413. package/src/translate-terms.js +3 -3
  414. package/src/translate-terms.test.js +75 -0
  415. package/src/{typeOfDate-008.spec.js → typeOfDate-008.test.js} +12 -13
  416. package/src/{unicode-decomposition.spec.js → unicode-decomposition.test.js} +10 -16
  417. package/src/update-field-540.js +2 -2
  418. package/src/{update-field-540.spec.js → update-field-540.test.js} +13 -10
  419. package/src/urn.js +2 -2
  420. package/src/{urn.spec.js → urn.test.js} +12 -13
  421. package/src/utils.js +21 -5
  422. package/test-fixtures/field-505-separators/03/expectedResult.json +3 -1
  423. package/test-fixtures/field-505-separators/03/record.json +3 -0
  424. package/test-fixtures/indicator-fixes/10/expectedResult.json +11 -0
  425. package/test-fixtures/indicator-fixes/10/metadata.json +4 -0
  426. package/test-fixtures/indicator-fixes/10/record.json +11 -0
  427. package/test-fixtures/merge-fields/f05/expectedResult.json +24 -0
  428. package/test-fixtures/merge-fields/f05/metadata.json +6 -0
  429. package/test-fixtures/merge-fields/f05/record.json +30 -0
  430. package/test-fixtures/normalize-subfield-value/01/metadata.json +4 -1
  431. package/test-fixtures/normalize-subfield-value/01/record.json +3 -0
  432. package/test-fixtures/normalize-subfield-value/02/expectedResult.json +3 -1
  433. package/test-fixtures/normalize-subfield-value/02/metadata.json +2 -1
  434. package/test-fixtures/normalize-subfield-value/02/record.json +3 -0
  435. package/test-fixtures/remove-inferior-datafields/f16/expectedResult.json +12 -0
  436. package/test-fixtures/remove-inferior-datafields/f16/metadata.json +5 -0
  437. package/test-fixtures/remove-inferior-datafields/f16/record.json +14 -0
  438. package/test-fixtures/sanitize-vocabulary-source-codes/f03/expectedResult.json +3 -1
  439. package/test-fixtures/sanitize-vocabulary-source-codes/f04/expectedResult.json +3 -1
  440. package/test-fixtures/sanitize-vocabulary-source-codes/v04/metadata.json +1 -4
  441. package/test-fixtures/sanitize-vocabulary-source-codes/v04/record.json +1 -1
  442. package/test-fixtures/translate-terms-data.js +42 -0
  443. package/dist/access-rights.spec.js +0 -195
  444. package/dist/access-rights.spec.js.map +0 -1
  445. package/dist/addMissingField041.spec.js +0 -45
  446. package/dist/addMissingField041.spec.js.map +0 -1
  447. package/dist/addMissingField336.spec.js +0 -45
  448. package/dist/addMissingField336.spec.js.map +0 -1
  449. package/dist/addMissingField337.spec.js +0 -43
  450. package/dist/addMissingField337.spec.js.map +0 -1
  451. package/dist/addMissingField338.spec.js +0 -45
  452. package/dist/addMissingField338.spec.js.map +0 -1
  453. package/dist/cyrillux-usemarcon-replacement.spec.js +0 -45
  454. package/dist/cyrillux-usemarcon-replacement.spec.js.map +0 -1
  455. package/dist/cyrillux.spec.js +0 -46
  456. package/dist/cyrillux.spec.js.map +0 -1
  457. package/dist/disambiguateSeriesStatements.spec.js +0 -51
  458. package/dist/disambiguateSeriesStatements.spec.js.map +0 -1
  459. package/dist/double-commas.spec.js +0 -73
  460. package/dist/double-commas.spec.js.map +0 -1
  461. package/dist/duplicates-ind1.spec.js +0 -45
  462. package/dist/duplicates-ind1.spec.js.map +0 -1
  463. package/dist/empty-fields.spec.js +0 -118
  464. package/dist/empty-fields.spec.js.map +0 -1
  465. package/dist/ending-punctuation.spec.js +0 -2654
  466. package/dist/ending-punctuation.spec.js.map +0 -1
  467. package/dist/ending-whitespace.spec.js +0 -42
  468. package/dist/ending-whitespace.spec.js.map +0 -1
  469. package/dist/field-008-18-34-character-groups.spec.js +0 -51
  470. package/dist/field-008-18-34-character-groups.spec.js.map +0 -1
  471. package/dist/field-505-separators.spec.js +0 -51
  472. package/dist/field-505-separators.spec.js.map +0 -1
  473. package/dist/field-521-fix.spec.js +0 -51
  474. package/dist/field-521-fix.spec.js.map +0 -1
  475. package/dist/field-exclusion.spec.js +0 -1054
  476. package/dist/field-exclusion.spec.js.map +0 -1
  477. package/dist/field-structure.spec.js +0 -535
  478. package/dist/field-structure.spec.js.map +0 -1
  479. package/dist/fields-present.spec.js +0 -121
  480. package/dist/fields-present.spec.js.map +0 -1
  481. package/dist/fix-33X.spec.js +0 -45
  482. package/dist/fix-33X.spec.js.map +0 -1
  483. package/dist/fix-country-codes.spec.js +0 -51
  484. package/dist/fix-country-codes.spec.js.map +0 -1
  485. package/dist/fix-language-codes.spec.js +0 -44
  486. package/dist/fix-language-codes.spec.js.map +0 -1
  487. package/dist/fixRelatorTerms.spec.js +0 -51
  488. package/dist/fixRelatorTerms.spec.js.map +0 -1
  489. package/dist/fixed-fields.spec.js +0 -140
  490. package/dist/fixed-fields.spec.js.map +0 -1
  491. package/dist/identical-fields.spec.js +0 -99
  492. package/dist/identical-fields.spec.js.map +0 -1
  493. package/dist/indicator-fixes.spec.js +0 -51
  494. package/dist/indicator-fixes.spec.js.map +0 -1
  495. package/dist/isbn-issn.spec.js +0 -595
  496. package/dist/isbn-issn.spec.js.map +0 -1
  497. package/dist/item-language.spec.js +0 -306
  498. package/dist/item-language.spec.js.map +0 -1
  499. package/dist/melindaCustomMergeFields.json +0 -5120
  500. package/dist/merge-fields.spec.js +0 -51
  501. package/dist/merge-fields.spec.js.map +0 -1
  502. package/dist/mergeField500Lisapainokset.spec.js +0 -51
  503. package/dist/mergeField500Lisapainokset.spec.js.map +0 -1
  504. package/dist/mergeRelatorTermFields.spec.js +0 -51
  505. package/dist/mergeRelatorTermFields.spec.js.map +0 -1
  506. package/dist/modernize-502.spec.js +0 -49
  507. package/dist/modernize-502.spec.js.map +0 -1
  508. package/dist/multiple-subfield-0.spec.js +0 -51
  509. package/dist/multiple-subfield-0.spec.js.map +0 -1
  510. package/dist/non-breaking-space.spec.js +0 -42
  511. package/dist/non-breaking-space.spec.js.map +0 -1
  512. package/dist/normalize-dashes.spec.js +0 -51
  513. package/dist/normalize-dashes.spec.js.map +0 -1
  514. package/dist/normalize-identifiers.spec.js +0 -51
  515. package/dist/normalize-identifiers.spec.js.map +0 -1
  516. package/dist/normalize-qualifying-information.spec.js +0 -51
  517. package/dist/normalize-qualifying-information.spec.js.map +0 -1
  518. package/dist/normalize-utf8-diacritics.spec.js +0 -51
  519. package/dist/normalize-utf8-diacritics.spec.js.map +0 -1
  520. package/dist/punctuation.spec.js +0 -51
  521. package/dist/punctuation.spec.js.map +0 -1
  522. package/dist/punctuation2.spec.js +0 -51
  523. package/dist/punctuation2.spec.js.map +0 -1
  524. package/dist/reindexSubfield6OccurenceNumbers.spec.js +0 -51
  525. package/dist/reindexSubfield6OccurenceNumbers.spec.js.map +0 -1
  526. package/dist/removeDuplicateDataFields.spec.js +0 -51
  527. package/dist/removeDuplicateDataFields.spec.js.map +0 -1
  528. package/dist/removeInferiorDataFields.spec.js +0 -51
  529. package/dist/removeInferiorDataFields.spec.js.map +0 -1
  530. package/dist/resolvable-ext-references-melinda.spec.js +0 -166
  531. package/dist/resolvable-ext-references-melinda.spec.js.map +0 -1
  532. package/dist/resolveOrphanedSubfield6s.spec.js +0 -51
  533. package/dist/resolveOrphanedSubfield6s.spec.js.map +0 -1
  534. package/dist/sanitize-vocabulary-source-codes.spec.js +0 -51
  535. package/dist/sanitize-vocabulary-source-codes.spec.js.map +0 -1
  536. package/dist/sort-tags.spec.js +0 -207
  537. package/dist/sort-tags.spec.js.map +0 -1
  538. package/dist/sortFields.spec.js +0 -51
  539. package/dist/sortFields.spec.js.map +0 -1
  540. package/dist/sortRelatorTerms.spec.js +0 -51
  541. package/dist/sortRelatorTerms.spec.js.map +0 -1
  542. package/dist/sortSubfields.spec.js +0 -52
  543. package/dist/sortSubfields.spec.js.map +0 -1
  544. package/dist/stripPunctuation.spec.js +0 -51
  545. package/dist/stripPunctuation.spec.js.map +0 -1
  546. package/dist/subfield-exclusion.spec.js +0 -523
  547. package/dist/subfield-exclusion.spec.js.map +0 -1
  548. package/dist/subfieldValueNormalizations.spec.js +0 -51
  549. package/dist/subfieldValueNormalizations.spec.js.map +0 -1
  550. package/dist/sync-007-and-300.spec.js +0 -51
  551. package/dist/sync-007-and-300.spec.js.map +0 -1
  552. package/dist/translate-terms.spec.js +0 -51
  553. package/dist/translate-terms.spec.js.map +0 -1
  554. package/dist/typeOfDate-008.spec.js +0 -47
  555. package/dist/typeOfDate-008.spec.js.map +0 -1
  556. package/dist/unicode-decomposition.spec.js +0 -91
  557. package/dist/unicode-decomposition.spec.js.map +0 -1
  558. package/dist/update-field-540.spec.js +0 -51
  559. package/dist/update-field-540.spec.js.map +0 -1
  560. package/dist/urn.spec.js +0 -52
  561. package/dist/urn.spec.js.map +0 -1
  562. package/src/melindaCustomMergeFields.json +0 -5120
  563. package/src/translate-terms.spec.js +0 -52
@@ -1,76 +1,52 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.mergeOrAddSubfield = mergeOrAddSubfield;
7
- var _debug = _interopRequireDefault(require("debug"));
8
- var _normalizeFieldForComparison = require("../normalizeFieldForComparison.js");
9
- var _normalizeIdentifiers = require("../normalize-identifiers");
10
- var _utils = require("../utils.js");
11
- var _mergeSubfield = require("./mergeSubfield.js");
12
- var _sortSubfields = require("../sortSubfields");
13
- var _worldKnowledge = require("./worldKnowledge.js");
14
- var _subfield6Utils = require("../subfield6Utils.js");
15
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
16
- //'./sortSubfields.js';
17
-
18
- const debug = (0, _debug.default)('@natlibfi/melinda-marc-record-merge-reducers:mergeOrAddSubfield');
19
- //const debugData = debug.extend('data');
20
- const debugDev = debug.extend('dev');
1
+ import createDebugLogger from "debug";
2
+ import { cloneAndNormalizeFieldForComparison, isEnnakkotietoSubfieldG } from "../normalizeFieldForComparison.js";
3
+ import { normalizeAs, normalizeControlSubfieldValue } from "../normalize-identifiers.js";
4
+ import { fieldHasSubfield, fieldToString, isControlSubfieldCode, nvdebug, subfieldIsRepeatable, subfieldToString } from "../utils.js";
5
+ import { mergeSubfield } from "./mergeSubfield.js";
6
+ import { sortAdjacentSubfields } from "../sortSubfields.js";
7
+ import { valueCarriesMeaning } from "./worldKnowledge.js";
8
+ import { resetSubfield6Tag } from "../subfield6Utils.js";
9
+ const debug = createDebugLogger("@natlibfi/melinda-marc-record-merge-reducers:mergeOrAddSubfield");
10
+ const debugDev = debug.extend("dev");
21
11
  function catalogingSourceModifyingAgencyCandIsOriginalCatalogingSourceAgencyInTargetField(targetField, candSubfieldData) {
22
- if (targetField.tag !== '040' || candSubfieldData.code !== 'd') {
12
+ if (targetField.tag !== "040" || candSubfieldData.code !== "d") {
23
13
  return false;
24
14
  }
25
- (0, _utils.nvdebug)(`${(0, _utils.fieldToString)(targetField)} vs $d ${candSubfieldData.originalValue}}`, debugDev);
26
- // Add hard-coded exceptions here
27
- if (targetField.subfields.some(sf => sf.code === 'a' && sf.value === candSubfieldData.originalValue)) {
28
- (0, _utils.nvdebug)('040‡d matched 040‡a', debugDev);
15
+ nvdebug(`${fieldToString(targetField)} vs $d ${candSubfieldData.originalValue}}`, debugDev);
16
+ if (targetField.subfields.some((sf) => sf.code === "a" && sf.value === candSubfieldData.originalValue)) {
17
+ nvdebug("040\u2021d matched 040\u2021a", debugDev);
29
18
  return true;
30
19
  }
31
20
  return false;
32
21
  }
33
22
  function ennakkotietoInSubfieldG(candSubfieldData) {
34
- if ((0, _normalizeFieldForComparison.isEnnakkotietoSubfieldG)({
35
- 'code': candSubfieldData.code,
36
- 'value': candSubfieldData.originalValue
37
- })) {
38
- // Skip just ‡g subfield or the whole field?
39
- // We decided to skip just this subfield. We want at least $0 and maybe even more from ennakkotieto.
40
- debugDev(`Skip '‡g ${candSubfieldData.originalValue}'`);
23
+ if (isEnnakkotietoSubfieldG({ "code": candSubfieldData.code, "value": candSubfieldData.originalValue })) {
24
+ debugDev(`Skip '\u2021g ${candSubfieldData.originalValue}'`);
41
25
  return true;
42
26
  }
43
27
  return false;
44
28
  }
45
29
  function mergeOrAddSubfieldNotRequiredSpecialCases(targetField, candSubfieldData) {
46
- // Don't bring WHATEVER<KEEP> from source 7XX to base 1XX.
47
- // Exceptionally we can merge <KEEP>ed 7XX with un-<KEEP>ed 1XX as 1XX should not use <KEEP>s.
48
- if (targetField.tag.charAt(0) === '1' && candSubfieldData.tag.charAt(0) === '7' && candSubfieldData.code === '9' && candSubfieldData.originalValue.match(/<KEEP>/u)) {
30
+ if (targetField.tag.charAt(0) === "1" && candSubfieldData.tag.charAt(0) === "7" && candSubfieldData.code === "9" && candSubfieldData.originalValue.match(/<KEEP>/u)) {
49
31
  return true;
50
32
  }
51
-
52
- // Don't add 264$b 'Kustannuspaikka tuntematon' etc
53
- if (!(0, _worldKnowledge.valueCarriesMeaning)(targetField.tag, candSubfieldData.code, candSubfieldData.normalizedValue)) {
33
+ if (!valueCarriesMeaning(targetField.tag, candSubfieldData.code, candSubfieldData.normalizedValue)) {
54
34
  return true;
55
35
  }
56
-
57
- // Don't add $0 subfields that mean the same even if they look different:
58
- const alephIdentifierType = (0, _normalizeIdentifiers.normalizeAs)(targetField.tag, candSubfieldData.code);
59
- if (alephIdentifierType !== undefined) {
60
- const normalizedSubfieldValue = (0, _normalizeIdentifiers.normalizeControlSubfieldValue)(candSubfieldData.originalValue, alephIdentifierType);
61
- if (targetField.subfields.some(sf => (0, _normalizeIdentifiers.normalizeControlSubfieldValue)(sf.value) === normalizedSubfieldValue && sf.code === candSubfieldData.code)) {
36
+ const alephIdentifierType = normalizeAs(targetField.tag, candSubfieldData.code);
37
+ if (alephIdentifierType !== void 0) {
38
+ const normalizedSubfieldValue = normalizeControlSubfieldValue(candSubfieldData.originalValue, alephIdentifierType);
39
+ if (targetField.subfields.some((sf) => normalizeControlSubfieldValue(sf.value) === normalizedSubfieldValue && sf.code === candSubfieldData.code)) {
62
40
  return true;
63
41
  }
64
42
  }
65
43
  return false;
66
44
  }
67
45
  function skipNormalizedComparison(tag, subfieldCode, subfieldValue) {
68
- if (tag === '020' && subfieldCode === 'a') {
46
+ if (tag === "020" && subfieldCode === "a") {
69
47
  return true;
70
48
  }
71
- // Hackish: we want 'ntamo' to win 'Ntamo'...
72
- // If there are other similar excepting put them into an array.
73
- if (['110', '610', '710', '810'].includes(tag) && subfieldCode === 'a' && subfieldValue.substring(0, 5) === 'ntamo') {
49
+ if (["110", "610", "710", "810"].includes(tag) && subfieldCode === "a" && subfieldValue.substring(0, 5) === "ntamo") {
74
50
  return true;
75
51
  }
76
52
  return false;
@@ -82,123 +58,105 @@ function mergeOrAddSubfieldNotRequired(targetField, candSubfieldData) {
82
58
  if (mergeOrAddSubfieldNotRequiredSpecialCases(targetField, candSubfieldData)) {
83
59
  return true;
84
60
  }
85
- const relevantTargetSubfields = targetField.subfields.filter(sf => sf.code === candSubfieldData.code);
86
- // Target field does not have this subfield yet:
61
+ const relevantTargetSubfields = targetField.subfields.filter((sf) => sf.code === candSubfieldData.code);
87
62
  if (relevantTargetSubfields.length === 0) {
88
63
  return false;
89
64
  }
90
- (0, _utils.nvdebug)(` Look for identical subfields in '${(0, _utils.fieldToString)(targetField)}' using`, debugDev);
91
- (0, _utils.nvdebug)(` ORIG. ‡${candSubfieldData.code} ${candSubfieldData.originalValue}`, debugDev);
92
- (0, _utils.nvdebug)(` NO-PUNC ‡${candSubfieldData.code} ${candSubfieldData.punctuationlessValue}`, debugDev);
93
- if (relevantTargetSubfields.some(sf => sf.code === candSubfieldData.code && sf.value === candSubfieldData.originalValue)) {
65
+ nvdebug(` Look for identical subfields in '${fieldToString(targetField)}' using`, debugDev);
66
+ nvdebug(` ORIG. \u2021${candSubfieldData.code} ${candSubfieldData.originalValue}`, debugDev);
67
+ nvdebug(` NO-PUNC \u2021${candSubfieldData.code} ${candSubfieldData.punctuationlessValue}`, debugDev);
68
+ if (relevantTargetSubfields.some((sf) => sf.code === candSubfieldData.code && sf.value === candSubfieldData.originalValue)) {
94
69
  return true;
95
70
  }
96
- if (relevantTargetSubfields.some(sf => sf.code === candSubfieldData.code && sf.value === candSubfieldData.punctuationlessValue)) {
71
+ if (relevantTargetSubfields.some((sf) => sf.code === candSubfieldData.code && sf.value === candSubfieldData.punctuationlessValue)) {
97
72
  return true;
98
73
  }
99
74
  if (!skipNormalizedComparison(targetField.tag, candSubfieldData.code, candSubfieldData.originalValue)) {
100
- const normalizedTargetField = (0, _normalizeFieldForComparison.cloneAndNormalizeFieldForComparison)(targetField);
101
- (0, _utils.nvdebug)(` Look for identical normalized subfields in '${(0, _utils.fieldToString)(normalizedTargetField)}'`, debugDev);
102
- (0, _utils.nvdebug)(` NO-PUNC ‡${candSubfieldData.code} ${candSubfieldData.normalizedValue})`, debugDev);
103
- if (normalizedTargetField.subfields.some(sf => sf.code === candSubfieldData.code && sf.value === candSubfieldData.normalizedValue)) {
104
- // Subfield with identical normalized value exists. Do nothing.
105
- // Not ideal 382‡n subfields, I guess... Nor 505‡trg repetitions... These need to be fixed...
75
+ const normalizedTargetField = cloneAndNormalizeFieldForComparison(targetField);
76
+ nvdebug(` Look for identical normalized subfields in '${fieldToString(normalizedTargetField)}'`, debugDev);
77
+ nvdebug(` NO-PUNC \u2021${candSubfieldData.code} ${candSubfieldData.normalizedValue})`, debugDev);
78
+ if (normalizedTargetField.subfields.some((sf) => sf.code === candSubfieldData.code && sf.value === candSubfieldData.normalizedValue)) {
106
79
  return true;
107
80
  }
108
81
  }
109
- return false; // (note that this is a double negation: not required is false)
82
+ return false;
110
83
  }
111
84
  function addSubfield(targetField, candSubfield) {
112
- (0, _utils.nvdebug)(` Added subfield '${(0, _utils.subfieldToString)(candSubfield)}' to field`, debugDev);
113
- // Add subfield to the end of all subfields. NB! Implement a separate function that does this + subfield reordering somehow...
85
+ nvdebug(` Added subfield '${subfieldToString(candSubfield)}' to field`, debugDev);
114
86
  targetField.subfields.push(candSubfield);
115
87
  targetField.merged = 1;
116
88
  setPunctuationFlag(targetField, candSubfield);
117
- (0, _sortSubfields.sortAdjacentSubfields)(targetField);
89
+ sortAdjacentSubfields(targetField);
118
90
  }
119
91
  function setPunctuationFlag(field, addedSubfield) {
120
- if ((0, _utils.isControlSubfieldCode)(addedSubfield.code)) {
121
- // These are never punctuation related
92
+ if (isControlSubfieldCode(addedSubfield.code)) {
122
93
  return;
123
94
  }
124
95
  field.useExternalEndPunctuation = 1;
125
96
  }
126
97
  function resetPaired880(candFieldPair880, targetField, punctlessCandSubfield) {
127
- // No relevant:
128
- if (punctlessCandSubfield.code !== '6') {
98
+ if (punctlessCandSubfield.code !== "6") {
129
99
  return;
130
100
  }
131
- if (targetField.tag === '880') {
101
+ if (targetField.tag === "880") {
132
102
  return;
133
103
  }
134
- // NB! $6 comes first:
135
- if (candFieldPair880 === undefined || !candFieldPair880.subfields || candFieldPair880.subfields[0].code !== '6') {
104
+ if (candFieldPair880 === void 0 || !candFieldPair880.subfields || candFieldPair880.subfields[0].code !== "6") {
136
105
  return;
137
106
  }
138
- (0, _utils.nvdebug)(`880 contents: ${(0, _utils.fieldToString)(candFieldPair880)}`, debugDev);
139
- (0, _subfield6Utils.resetSubfield6Tag)(candFieldPair880.subfields[0], targetField.tag);
107
+ nvdebug(`880 contents: ${fieldToString(candFieldPair880)}`, debugDev);
108
+ resetSubfield6Tag(candFieldPair880.subfields[0], targetField.tag);
140
109
  }
141
- function mergeOrAddSubfield(targetField, candSubfieldData, candFieldPairs880 = []) {
110
+ export function mergeOrAddSubfield(targetField, candSubfieldData, candFieldPairs880 = []) {
142
111
  const candSubfieldAsString = `${candSubfieldData.code} ${candSubfieldData.originalValue}`;
143
- (0, _utils.nvdebug)(` Q: mergeOrAddSubfield '${candSubfieldAsString}'\n with field '${(0, _utils.fieldToString)(targetField)}'?`, debugDev);
112
+ nvdebug(` Q: mergeOrAddSubfield '${candSubfieldAsString}'
113
+ with field '${fieldToString(targetField)}'?`, debugDev);
144
114
  if (mergeOrAddSubfieldNotRequired(targetField, candSubfieldData)) {
145
- (0, _utils.nvdebug)(` A: No. No need to merge nor to add the subfield '${candSubfieldAsString}'`, debugDev);
115
+ nvdebug(` A: No. No need to merge nor to add the subfield '${candSubfieldAsString}'`, debugDev);
146
116
  return;
147
117
  }
148
- const candSubfield = {
149
- 'code': candSubfieldData.code,
150
- 'value': candSubfieldData.punctuationlessValue
151
- };
152
-
153
- // Currently only for X00$d 1984- => 1984-2000 type of changes, where source version is better that what base has.
154
- // It all other cases the original subfield is kept.
155
- const original = (0, _utils.fieldToString)(targetField);
156
- if ((0, _mergeSubfield.mergeSubfield)(targetField, candSubfield)) {
157
- // We might need the normalizedCandSubfield later on
118
+ const candSubfield = { "code": candSubfieldData.code, "value": candSubfieldData.punctuationlessValue };
119
+ const original = fieldToString(targetField);
120
+ if (mergeSubfield(targetField, candSubfield)) {
158
121
  mergeSubfieldPostprocessor();
159
122
  return;
160
123
  }
161
-
162
- // Subfield codes missing from the original record can be added by default:
163
124
  if (addSubfieldWithPreviouslyUnseenSubfieldCode()) {
164
125
  return;
165
126
  }
166
-
167
- // melindaCustomMergeFields.json tells us whether the subfield is repeatable or not:
168
- if ((0, _utils.subfieldIsRepeatable)(targetField.tag, candSubfield.code)) {
169
- // We don't want to add multiple, say, 260$c
170
- if (['260', '264'].includes(targetField.tag)) {
171
- (0, _utils.nvdebug)(` A: Exceptionally skip repeatable existing subfield '${(0, _utils.subfieldToString)(candSubfield)}'`, debugDev);
127
+ if (subfieldIsRepeatable(targetField.tag, candSubfield.code)) {
128
+ if (["260", "264"].includes(targetField.tag)) {
129
+ nvdebug(` A: Exceptionally skip repeatable existing subfield '${subfieldToString(candSubfield)}'`, debugDev);
172
130
  return;
173
131
  }
174
- (0, _utils.nvdebug)(` A: Yes. Add repeatable subfield '${(0, _utils.subfieldToString)(candSubfield)}'`, debugDev);
132
+ nvdebug(` A: Yes. Add repeatable subfield '${subfieldToString(candSubfield)}'`, debugDev);
175
133
  targetField.merged = 1;
176
134
  setPunctuationFlag(targetField, candSubfield);
177
135
  addSubfield(targetField, candSubfield);
178
136
  return;
179
137
  }
180
- (0, _utils.nvdebug)(` A: No. Non-repeatable subfield '${(0, _utils.subfieldToString)(candSubfield)}'`, debugDev);
138
+ nvdebug(` A: No. Non-repeatable subfield '${subfieldToString(candSubfield)}'`, debugDev);
181
139
  return;
182
140
  function mergeSubfieldPostprocessor() {
183
- if (original !== (0, _utils.fieldToString)(targetField)) {
184
- (0, _utils.nvdebug)(` A: Merge. Subfield '${candSubfieldAsString}' replaces the original subfield.`, debugDev);
141
+ if (original !== fieldToString(targetField)) {
142
+ nvdebug(` A: Merge. Subfield '${candSubfieldAsString}' replaces the original subfield.`, debugDev);
185
143
  targetField.merged = 1;
186
144
  setPunctuationFlag(targetField, candSubfield);
187
145
  return;
188
146
  }
189
- (0, _utils.nvdebug)(` A: No. Field ${original} already had the same or a synonymous or a better merge candidate than our subfield '${candSubfieldAsString}'.`, debugDev);
147
+ nvdebug(` A: No. Field ${original} already had the same or a synonymous or a better merge candidate than our subfield '${candSubfieldAsString}'.`, debugDev);
190
148
  return;
191
149
  }
192
150
  function addSubfieldWithPreviouslyUnseenSubfieldCode() {
193
- if (!(0, _utils.fieldHasSubfield)(targetField, candSubfield.code)) {
194
- (0, _utils.nvdebug)(` A: Yes. Add previously unseen subfield '${(0, _utils.subfieldToString)(candSubfield)}'`, debugDev);
151
+ if (!fieldHasSubfield(targetField, candSubfield.code)) {
152
+ nvdebug(` A: Yes. Add previously unseen subfield '${subfieldToString(candSubfield)}'`, debugDev);
195
153
  targetField.merged = 1;
196
154
  setPunctuationFlag(targetField, candSubfield);
197
- candFieldPairs880.forEach(pair => resetPaired880(pair, targetField, candSubfield));
155
+ candFieldPairs880.forEach((pair) => resetPaired880(pair, targetField, candSubfield));
198
156
  addSubfield(targetField, candSubfield);
199
157
  return true;
200
158
  }
201
159
  return false;
202
160
  }
203
161
  }
204
- //# sourceMappingURL=mergeOrAddSubfield.js.map
162
+ //# sourceMappingURL=mergeOrAddSubfield.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"mergeOrAddSubfield.js","names":["_debug","_interopRequireDefault","require","_normalizeFieldForComparison","_normalizeIdentifiers","_utils","_mergeSubfield","_sortSubfields","_worldKnowledge","_subfield6Utils","e","__esModule","default","debug","createDebugLogger","debugDev","extend","catalogingSourceModifyingAgencyCandIsOriginalCatalogingSourceAgencyInTargetField","targetField","candSubfieldData","tag","code","nvdebug","fieldToString","originalValue","subfields","some","sf","value","ennakkotietoInSubfieldG","isEnnakkotietoSubfieldG","mergeOrAddSubfieldNotRequiredSpecialCases","charAt","match","valueCarriesMeaning","normalizedValue","alephIdentifierType","normalizeAs","undefined","normalizedSubfieldValue","normalizeControlSubfieldValue","skipNormalizedComparison","subfieldCode","subfieldValue","includes","substring","mergeOrAddSubfieldNotRequired","relevantTargetSubfields","filter","length","punctuationlessValue","normalizedTargetField","cloneAndNormalizeFieldForComparison","addSubfield","candSubfield","subfieldToString","push","merged","setPunctuationFlag","sortAdjacentSubfields","field","addedSubfield","isControlSubfieldCode","useExternalEndPunctuation","resetPaired880","candFieldPair880","punctlessCandSubfield","resetSubfield6Tag","mergeOrAddSubfield","candFieldPairs880","candSubfieldAsString","original","mergeSubfield","mergeSubfieldPostprocessor","addSubfieldWithPreviouslyUnseenSubfieldCode","subfieldIsRepeatable","fieldHasSubfield","forEach","pair"],"sources":["../../src/merge-fields/mergeOrAddSubfield.js"],"sourcesContent":["import createDebugLogger from 'debug';\nimport {cloneAndNormalizeFieldForComparison, isEnnakkotietoSubfieldG} from '../normalizeFieldForComparison.js';\nimport {normalizeAs, normalizeControlSubfieldValue} from '../normalize-identifiers';\nimport {fieldHasSubfield, fieldToString, isControlSubfieldCode, nvdebug, subfieldIsRepeatable, subfieldToString} from '../utils.js';\nimport {mergeSubfield} from './mergeSubfield.js';\nimport {sortAdjacentSubfields} from '../sortSubfields'; //'./sortSubfields.js';\n\nimport {valueCarriesMeaning} from './worldKnowledge.js';\nimport {resetSubfield6Tag} from '../subfield6Utils.js';\n\nconst debug = createDebugLogger('@natlibfi/melinda-marc-record-merge-reducers:mergeOrAddSubfield');\n//const debugData = debug.extend('data');\nconst debugDev = debug.extend('dev');\n\nfunction catalogingSourceModifyingAgencyCandIsOriginalCatalogingSourceAgencyInTargetField(targetField, candSubfieldData) {\n if (targetField.tag !== '040' || candSubfieldData.code !== 'd') {\n return false;\n }\n nvdebug(`${fieldToString(targetField)} vs $d ${candSubfieldData.originalValue}}`, debugDev);\n // Add hard-coded exceptions here\n if (targetField.subfields.some(sf => sf.code === 'a' && sf.value === candSubfieldData.originalValue)) {\n nvdebug('040‡d matched 040‡a', debugDev);\n return true;\n }\n return false;\n}\n\nfunction ennakkotietoInSubfieldG(candSubfieldData) {\n if (isEnnakkotietoSubfieldG({'code': candSubfieldData.code, 'value': candSubfieldData.originalValue})) {\n // Skip just ‡g subfield or the whole field?\n // We decided to skip just this subfield. We want at least $0 and maybe even more from ennakkotieto.\n debugDev(`Skip '‡g ${candSubfieldData.originalValue}'`);\n return true;\n }\n return false;\n}\n\n\nfunction mergeOrAddSubfieldNotRequiredSpecialCases(targetField, candSubfieldData) {\n\n // Don't bring WHATEVER<KEEP> from source 7XX to base 1XX.\n // Exceptionally we can merge <KEEP>ed 7XX with un-<KEEP>ed 1XX as 1XX should not use <KEEP>s.\n if (targetField.tag.charAt(0) === '1' && candSubfieldData.tag.charAt(0) === '7' && candSubfieldData.code === '9' && candSubfieldData.originalValue.match(/<KEEP>/u)) {\n return true;\n }\n\n // Don't add 264$b 'Kustannuspaikka tuntematon' etc\n if (!valueCarriesMeaning(targetField.tag, candSubfieldData.code, candSubfieldData.normalizedValue)) {\n return true;\n }\n\n\n // Don't add $0 subfields that mean the same even if they look different:\n const alephIdentifierType = normalizeAs(targetField.tag, candSubfieldData.code);\n if (alephIdentifierType !== undefined) {\n const normalizedSubfieldValue = normalizeControlSubfieldValue(candSubfieldData.originalValue, alephIdentifierType);\n if (targetField.subfields.some(sf => normalizeControlSubfieldValue(sf.value) === normalizedSubfieldValue && sf.code === candSubfieldData.code)) {\n return true;\n }\n }\n return false;\n}\n\n\nfunction skipNormalizedComparison(tag, subfieldCode, subfieldValue) {\n if (tag === '020' && subfieldCode === 'a') {\n return true;\n }\n // Hackish: we want 'ntamo' to win 'Ntamo'...\n // If there are other similar excepting put them into an array.\n if (['110', '610', '710', '810'].includes(tag) && subfieldCode === 'a' && subfieldValue.substring(0, 5) === 'ntamo') {\n return true;\n }\n return false;\n}\n\nfunction mergeOrAddSubfieldNotRequired(targetField, candSubfieldData) {\n if (catalogingSourceModifyingAgencyCandIsOriginalCatalogingSourceAgencyInTargetField(targetField, candSubfieldData) || ennakkotietoInSubfieldG(candSubfieldData)) {\n return true;\n }\n\n if (mergeOrAddSubfieldNotRequiredSpecialCases(targetField, candSubfieldData)) {\n return true;\n }\n\n const relevantTargetSubfields = targetField.subfields.filter(sf => sf.code === candSubfieldData.code);\n // Target field does not have this subfield yet:\n if (relevantTargetSubfields.length === 0) {\n return false;\n }\n nvdebug(` Look for identical subfields in '${fieldToString(targetField)}' using`, debugDev);\n nvdebug(` ORIG. ‡${candSubfieldData.code} ${candSubfieldData.originalValue}`, debugDev);\n nvdebug(` NO-PUNC ‡${candSubfieldData.code} ${candSubfieldData.punctuationlessValue}`, debugDev);\n if (relevantTargetSubfields.some(sf => sf.code === candSubfieldData.code && sf.value === candSubfieldData.originalValue)) {\n return true;\n }\n if (relevantTargetSubfields.some(sf => sf.code === candSubfieldData.code && sf.value === candSubfieldData.punctuationlessValue)) {\n return true;\n }\n\n if (!skipNormalizedComparison(targetField.tag, candSubfieldData.code, candSubfieldData.originalValue)) {\n const normalizedTargetField = cloneAndNormalizeFieldForComparison(targetField);\n nvdebug(` Look for identical normalized subfields in '${fieldToString(normalizedTargetField)}'`, debugDev);\n nvdebug(` NO-PUNC ‡${candSubfieldData.code} ${candSubfieldData.normalizedValue})`, debugDev);\n\n if (normalizedTargetField.subfields.some(sf => sf.code === candSubfieldData.code && sf.value === candSubfieldData.normalizedValue)) {\n // Subfield with identical normalized value exists. Do nothing.\n // Not ideal 382‡n subfields, I guess... Nor 505‡trg repetitions... These need to be fixed...\n return true;\n }\n }\n\n return false; // (note that this is a double negation: not required is false)\n}\n\nfunction addSubfield(targetField, candSubfield) {\n nvdebug(` Added subfield '${subfieldToString(candSubfield)}' to field`, debugDev);\n // Add subfield to the end of all subfields. NB! Implement a separate function that does this + subfield reordering somehow...\n targetField.subfields.push(candSubfield);\n\n targetField.merged = 1;\n\n setPunctuationFlag(targetField, candSubfield);\n sortAdjacentSubfields(targetField);\n\n}\n\nfunction setPunctuationFlag(field, addedSubfield) {\n if (isControlSubfieldCode(addedSubfield.code)) { // These are never punctuation related\n return;\n }\n field.useExternalEndPunctuation = 1;\n}\n\n\nfunction resetPaired880(candFieldPair880, targetField, punctlessCandSubfield) {\n // No relevant:\n if (punctlessCandSubfield.code !== '6') {\n return;\n }\n if (targetField.tag === '880') {\n return;\n }\n // NB! $6 comes first:\n if (candFieldPair880 === undefined || !candFieldPair880.subfields || candFieldPair880.subfields[0].code !== '6') {\n return;\n\n }\n nvdebug(`880 contents: ${fieldToString(candFieldPair880)}`, debugDev);\n resetSubfield6Tag(candFieldPair880.subfields[0], targetField.tag);\n}\n\nexport function mergeOrAddSubfield(targetField, candSubfieldData, candFieldPairs880 = []) {\n\n const candSubfieldAsString = `${candSubfieldData.code} ${candSubfieldData.originalValue}`;\n\n nvdebug(` Q: mergeOrAddSubfield '${candSubfieldAsString}'\\n with field '${fieldToString(targetField)}'?`, debugDev);\n if (mergeOrAddSubfieldNotRequired(targetField, candSubfieldData)) {\n nvdebug(` A: No. No need to merge nor to add the subfield '${candSubfieldAsString}'`, debugDev);\n return;\n }\n\n const candSubfield = {'code': candSubfieldData.code, 'value': candSubfieldData.punctuationlessValue};\n\n // Currently only for X00$d 1984- => 1984-2000 type of changes, where source version is better that what base has.\n // It all other cases the original subfield is kept.\n const original = fieldToString(targetField);\n\n if (mergeSubfield(targetField, candSubfield)) { // We might need the normalizedCandSubfield later on\n mergeSubfieldPostprocessor();\n return;\n }\n\n // Subfield codes missing from the original record can be added by default:\n if (addSubfieldWithPreviouslyUnseenSubfieldCode()) {\n return;\n }\n\n // melindaCustomMergeFields.json tells us whether the subfield is repeatable or not:\n if (subfieldIsRepeatable(targetField.tag, candSubfield.code)) {\n // We don't want to add multiple, say, 260$c\n if (['260', '264'].includes(targetField.tag)) {\n nvdebug(` A: Exceptionally skip repeatable existing subfield '${subfieldToString(candSubfield)}'`, debugDev);\n return;\n }\n nvdebug(` A: Yes. Add repeatable subfield '${subfieldToString(candSubfield)}'`, debugDev);\n targetField.merged = 1;\n setPunctuationFlag(targetField, candSubfield);\n addSubfield(targetField, candSubfield);\n return;\n }\n\n nvdebug(` A: No. Non-repeatable subfield '${subfieldToString(candSubfield)}'`, debugDev);\n return;\n\n function mergeSubfieldPostprocessor() {\n if (original !== fieldToString(targetField)) {\n nvdebug(` A: Merge. Subfield '${candSubfieldAsString}' replaces the original subfield.`, debugDev);\n targetField.merged = 1;\n setPunctuationFlag(targetField, candSubfield);\n return;\n }\n nvdebug(` A: No. Field ${original} already had the same or a synonymous or a better merge candidate than our subfield '${candSubfieldAsString}'.`, debugDev);\n return;\n }\n\n function addSubfieldWithPreviouslyUnseenSubfieldCode() {\n if (!fieldHasSubfield(targetField, candSubfield.code)) {\n nvdebug(` A: Yes. Add previously unseen subfield '${subfieldToString(candSubfield)}'`, debugDev);\n targetField.merged = 1;\n setPunctuationFlag(targetField, candSubfield);\n candFieldPairs880.forEach(pair => resetPaired880(pair, targetField, candSubfield));\n addSubfield(targetField, candSubfield);\n return true;\n }\n return false;\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,4BAAA,GAAAD,OAAA;AACA,IAAAE,qBAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AACA,IAAAI,cAAA,GAAAJ,OAAA;AACA,IAAAK,cAAA,GAAAL,OAAA;AAEA,IAAAM,eAAA,GAAAN,OAAA;AACA,IAAAO,eAAA,GAAAP,OAAA;AAAuD,SAAAD,uBAAAS,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAHC;;AAKxD,MAAMG,KAAK,GAAG,IAAAC,cAAiB,EAAC,iEAAiE,CAAC;AAClG;AACA,MAAMC,QAAQ,GAAGF,KAAK,CAACG,MAAM,CAAC,KAAK,CAAC;AAEpC,SAASC,gFAAgFA,CAACC,WAAW,EAAEC,gBAAgB,EAAE;EACvH,IAAID,WAAW,CAACE,GAAG,KAAK,KAAK,IAAID,gBAAgB,CAACE,IAAI,KAAK,GAAG,EAAE;IAC9D,OAAO,KAAK;EACd;EACA,IAAAC,cAAO,EAAC,GAAG,IAAAC,oBAAa,EAACL,WAAW,CAAC,UAAUC,gBAAgB,CAACK,aAAa,GAAG,EAAET,QAAQ,CAAC;EAC3F;EACA,IAAIG,WAAW,CAACO,SAAS,CAACC,IAAI,CAACC,EAAE,IAAIA,EAAE,CAACN,IAAI,KAAK,GAAG,IAAIM,EAAE,CAACC,KAAK,KAAKT,gBAAgB,CAACK,aAAa,CAAC,EAAE;IACpG,IAAAF,cAAO,EAAC,qBAAqB,EAAEP,QAAQ,CAAC;IACxC,OAAO,IAAI;EACb;EACA,OAAO,KAAK;AACd;AAEA,SAASc,uBAAuBA,CAACV,gBAAgB,EAAE;EACjD,IAAI,IAAAW,oDAAuB,EAAC;IAAC,MAAM,EAAEX,gBAAgB,CAACE,IAAI;IAAE,OAAO,EAAEF,gBAAgB,CAACK;EAAa,CAAC,CAAC,EAAE;IACrG;IACA;IACAT,QAAQ,CAAC,YAAYI,gBAAgB,CAACK,aAAa,GAAG,CAAC;IACvD,OAAO,IAAI;EACb;EACA,OAAO,KAAK;AACd;AAGA,SAASO,yCAAyCA,CAACb,WAAW,EAAEC,gBAAgB,EAAE;EAEhF;EACA;EACA,IAAID,WAAW,CAACE,GAAG,CAACY,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,IAAIb,gBAAgB,CAACC,GAAG,CAACY,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,IAAIb,gBAAgB,CAACE,IAAI,KAAK,GAAG,IAAIF,gBAAgB,CAACK,aAAa,CAACS,KAAK,CAAC,SAAS,CAAC,EAAE;IACnK,OAAO,IAAI;EACb;;EAEA;EACA,IAAI,CAAC,IAAAC,mCAAmB,EAAChB,WAAW,CAACE,GAAG,EAAED,gBAAgB,CAACE,IAAI,EAAEF,gBAAgB,CAACgB,eAAe,CAAC,EAAE;IAClG,OAAO,IAAI;EACb;;EAGA;EACA,MAAMC,mBAAmB,GAAG,IAAAC,iCAAW,EAACnB,WAAW,CAACE,GAAG,EAAED,gBAAgB,CAACE,IAAI,CAAC;EAC/E,IAAIe,mBAAmB,KAAKE,SAAS,EAAE;IACrC,MAAMC,uBAAuB,GAAG,IAAAC,mDAA6B,EAACrB,gBAAgB,CAACK,aAAa,EAAEY,mBAAmB,CAAC;IAClH,IAAIlB,WAAW,CAACO,SAAS,CAACC,IAAI,CAACC,EAAE,IAAI,IAAAa,mDAA6B,EAACb,EAAE,CAACC,KAAK,CAAC,KAAKW,uBAAuB,IAAIZ,EAAE,CAACN,IAAI,KAAKF,gBAAgB,CAACE,IAAI,CAAC,EAAE;MAC9I,OAAO,IAAI;IACb;EACF;EACA,OAAO,KAAK;AACd;AAGA,SAASoB,wBAAwBA,CAACrB,GAAG,EAAEsB,YAAY,EAAEC,aAAa,EAAE;EAClE,IAAIvB,GAAG,KAAK,KAAK,IAAIsB,YAAY,KAAK,GAAG,EAAE;IACzC,OAAO,IAAI;EACb;EACA;EACA;EACA,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAACE,QAAQ,CAACxB,GAAG,CAAC,IAAIsB,YAAY,KAAK,GAAG,IAAIC,aAAa,CAACE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,EAAE;IACnH,OAAO,IAAI;EACb;EACA,OAAO,KAAK;AACd;AAEA,SAASC,6BAA6BA,CAAC5B,WAAW,EAAEC,gBAAgB,EAAE;EACpE,IAAIF,gFAAgF,CAACC,WAAW,EAAEC,gBAAgB,CAAC,IAAIU,uBAAuB,CAACV,gBAAgB,CAAC,EAAE;IAChK,OAAO,IAAI;EACb;EAEA,IAAIY,yCAAyC,CAACb,WAAW,EAAEC,gBAAgB,CAAC,EAAE;IAC5E,OAAO,IAAI;EACb;EAEA,MAAM4B,uBAAuB,GAAG7B,WAAW,CAACO,SAAS,CAACuB,MAAM,CAACrB,EAAE,IAAIA,EAAE,CAACN,IAAI,KAAKF,gBAAgB,CAACE,IAAI,CAAC;EACrG;EACA,IAAI0B,uBAAuB,CAACE,MAAM,KAAK,CAAC,EAAE;IACxC,OAAO,KAAK;EACd;EACA,IAAA3B,cAAO,EAAC,yCAAyC,IAAAC,oBAAa,EAACL,WAAW,CAAC,SAAS,EAAEH,QAAQ,CAAC;EAC/F,IAAAO,cAAO,EAAC,mBAAmBH,gBAAgB,CAACE,IAAI,IAAIF,gBAAgB,CAACK,aAAa,EAAE,EAAET,QAAQ,CAAC;EAC/F,IAAAO,cAAO,EAAC,mBAAmBH,gBAAgB,CAACE,IAAI,IAAIF,gBAAgB,CAAC+B,oBAAoB,EAAE,EAAEnC,QAAQ,CAAC;EACtG,IAAIgC,uBAAuB,CAACrB,IAAI,CAACC,EAAE,IAAIA,EAAE,CAACN,IAAI,KAAKF,gBAAgB,CAACE,IAAI,IAAIM,EAAE,CAACC,KAAK,KAAKT,gBAAgB,CAACK,aAAa,CAAC,EAAE;IACxH,OAAO,IAAI;EACb;EACA,IAAIuB,uBAAuB,CAACrB,IAAI,CAACC,EAAE,IAAIA,EAAE,CAACN,IAAI,KAAKF,gBAAgB,CAACE,IAAI,IAAIM,EAAE,CAACC,KAAK,KAAKT,gBAAgB,CAAC+B,oBAAoB,CAAC,EAAE;IAC/H,OAAO,IAAI;EACb;EAEA,IAAI,CAACT,wBAAwB,CAACvB,WAAW,CAACE,GAAG,EAAED,gBAAgB,CAACE,IAAI,EAAEF,gBAAgB,CAACK,aAAa,CAAC,EAAE;IACrG,MAAM2B,qBAAqB,GAAG,IAAAC,gEAAmC,EAAClC,WAAW,CAAC;IAC9E,IAAAI,cAAO,EAAC,oDAAoD,IAAAC,oBAAa,EAAC4B,qBAAqB,CAAC,GAAG,EAAEpC,QAAQ,CAAC;IAC9G,IAAAO,cAAO,EAAC,kBAAkBH,gBAAgB,CAACE,IAAI,IAAIF,gBAAgB,CAACgB,eAAe,GAAG,EAAEpB,QAAQ,CAAC;IAEjG,IAAIoC,qBAAqB,CAAC1B,SAAS,CAACC,IAAI,CAACC,EAAE,IAAIA,EAAE,CAACN,IAAI,KAAKF,gBAAgB,CAACE,IAAI,IAAIM,EAAE,CAACC,KAAK,KAAKT,gBAAgB,CAACgB,eAAe,CAAC,EAAE;MAClI;MACA;MACA,OAAO,IAAI;IACb;EACF;EAEA,OAAO,KAAK,CAAC,CAAC;AAChB;AAEA,SAASkB,WAAWA,CAACnC,WAAW,EAAEoC,YAAY,EAAE;EAC9C,IAAAhC,cAAO,EAAC,oBAAoB,IAAAiC,uBAAgB,EAACD,YAAY,CAAC,YAAY,EAAEvC,QAAQ,CAAC;EACjF;EACAG,WAAW,CAACO,SAAS,CAAC+B,IAAI,CAACF,YAAY,CAAC;EAExCpC,WAAW,CAACuC,MAAM,GAAG,CAAC;EAEtBC,kBAAkB,CAACxC,WAAW,EAAEoC,YAAY,CAAC;EAC7C,IAAAK,oCAAqB,EAACzC,WAAW,CAAC;AAEpC;AAEA,SAASwC,kBAAkBA,CAACE,KAAK,EAAEC,aAAa,EAAE;EAChD,IAAI,IAAAC,4BAAqB,EAACD,aAAa,CAACxC,IAAI,CAAC,EAAE;IAAE;IAC/C;EACF;EACAuC,KAAK,CAACG,yBAAyB,GAAG,CAAC;AACrC;AAGA,SAASC,cAAcA,CAACC,gBAAgB,EAAE/C,WAAW,EAAEgD,qBAAqB,EAAE;EAC5E;EACA,IAAIA,qBAAqB,CAAC7C,IAAI,KAAK,GAAG,EAAE;IACtC;EACF;EACA,IAAIH,WAAW,CAACE,GAAG,KAAK,KAAK,EAAE;IAC7B;EACF;EACA;EACA,IAAI6C,gBAAgB,KAAK3B,SAAS,IAAI,CAAC2B,gBAAgB,CAACxC,SAAS,IAAIwC,gBAAgB,CAACxC,SAAS,CAAC,CAAC,CAAC,CAACJ,IAAI,KAAK,GAAG,EAAE;IAC/G;EAEF;EACA,IAAAC,cAAO,EAAC,iBAAiB,IAAAC,oBAAa,EAAC0C,gBAAgB,CAAC,EAAE,EAAElD,QAAQ,CAAC;EACrE,IAAAoD,iCAAiB,EAACF,gBAAgB,CAACxC,SAAS,CAAC,CAAC,CAAC,EAAEP,WAAW,CAACE,GAAG,CAAC;AACnE;AAEO,SAASgD,kBAAkBA,CAAClD,WAAW,EAAEC,gBAAgB,EAAEkD,iBAAiB,GAAG,EAAE,EAAE;EAExF,MAAMC,oBAAoB,GAAG,GAAGnD,gBAAgB,CAACE,IAAI,IAAIF,gBAAgB,CAACK,aAAa,EAAE;EAEzF,IAAAF,cAAO,EAAC,6BAA6BgD,oBAAoB,wBAAwB,IAAA/C,oBAAa,EAACL,WAAW,CAAC,IAAI,EAAEH,QAAQ,CAAC;EAC1H,IAAI+B,6BAA6B,CAAC5B,WAAW,EAAEC,gBAAgB,CAAC,EAAE;IAChE,IAAAG,cAAO,EAAC,wDAAwDgD,oBAAoB,GAAG,EAAEvD,QAAQ,CAAC;IAClG;EACF;EAEA,MAAMuC,YAAY,GAAG;IAAC,MAAM,EAAEnC,gBAAgB,CAACE,IAAI;IAAE,OAAO,EAAEF,gBAAgB,CAAC+B;EAAoB,CAAC;;EAEpG;EACA;EACA,MAAMqB,QAAQ,GAAG,IAAAhD,oBAAa,EAACL,WAAW,CAAC;EAE3C,IAAI,IAAAsD,4BAAa,EAACtD,WAAW,EAAEoC,YAAY,CAAC,EAAE;IAAE;IAC9CmB,0BAA0B,CAAC,CAAC;IAC5B;EACF;;EAEA;EACA,IAAIC,2CAA2C,CAAC,CAAC,EAAE;IACjD;EACF;;EAEA;EACA,IAAI,IAAAC,2BAAoB,EAACzD,WAAW,CAACE,GAAG,EAAEkC,YAAY,CAACjC,IAAI,CAAC,EAAE;IAC5D;IACA,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAACuB,QAAQ,CAAC1B,WAAW,CAACE,GAAG,CAAC,EAAE;MAC5C,IAAAE,cAAO,EAAC,2DAA2D,IAAAiC,uBAAgB,EAACD,YAAY,CAAC,GAAG,EAAEvC,QAAQ,CAAC;MAC/G;IACF;IACA,IAAAO,cAAO,EAAC,wCAAwC,IAAAiC,uBAAgB,EAACD,YAAY,CAAC,GAAG,EAAEvC,QAAQ,CAAC;IAC5FG,WAAW,CAACuC,MAAM,GAAG,CAAC;IACtBC,kBAAkB,CAACxC,WAAW,EAAEoC,YAAY,CAAC;IAC7CD,WAAW,CAACnC,WAAW,EAAEoC,YAAY,CAAC;IACtC;EACF;EAEA,IAAAhC,cAAO,EAAC,uCAAuC,IAAAiC,uBAAgB,EAACD,YAAY,CAAC,GAAG,EAAEvC,QAAQ,CAAC;EAC3F;EAEA,SAAS0D,0BAA0BA,CAAA,EAAG;IACpC,IAAIF,QAAQ,KAAK,IAAAhD,oBAAa,EAACL,WAAW,CAAC,EAAE;MAC3C,IAAAI,cAAO,EAAC,2BAA2BgD,oBAAoB,mCAAmC,EAAEvD,QAAQ,CAAC;MACrGG,WAAW,CAACuC,MAAM,GAAG,CAAC;MACtBC,kBAAkB,CAACxC,WAAW,EAAEoC,YAAY,CAAC;MAC7C;IACF;IACA,IAAAhC,cAAO,EAAC,sBAAsBiD,QAAQ,wFAAwFD,oBAAoB,IAAI,EAAEvD,QAAQ,CAAC;IACjK;EACF;EAEA,SAAS2D,2CAA2CA,CAAA,EAAG;IACrD,IAAI,CAAC,IAAAE,uBAAgB,EAAC1D,WAAW,EAAEoC,YAAY,CAACjC,IAAI,CAAC,EAAE;MACrD,IAAAC,cAAO,EAAC,+CAA+C,IAAAiC,uBAAgB,EAACD,YAAY,CAAC,GAAG,EAAEvC,QAAQ,CAAC;MACnGG,WAAW,CAACuC,MAAM,GAAG,CAAC;MACtBC,kBAAkB,CAACxC,WAAW,EAAEoC,YAAY,CAAC;MAC7Ce,iBAAiB,CAACQ,OAAO,CAACC,IAAI,IAAId,cAAc,CAACc,IAAI,EAAE5D,WAAW,EAAEoC,YAAY,CAAC,CAAC;MAClFD,WAAW,CAACnC,WAAW,EAAEoC,YAAY,CAAC;MACtC,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;AACF","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/merge-fields/mergeOrAddSubfield.js"],
4
+ "sourcesContent": ["import createDebugLogger from 'debug';\nimport {cloneAndNormalizeFieldForComparison, isEnnakkotietoSubfieldG} from '../normalizeFieldForComparison.js';\nimport {normalizeAs, normalizeControlSubfieldValue} from '../normalize-identifiers.js';\nimport {fieldHasSubfield, fieldToString, isControlSubfieldCode, nvdebug, subfieldIsRepeatable, subfieldToString} from '../utils.js';\nimport {mergeSubfield} from './mergeSubfield.js';\nimport {sortAdjacentSubfields} from '../sortSubfields.js';\n\nimport {valueCarriesMeaning} from './worldKnowledge.js';\nimport {resetSubfield6Tag} from '../subfield6Utils.js';\n\nconst debug = createDebugLogger('@natlibfi/melinda-marc-record-merge-reducers:mergeOrAddSubfield');\n//const debugData = debug.extend('data');\nconst debugDev = debug.extend('dev');\n\nfunction catalogingSourceModifyingAgencyCandIsOriginalCatalogingSourceAgencyInTargetField(targetField, candSubfieldData) {\n if (targetField.tag !== '040' || candSubfieldData.code !== 'd') {\n return false;\n }\n nvdebug(`${fieldToString(targetField)} vs $d ${candSubfieldData.originalValue}}`, debugDev);\n // Add hard-coded exceptions here\n if (targetField.subfields.some(sf => sf.code === 'a' && sf.value === candSubfieldData.originalValue)) {\n nvdebug('040\u2021d matched 040\u2021a', debugDev);\n return true;\n }\n return false;\n}\n\nfunction ennakkotietoInSubfieldG(candSubfieldData) {\n if (isEnnakkotietoSubfieldG({'code': candSubfieldData.code, 'value': candSubfieldData.originalValue})) {\n // Skip just \u2021g subfield or the whole field?\n // We decided to skip just this subfield. We want at least $0 and maybe even more from ennakkotieto.\n debugDev(`Skip '\u2021g ${candSubfieldData.originalValue}'`);\n return true;\n }\n return false;\n}\n\n\nfunction mergeOrAddSubfieldNotRequiredSpecialCases(targetField, candSubfieldData) {\n\n // Don't bring WHATEVER<KEEP> from source 7XX to base 1XX.\n // Exceptionally we can merge <KEEP>ed 7XX with un-<KEEP>ed 1XX as 1XX should not use <KEEP>s.\n if (targetField.tag.charAt(0) === '1' && candSubfieldData.tag.charAt(0) === '7' && candSubfieldData.code === '9' && candSubfieldData.originalValue.match(/<KEEP>/u)) {\n return true;\n }\n\n // Don't add 264$b 'Kustannuspaikka tuntematon' etc\n if (!valueCarriesMeaning(targetField.tag, candSubfieldData.code, candSubfieldData.normalizedValue)) {\n return true;\n }\n\n\n // Don't add $0 subfields that mean the same even if they look different:\n const alephIdentifierType = normalizeAs(targetField.tag, candSubfieldData.code);\n if (alephIdentifierType !== undefined) {\n const normalizedSubfieldValue = normalizeControlSubfieldValue(candSubfieldData.originalValue, alephIdentifierType);\n if (targetField.subfields.some(sf => normalizeControlSubfieldValue(sf.value) === normalizedSubfieldValue && sf.code === candSubfieldData.code)) {\n return true;\n }\n }\n return false;\n}\n\n\nfunction skipNormalizedComparison(tag, subfieldCode, subfieldValue) {\n if (tag === '020' && subfieldCode === 'a') {\n return true;\n }\n // Hackish: we want 'ntamo' to win 'Ntamo'...\n // If there are other similar excepting put them into an array.\n if (['110', '610', '710', '810'].includes(tag) && subfieldCode === 'a' && subfieldValue.substring(0, 5) === 'ntamo') {\n return true;\n }\n return false;\n}\n\nfunction mergeOrAddSubfieldNotRequired(targetField, candSubfieldData) {\n if (catalogingSourceModifyingAgencyCandIsOriginalCatalogingSourceAgencyInTargetField(targetField, candSubfieldData) || ennakkotietoInSubfieldG(candSubfieldData)) {\n return true;\n }\n\n if (mergeOrAddSubfieldNotRequiredSpecialCases(targetField, candSubfieldData)) {\n return true;\n }\n\n const relevantTargetSubfields = targetField.subfields.filter(sf => sf.code === candSubfieldData.code);\n // Target field does not have this subfield yet:\n if (relevantTargetSubfields.length === 0) {\n return false;\n }\n nvdebug(` Look for identical subfields in '${fieldToString(targetField)}' using`, debugDev);\n nvdebug(` ORIG. \u2021${candSubfieldData.code} ${candSubfieldData.originalValue}`, debugDev);\n nvdebug(` NO-PUNC \u2021${candSubfieldData.code} ${candSubfieldData.punctuationlessValue}`, debugDev);\n if (relevantTargetSubfields.some(sf => sf.code === candSubfieldData.code && sf.value === candSubfieldData.originalValue)) {\n return true;\n }\n if (relevantTargetSubfields.some(sf => sf.code === candSubfieldData.code && sf.value === candSubfieldData.punctuationlessValue)) {\n return true;\n }\n\n if (!skipNormalizedComparison(targetField.tag, candSubfieldData.code, candSubfieldData.originalValue)) {\n const normalizedTargetField = cloneAndNormalizeFieldForComparison(targetField);\n nvdebug(` Look for identical normalized subfields in '${fieldToString(normalizedTargetField)}'`, debugDev);\n nvdebug(` NO-PUNC \u2021${candSubfieldData.code} ${candSubfieldData.normalizedValue})`, debugDev);\n\n if (normalizedTargetField.subfields.some(sf => sf.code === candSubfieldData.code && sf.value === candSubfieldData.normalizedValue)) {\n // Subfield with identical normalized value exists. Do nothing.\n // Not ideal 382\u2021n subfields, I guess... Nor 505\u2021trg repetitions... These need to be fixed...\n return true;\n }\n }\n\n return false; // (note that this is a double negation: not required is false)\n}\n\nfunction addSubfield(targetField, candSubfield) {\n nvdebug(` Added subfield '${subfieldToString(candSubfield)}' to field`, debugDev);\n // Add subfield to the end of all subfields. NB! Implement a separate function that does this + subfield reordering somehow...\n targetField.subfields.push(candSubfield);\n\n targetField.merged = 1;\n\n setPunctuationFlag(targetField, candSubfield);\n sortAdjacentSubfields(targetField);\n\n}\n\nfunction setPunctuationFlag(field, addedSubfield) {\n if (isControlSubfieldCode(addedSubfield.code)) { // These are never punctuation related\n return;\n }\n field.useExternalEndPunctuation = 1;\n}\n\n\nfunction resetPaired880(candFieldPair880, targetField, punctlessCandSubfield) {\n // No relevant:\n if (punctlessCandSubfield.code !== '6') {\n return;\n }\n if (targetField.tag === '880') {\n return;\n }\n // NB! $6 comes first:\n if (candFieldPair880 === undefined || !candFieldPair880.subfields || candFieldPair880.subfields[0].code !== '6') {\n return;\n\n }\n nvdebug(`880 contents: ${fieldToString(candFieldPair880)}`, debugDev);\n resetSubfield6Tag(candFieldPair880.subfields[0], targetField.tag);\n}\n\nexport function mergeOrAddSubfield(targetField, candSubfieldData, candFieldPairs880 = []) {\n\n const candSubfieldAsString = `${candSubfieldData.code} ${candSubfieldData.originalValue}`;\n\n nvdebug(` Q: mergeOrAddSubfield '${candSubfieldAsString}'\\n with field '${fieldToString(targetField)}'?`, debugDev);\n if (mergeOrAddSubfieldNotRequired(targetField, candSubfieldData)) {\n nvdebug(` A: No. No need to merge nor to add the subfield '${candSubfieldAsString}'`, debugDev);\n return;\n }\n\n const candSubfield = {'code': candSubfieldData.code, 'value': candSubfieldData.punctuationlessValue};\n\n // Currently only for X00$d 1984- => 1984-2000 type of changes, where source version is better that what base has.\n // It all other cases the original subfield is kept.\n const original = fieldToString(targetField);\n\n if (mergeSubfield(targetField, candSubfield)) { // We might need the normalizedCandSubfield later on\n mergeSubfieldPostprocessor();\n return;\n }\n\n // Subfield codes missing from the original record can be added by default:\n if (addSubfieldWithPreviouslyUnseenSubfieldCode()) {\n return;\n }\n\n // melindaCustomMergeFields.json tells us whether the subfield is repeatable or not:\n if (subfieldIsRepeatable(targetField.tag, candSubfield.code)) {\n // We don't want to add multiple, say, 260$c\n if (['260', '264'].includes(targetField.tag)) {\n nvdebug(` A: Exceptionally skip repeatable existing subfield '${subfieldToString(candSubfield)}'`, debugDev);\n return;\n }\n nvdebug(` A: Yes. Add repeatable subfield '${subfieldToString(candSubfield)}'`, debugDev);\n targetField.merged = 1;\n setPunctuationFlag(targetField, candSubfield);\n addSubfield(targetField, candSubfield);\n return;\n }\n\n nvdebug(` A: No. Non-repeatable subfield '${subfieldToString(candSubfield)}'`, debugDev);\n return;\n\n function mergeSubfieldPostprocessor() {\n if (original !== fieldToString(targetField)) {\n nvdebug(` A: Merge. Subfield '${candSubfieldAsString}' replaces the original subfield.`, debugDev);\n targetField.merged = 1;\n setPunctuationFlag(targetField, candSubfield);\n return;\n }\n nvdebug(` A: No. Field ${original} already had the same or a synonymous or a better merge candidate than our subfield '${candSubfieldAsString}'.`, debugDev);\n return;\n }\n\n function addSubfieldWithPreviouslyUnseenSubfieldCode() {\n if (!fieldHasSubfield(targetField, candSubfield.code)) {\n nvdebug(` A: Yes. Add previously unseen subfield '${subfieldToString(candSubfield)}'`, debugDev);\n targetField.merged = 1;\n setPunctuationFlag(targetField, candSubfield);\n candFieldPairs880.forEach(pair => resetPaired880(pair, targetField, candSubfield));\n addSubfield(targetField, candSubfield);\n return true;\n }\n return false;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }