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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (545) hide show
  1. package/.github/workflows/melinda-node-tests.yml +1 -1
  2. package/dist/access-rights.js +63 -91
  3. package/dist/access-rights.js.map +7 -1
  4. package/dist/access-rights.test.js +137 -0
  5. package/dist/access-rights.test.js.map +7 -0
  6. package/dist/addMissingField041.js +21 -53
  7. package/dist/addMissingField041.js.map +7 -1
  8. package/dist/addMissingField041.test.js +39 -0
  9. package/dist/addMissingField041.test.js.map +7 -0
  10. package/dist/addMissingField336.js +99 -191
  11. package/dist/addMissingField336.js.map +7 -1
  12. package/dist/addMissingField336.test.js +39 -0
  13. package/dist/addMissingField336.test.js.map +7 -0
  14. package/dist/addMissingField337.js +63 -132
  15. package/dist/addMissingField337.js.map +7 -1
  16. package/dist/addMissingField337.test.js +39 -0
  17. package/dist/addMissingField337.test.js.map +7 -0
  18. package/dist/addMissingField338.js +147 -253
  19. package/dist/addMissingField338.js.map +7 -1
  20. package/dist/addMissingField338.test.js +39 -0
  21. package/dist/addMissingField338.test.js.map +7 -0
  22. package/dist/cyrillux-usemarcon-replacement.js +119 -272
  23. package/dist/cyrillux-usemarcon-replacement.js.map +7 -1
  24. package/dist/cyrillux-usemarcon-replacement.test.js +46 -0
  25. package/dist/cyrillux-usemarcon-replacement.test.js.map +7 -0
  26. package/dist/cyrillux.js +119 -223
  27. package/dist/cyrillux.js.map +7 -1
  28. package/dist/cyrillux.test.js +39 -0
  29. package/dist/cyrillux.test.js.map +7 -0
  30. package/dist/disambiguateSeriesStatements.js +40 -81
  31. package/dist/disambiguateSeriesStatements.js.map +7 -1
  32. package/dist/disambiguateSeriesStatements.test.js +44 -0
  33. package/dist/disambiguateSeriesStatements.test.js.map +7 -0
  34. package/dist/double-commas.js +7 -14
  35. package/dist/double-commas.js.map +7 -1
  36. package/dist/double-commas.test.js +48 -0
  37. package/dist/double-commas.test.js.map +7 -0
  38. package/dist/duplicates-ind1.js +10 -31
  39. package/dist/duplicates-ind1.js.map +7 -1
  40. package/dist/duplicates-ind1.test.js +40 -0
  41. package/dist/duplicates-ind1.test.js.map +7 -0
  42. package/dist/empty-fields.js +10 -22
  43. package/dist/empty-fields.js.map +7 -1
  44. package/dist/empty-fields.test.js +129 -0
  45. package/dist/empty-fields.test.js.map +7 -0
  46. package/dist/ending-punctuation-conf.js +871 -769
  47. package/dist/ending-punctuation-conf.js.map +7 -1
  48. package/dist/ending-punctuation.js +84 -167
  49. package/dist/ending-punctuation.js.map +7 -1
  50. package/dist/ending-punctuation.test.js +2290 -0
  51. package/dist/ending-punctuation.test.js.map +7 -0
  52. package/dist/ending-whitespace.js +10 -35
  53. package/dist/ending-whitespace.js.map +7 -1
  54. package/dist/ending-whitespace.test.js +38 -0
  55. package/dist/ending-whitespace.test.js.map +7 -0
  56. package/dist/field-008-18-34-character-groups.js +40 -125
  57. package/dist/field-008-18-34-character-groups.js.map +7 -1
  58. package/dist/field-008-18-34-character-groups.test.js +45 -0
  59. package/dist/field-008-18-34-character-groups.test.js.map +7 -0
  60. package/dist/field-505-separators.js +19 -39
  61. package/dist/field-505-separators.js.map +7 -1
  62. package/dist/field-505-separators.test.js +45 -0
  63. package/dist/field-505-separators.test.js.map +7 -0
  64. package/dist/field-521-fix.js +19 -47
  65. package/dist/field-521-fix.js.map +7 -1
  66. package/dist/field-521-fix.test.js +44 -0
  67. package/dist/field-521-fix.test.js.map +7 -0
  68. package/dist/field-exclusion.js +37 -91
  69. package/dist/field-exclusion.js.map +7 -1
  70. package/dist/field-exclusion.test.js +821 -0
  71. package/dist/field-exclusion.test.js.map +7 -0
  72. package/dist/field-structure.js +52 -104
  73. package/dist/field-structure.js.map +7 -1
  74. package/dist/field-structure.test.js +587 -0
  75. package/dist/field-structure.test.js.map +7 -0
  76. package/dist/field33XUtils.js +119 -503
  77. package/dist/field33XUtils.js.map +7 -1
  78. package/dist/fields-present.js +11 -23
  79. package/dist/fields-present.js.map +7 -1
  80. package/dist/fields-present.test.js +95 -0
  81. package/dist/fields-present.test.js.map +7 -0
  82. package/dist/fix-33X.js +393 -431
  83. package/dist/fix-33X.js.map +7 -1
  84. package/dist/fix-33X.test.js +39 -0
  85. package/dist/fix-33X.test.js.map +7 -0
  86. package/dist/fix-country-codes.js +20 -50
  87. package/dist/fix-country-codes.js.map +7 -1
  88. package/dist/fix-country-codes.test.js +44 -0
  89. package/dist/fix-country-codes.test.js.map +7 -0
  90. package/dist/fix-language-codes.js +23 -53
  91. package/dist/fix-language-codes.js.map +7 -1
  92. package/dist/fix-language-codes.test.js +38 -0
  93. package/dist/fix-language-codes.test.js.map +7 -0
  94. package/dist/fixRelatorTerms.js +82 -209
  95. package/dist/fixRelatorTerms.js.map +7 -1
  96. package/dist/fixRelatorTerms.test.js +44 -0
  97. package/dist/fixRelatorTerms.test.js.map +7 -0
  98. package/dist/fixed-fields.js +21 -30
  99. package/dist/fixed-fields.js.map +7 -1
  100. package/dist/fixed-fields.test.js +87 -0
  101. package/dist/fixed-fields.test.js.map +7 -0
  102. package/dist/identical-fields.js +8 -24
  103. package/dist/identical-fields.js.map +7 -1
  104. package/dist/identical-fields.test.js +119 -0
  105. package/dist/identical-fields.test.js.map +7 -0
  106. package/dist/index.js +119 -413
  107. package/dist/index.js.map +7 -1
  108. package/dist/indicator-fixes.js +57 -95
  109. package/dist/indicator-fixes.js.map +7 -1
  110. package/dist/indicator-fixes.test.js +42 -0
  111. package/dist/indicator-fixes.test.js.map +7 -0
  112. package/dist/isbn-issn.js +66 -126
  113. package/dist/isbn-issn.js.map +7 -1
  114. package/dist/isbn-issn.test.js +398 -0
  115. package/dist/isbn-issn.test.js.map +7 -0
  116. package/dist/item-language.js +32 -65
  117. package/dist/item-language.js.map +7 -1
  118. package/dist/item-language.test.js +322 -0
  119. package/dist/item-language.test.js.map +7 -0
  120. package/dist/melindaCustomMergeFields.js +5182 -11233
  121. package/dist/melindaCustomMergeFields.js.map +7 -1
  122. package/dist/merge-fields/controlSubfields.js +75 -142
  123. package/dist/merge-fields/controlSubfields.js.map +7 -1
  124. package/dist/merge-fields/counterpartField.js +182 -379
  125. package/dist/merge-fields/counterpartField.js.map +7 -1
  126. package/dist/merge-fields/index.js +15 -49
  127. package/dist/merge-fields/index.js.map +7 -1
  128. package/dist/merge-fields/mergableIndicator.js +18 -51
  129. package/dist/merge-fields/mergableIndicator.js.map +7 -1
  130. package/dist/merge-fields/mergableTag.js +78 -30
  131. package/dist/merge-fields/mergableTag.js.map +7 -1
  132. package/dist/merge-fields/mergeConfig.js +66 -171
  133. package/dist/merge-fields/mergeConfig.js.map +7 -1
  134. package/dist/merge-fields/mergeConstraints.js +323 -1214
  135. package/dist/merge-fields/mergeConstraints.js.map +7 -1
  136. package/dist/merge-fields/mergeField.js +47 -111
  137. package/dist/merge-fields/mergeField.js.map +7 -1
  138. package/dist/merge-fields/mergeIndicator.js +64 -118
  139. package/dist/merge-fields/mergeIndicator.js.map +7 -1
  140. package/dist/merge-fields/mergeOrAddPostprocess.js +14 -38
  141. package/dist/merge-fields/mergeOrAddPostprocess.js.map +7 -1
  142. package/dist/merge-fields/mergeOrAddSubfield.js +62 -104
  143. package/dist/merge-fields/mergeOrAddSubfield.js.map +7 -1
  144. package/dist/merge-fields/mergeSubfield.js +47 -95
  145. package/dist/merge-fields/mergeSubfield.js.map +7 -1
  146. package/dist/merge-fields/removeDuplicateSubfields.js +18 -31
  147. package/dist/merge-fields/removeDuplicateSubfields.js.map +7 -1
  148. package/dist/merge-fields/worldKnowledge.js +15 -40
  149. package/dist/merge-fields/worldKnowledge.js.map +7 -1
  150. package/dist/merge-fields.test.js +44 -0
  151. package/dist/merge-fields.test.js.map +7 -0
  152. package/dist/mergeField500Lisapainokset.js +28 -57
  153. package/dist/mergeField500Lisapainokset.js.map +7 -1
  154. package/dist/mergeField500Lisapainokset.test.js +44 -0
  155. package/dist/mergeField500Lisapainokset.test.js.map +7 -0
  156. package/dist/mergeRelatorTermFields.js +33 -69
  157. package/dist/mergeRelatorTermFields.js.map +7 -1
  158. package/dist/mergeRelatorTermFields.test.js +44 -0
  159. package/dist/mergeRelatorTermFields.test.js.map +7 -0
  160. package/dist/modernize-502.js +23 -55
  161. package/dist/modernize-502.js.map +7 -1
  162. package/dist/modernize-502.test.js +38 -0
  163. package/dist/modernize-502.test.js.map +7 -0
  164. package/dist/multiple-subfield-0.js +23 -48
  165. package/dist/multiple-subfield-0.js.map +7 -1
  166. package/dist/multiple-subfield-0.test.js +44 -0
  167. package/dist/multiple-subfield-0.test.js.map +7 -0
  168. package/dist/non-breaking-space.js +11 -32
  169. package/dist/non-breaking-space.js.map +7 -1
  170. package/dist/non-breaking-space.test.js +38 -0
  171. package/dist/non-breaking-space.test.js.map +7 -0
  172. package/dist/normalize-dashes.js +18 -37
  173. package/dist/normalize-dashes.js.map +7 -1
  174. package/dist/normalize-dashes.test.js +44 -0
  175. package/dist/normalize-dashes.test.js.map +7 -0
  176. package/dist/normalize-identifiers.js +54 -140
  177. package/dist/normalize-identifiers.js.map +7 -1
  178. package/dist/normalize-identifiers.test.js +44 -0
  179. package/dist/normalize-identifiers.test.js.map +7 -0
  180. package/dist/normalize-qualifying-information.js +23 -48
  181. package/dist/normalize-qualifying-information.js.map +7 -1
  182. package/dist/normalize-qualifying-information.test.js +44 -0
  183. package/dist/normalize-qualifying-information.test.js.map +7 -0
  184. package/dist/normalize-utf8-diacritics.js +19 -105
  185. package/dist/normalize-utf8-diacritics.js.map +7 -1
  186. package/dist/normalize-utf8-diacritics.test.js +44 -0
  187. package/dist/normalize-utf8-diacritics.test.js.map +7 -0
  188. package/dist/normalizeFieldForComparison.js +67 -158
  189. package/dist/normalizeFieldForComparison.js.map +7 -1
  190. package/dist/normalizeSubfieldValueForComparison.js +37 -77
  191. package/dist/normalizeSubfieldValueForComparison.js.map +7 -1
  192. package/dist/prepublicationUtils.js +58 -111
  193. package/dist/prepublicationUtils.js.map +7 -1
  194. package/dist/punctuation/index.js +56 -72
  195. package/dist/punctuation/index.js.map +7 -1
  196. package/dist/punctuation/rules/aut.js +372 -331
  197. package/dist/punctuation/rules/aut.js.map +7 -1
  198. package/dist/punctuation/rules/bib.js +420 -373
  199. package/dist/punctuation/rules/bib.js.map +7 -1
  200. package/dist/punctuation/rules/index.js +7 -21
  201. package/dist/punctuation/rules/index.js.map +7 -1
  202. package/dist/punctuation.test.js +44 -0
  203. package/dist/punctuation.test.js.map +7 -0
  204. package/dist/punctuation2.js +251 -800
  205. package/dist/punctuation2.js.map +7 -1
  206. package/dist/punctuation2.test.js +44 -0
  207. package/dist/punctuation2.test.js.map +7 -0
  208. package/dist/reindexSubfield6OccurenceNumbers.js +61 -96
  209. package/dist/reindexSubfield6OccurenceNumbers.js.map +7 -1
  210. package/dist/reindexSubfield6OccurenceNumbers.test.js +44 -0
  211. package/dist/reindexSubfield6OccurenceNumbers.test.js.map +7 -0
  212. package/dist/removeDuplicateDataFields.js +102 -202
  213. package/dist/removeDuplicateDataFields.js.map +7 -1
  214. package/dist/removeDuplicateDataFields.test.js +44 -0
  215. package/dist/removeDuplicateDataFields.test.js.map +7 -0
  216. package/dist/removeInferiorDataFields.js +103 -227
  217. package/dist/removeInferiorDataFields.js.map +7 -1
  218. package/dist/removeInferiorDataFields.test.js +44 -0
  219. package/dist/removeInferiorDataFields.test.js.map +7 -0
  220. package/dist/resolvable-ext-references-melinda.js +25 -60
  221. package/dist/resolvable-ext-references-melinda.js.map +7 -1
  222. package/dist/resolvable-ext-references-melinda.test.js +160 -0
  223. package/dist/resolvable-ext-references-melinda.test.js.map +7 -0
  224. package/dist/resolveOrphanedSubfield6s.js +33 -64
  225. package/dist/resolveOrphanedSubfield6s.js.map +7 -1
  226. package/dist/resolveOrphanedSubfield6s.test.js +44 -0
  227. package/dist/resolveOrphanedSubfield6s.test.js.map +7 -0
  228. package/dist/sanitize-vocabulary-source-codes.js +27 -55
  229. package/dist/sanitize-vocabulary-source-codes.js.map +7 -1
  230. package/dist/sanitize-vocabulary-source-codes.test.js +45 -0
  231. package/dist/sanitize-vocabulary-source-codes.test.js.map +7 -0
  232. package/dist/sort-tags.js +13 -25
  233. package/dist/sort-tags.js.map +7 -1
  234. package/dist/sort-tags.test.js +261 -0
  235. package/dist/sort-tags.test.js.map +7 -0
  236. package/dist/sortFields.js +152 -222
  237. package/dist/sortFields.js.map +7 -1
  238. package/dist/sortFields.test.js +44 -0
  239. package/dist/sortFields.test.js.map +7 -0
  240. package/dist/sortRelatorTerms.js +30 -68
  241. package/dist/sortRelatorTerms.js.map +7 -1
  242. package/dist/sortRelatorTerms.test.js +44 -0
  243. package/dist/sortRelatorTerms.test.js.map +7 -0
  244. package/dist/sortSubfields.js +102 -255
  245. package/dist/sortSubfields.js.map +7 -1
  246. package/dist/sortSubfields.test.js +44 -0
  247. package/dist/sortSubfields.test.js.map +7 -0
  248. package/dist/stripPunctuation.js +13 -36
  249. package/dist/stripPunctuation.js.map +7 -1
  250. package/dist/stripPunctuation.test.js +44 -0
  251. package/dist/stripPunctuation.test.js.map +7 -0
  252. package/dist/subfield-exclusion.js +28 -75
  253. package/dist/subfield-exclusion.js.map +7 -1
  254. package/dist/subfield-exclusion.test.js +471 -0
  255. package/dist/subfield-exclusion.test.js.map +7 -0
  256. package/dist/subfield6Utils.js +107 -269
  257. package/dist/subfield6Utils.js.map +7 -1
  258. package/dist/subfield8Utils.js +26 -50
  259. package/dist/subfield8Utils.js.map +7 -1
  260. package/dist/subfieldValueNormalizations.js +40 -74
  261. package/dist/subfieldValueNormalizations.js.map +7 -1
  262. package/dist/subfieldValueNormalizations.test.js +45 -0
  263. package/dist/subfieldValueNormalizations.test.js.map +7 -0
  264. package/dist/sync-007-and-300.js +22 -53
  265. package/dist/sync-007-and-300.js.map +7 -1
  266. package/dist/sync-007-and-300.test.js +44 -0
  267. package/dist/sync-007-and-300.test.js.map +7 -0
  268. package/dist/translate-terms.js +67 -155
  269. package/dist/translate-terms.js.map +7 -1
  270. package/dist/translate-terms.test.js +44 -0
  271. package/dist/translate-terms.test.js.map +7 -0
  272. package/dist/typeOfDate-008.js +10 -25
  273. package/dist/typeOfDate-008.js.map +7 -1
  274. package/dist/typeOfDate-008.test.js +40 -0
  275. package/dist/typeOfDate-008.test.js.map +7 -0
  276. package/dist/unicode-decomposition.js +94 -107
  277. package/dist/unicode-decomposition.js.map +7 -1
  278. package/dist/unicode-decomposition.test.js +94 -0
  279. package/dist/unicode-decomposition.test.js.map +7 -0
  280. package/dist/update-field-540.js +30 -75
  281. package/dist/update-field-540.js.map +7 -1
  282. package/dist/update-field-540.test.js +44 -0
  283. package/dist/update-field-540.test.js.map +7 -0
  284. package/dist/urn.js +55 -128
  285. package/dist/urn.js.map +7 -1
  286. package/dist/urn.test.js +44 -0
  287. package/dist/urn.test.js.map +7 -0
  288. package/dist/utils.js +72 -126
  289. package/dist/utils.js.map +7 -1
  290. package/eslint.config.mjs +1 -2
  291. package/package.json +21 -93
  292. package/src/access-rights.js +1 -1
  293. package/src/{access-rights.spec.js → access-rights.test.js} +9 -10
  294. package/src/addMissingField041.js +1 -1
  295. package/src/{addMissingField336.spec.js → addMissingField041.test.js} +13 -14
  296. package/src/addMissingField336.js +3 -3
  297. package/src/{addMissingField041.spec.js → addMissingField336.test.js} +13 -14
  298. package/src/addMissingField337.js +2 -2
  299. package/src/{addMissingField337.spec.js → addMissingField337.test.js} +13 -14
  300. package/src/addMissingField338.js +2 -2
  301. package/src/{addMissingField338.spec.js → addMissingField338.test.js} +13 -14
  302. package/src/cyrillux-usemarcon-replacement.js +18 -18
  303. package/src/cyrillux-usemarcon-replacement.test.js +55 -0
  304. package/src/cyrillux.js +19 -12
  305. package/src/{cyrillux.spec.js → cyrillux.test.js} +13 -14
  306. package/src/disambiguateSeriesStatements.js +2 -2
  307. package/src/{disambiguateSeriesStatements.spec.js → disambiguateSeriesStatements.test.js} +12 -13
  308. package/src/double-commas.js +1 -1
  309. package/src/{double-commas.spec.js → double-commas.test.js} +9 -11
  310. package/src/duplicates-ind1.js +1 -1
  311. package/src/{duplicates-ind1.spec.js → duplicates-ind1.test.js} +12 -13
  312. package/src/{empty-fields.spec.js → empty-fields.test.js} +11 -13
  313. package/src/ending-punctuation.js +1 -1
  314. package/src/{ending-punctuation.spec.js → ending-punctuation.test.js} +172 -173
  315. package/src/{ending-whitespace.spec.js → ending-whitespace.test.js} +12 -13
  316. package/src/field-008-18-34-character-groups.js +2 -2
  317. package/src/{field-008-18-34-character-groups.spec.js → field-008-18-34-character-groups.test.js} +13 -13
  318. package/src/field-505-separators.js +3 -3
  319. package/src/{field-505-separators.spec.js → field-505-separators.test.js} +16 -14
  320. package/src/field-521-fix.js +2 -2
  321. package/src/{field-521-fix.spec.js → field-521-fix.test.js} +12 -13
  322. package/src/field-exclusion.js +1 -1
  323. package/src/{field-exclusion.spec.js → field-exclusion.test.js} +60 -57
  324. package/src/{field-structure.spec.js → field-structure.test.js} +29 -29
  325. package/src/{fields-present.spec.js → fields-present.test.js} +12 -15
  326. package/src/fix-33X.js +4 -4
  327. package/src/{fix-33X.spec.js → fix-33X.test.js} +13 -14
  328. package/src/fix-country-codes.js +1 -1
  329. package/src/{fix-country-codes.spec.js → fix-country-codes.test.js} +12 -13
  330. package/src/fix-language-codes.js +5 -5
  331. package/src/{fix-language-codes.spec.js → fix-language-codes.test.js} +12 -13
  332. package/src/fixRelatorTerms.js +5 -5
  333. package/src/{fixRelatorTerms.spec.js → fixRelatorTerms.test.js} +13 -13
  334. package/src/{fixed-fields.spec.js → fixed-fields.test.js} +11 -14
  335. package/src/identical-fields.js +1 -1
  336. package/src/{identical-fields.spec.js → identical-fields.test.js} +9 -11
  337. package/src/indicator-fixes.js +3 -3
  338. package/src/{indicator-fixes.spec.js → indicator-fixes.test.js} +9 -12
  339. package/src/isbn-issn.js +1 -1
  340. package/src/{isbn-issn.spec.js → isbn-issn.test.js} +20 -22
  341. package/src/{item-language.spec.js → item-language.test.js} +21 -22
  342. package/src/merge-fields/controlSubfields.js +1 -1
  343. package/src/merge-fields/counterpartField.js +8 -9
  344. package/src/merge-fields/index.js +1 -1
  345. package/src/merge-fields/mergableIndicator.js +1 -1
  346. package/src/merge-fields/mergeField.js +6 -6
  347. package/src/merge-fields/mergeIndicator.js +1 -1
  348. package/src/merge-fields/mergeOrAddPostprocess.js +4 -4
  349. package/src/merge-fields/mergeOrAddSubfield.js +2 -2
  350. package/src/merge-fields/mergeSubfield.js +4 -4
  351. package/src/merge-fields/removeDuplicateSubfields.js +2 -2
  352. package/src/{merge-fields.spec.js → merge-fields.test.js} +12 -13
  353. package/src/{mergeField500Lisapainokset.spec.js → mergeField500Lisapainokset.test.js} +12 -13
  354. package/src/mergeRelatorTermFields.js +5 -7
  355. package/src/{mergeRelatorTermFields.spec.js → mergeRelatorTermFields.test.js} +12 -13
  356. package/src/modernize-502.js +1 -1
  357. package/src/{modernize-502.spec.js → modernize-502.test.js} +12 -13
  358. package/src/multiple-subfield-0.js +3 -3
  359. package/src/{multiple-subfield-0.spec.js → multiple-subfield-0.test.js} +13 -13
  360. package/src/{non-breaking-space.spec.js → non-breaking-space.test.js} +12 -13
  361. package/src/normalize-dashes.js +2 -2
  362. package/src/{normalize-dashes.spec.js → normalize-dashes.test.js} +12 -13
  363. package/src/normalize-identifiers.js +1 -1
  364. package/src/{normalize-identifiers.spec.js → normalize-identifiers.test.js} +12 -13
  365. package/src/normalize-qualifying-information.js +2 -2
  366. package/src/{normalize-qualifying-information.spec.js → normalize-qualifying-information.test.js} +12 -13
  367. package/src/normalize-utf8-diacritics.js +2 -2
  368. package/src/{normalize-utf8-diacritics.spec.js → normalize-utf8-diacritics.test.js} +13 -13
  369. package/src/normalizeFieldForComparison.js +6 -6
  370. package/src/normalizeSubfieldValueForComparison.js +1 -1
  371. package/src/prepublicationUtils.js +4 -4
  372. package/src/punctuation/index.js +1 -1
  373. package/src/punctuation/rules/index.js +2 -2
  374. package/src/{punctuation.spec.js → punctuation.test.js} +12 -13
  375. package/src/punctuation2.js +4 -4
  376. package/src/{punctuation2.spec.js → punctuation2.test.js} +12 -13
  377. package/src/reindexSubfield6OccurenceNumbers.js +5 -7
  378. package/src/{reindexSubfield6OccurenceNumbers.spec.js → reindexSubfield6OccurenceNumbers.test.js} +12 -13
  379. package/src/removeDuplicateDataFields.js +11 -19
  380. package/src/{removeDuplicateDataFields.spec.js → removeDuplicateDataFields.test.js} +12 -13
  381. package/src/removeInferiorDataFields.js +11 -11
  382. package/src/{removeInferiorDataFields.spec.js → removeInferiorDataFields.test.js} +13 -13
  383. package/src/resolvable-ext-references-melinda.js +1 -1
  384. package/src/{resolvable-ext-references-melinda.spec.js → resolvable-ext-references-melinda.test.js} +42 -27
  385. package/src/resolveOrphanedSubfield6s.js +5 -5
  386. package/src/{resolveOrphanedSubfield6s.spec.js → resolveOrphanedSubfield6s.test.js} +13 -13
  387. package/src/sanitize-vocabulary-source-codes.js +4 -4
  388. package/src/{sanitize-vocabulary-source-codes.spec.js → sanitize-vocabulary-source-codes.test.js} +16 -14
  389. package/src/{sort-tags.spec.js → sort-tags.test.js} +9 -11
  390. package/src/sortFields.js +4 -4
  391. package/src/{sortFields.spec.js → sortFields.test.js} +12 -13
  392. package/src/sortRelatorTerms.js +3 -3
  393. package/src/{sortRelatorTerms.spec.js → sortRelatorTerms.test.js} +13 -13
  394. package/src/sortSubfields.js +1 -1
  395. package/src/{sortSubfields.spec.js → sortSubfields.test.js} +13 -13
  396. package/src/stripPunctuation.js +3 -3
  397. package/src/{stripPunctuation.spec.js → stripPunctuation.test.js} +13 -13
  398. package/src/subfield-exclusion.js +1 -1
  399. package/src/{subfield-exclusion.spec.js → subfield-exclusion.test.js} +45 -36
  400. package/src/subfield6Utils.js +6 -10
  401. package/src/subfield8Utils.js +4 -4
  402. package/src/subfieldValueNormalizations.js +3 -3
  403. package/src/{subfieldValueNormalizations.spec.js → subfieldValueNormalizations.test.js} +18 -14
  404. package/src/sync-007-and-300.js +2 -2
  405. package/src/{sync-007-and-300.spec.js → sync-007-and-300.test.js} +13 -13
  406. package/src/translate-terms.js +3 -3
  407. package/src/{translate-terms.spec.js → translate-terms.test.js} +13 -13
  408. package/src/{typeOfDate-008.spec.js → typeOfDate-008.test.js} +12 -13
  409. package/src/{unicode-decomposition.spec.js → unicode-decomposition.test.js} +10 -16
  410. package/src/update-field-540.js +2 -2
  411. package/src/{update-field-540.spec.js → update-field-540.test.js} +13 -10
  412. package/src/urn.js +2 -2
  413. package/src/{urn.spec.js → urn.test.js} +12 -13
  414. package/src/utils.js +3 -3
  415. package/test-fixtures/field-505-separators/03/expectedResult.json +3 -1
  416. package/test-fixtures/field-505-separators/03/record.json +3 -0
  417. package/test-fixtures/normalize-subfield-value/01/metadata.json +4 -1
  418. package/test-fixtures/normalize-subfield-value/01/record.json +3 -0
  419. package/test-fixtures/normalize-subfield-value/02/expectedResult.json +3 -1
  420. package/test-fixtures/normalize-subfield-value/02/metadata.json +2 -1
  421. package/test-fixtures/normalize-subfield-value/02/record.json +3 -0
  422. package/test-fixtures/sanitize-vocabulary-source-codes/f03/expectedResult.json +3 -1
  423. package/test-fixtures/sanitize-vocabulary-source-codes/f04/expectedResult.json +3 -1
  424. package/test-fixtures/sanitize-vocabulary-source-codes/v04/metadata.json +1 -4
  425. package/test-fixtures/sanitize-vocabulary-source-codes/v04/record.json +1 -1
  426. package/dist/access-rights.spec.js +0 -195
  427. package/dist/access-rights.spec.js.map +0 -1
  428. package/dist/addMissingField041.spec.js +0 -45
  429. package/dist/addMissingField041.spec.js.map +0 -1
  430. package/dist/addMissingField336.spec.js +0 -45
  431. package/dist/addMissingField336.spec.js.map +0 -1
  432. package/dist/addMissingField337.spec.js +0 -43
  433. package/dist/addMissingField337.spec.js.map +0 -1
  434. package/dist/addMissingField338.spec.js +0 -45
  435. package/dist/addMissingField338.spec.js.map +0 -1
  436. package/dist/cyrillux-usemarcon-replacement.spec.js +0 -45
  437. package/dist/cyrillux-usemarcon-replacement.spec.js.map +0 -1
  438. package/dist/cyrillux.spec.js +0 -46
  439. package/dist/cyrillux.spec.js.map +0 -1
  440. package/dist/disambiguateSeriesStatements.spec.js +0 -51
  441. package/dist/disambiguateSeriesStatements.spec.js.map +0 -1
  442. package/dist/double-commas.spec.js +0 -73
  443. package/dist/double-commas.spec.js.map +0 -1
  444. package/dist/duplicates-ind1.spec.js +0 -45
  445. package/dist/duplicates-ind1.spec.js.map +0 -1
  446. package/dist/empty-fields.spec.js +0 -118
  447. package/dist/empty-fields.spec.js.map +0 -1
  448. package/dist/ending-punctuation.spec.js +0 -2654
  449. package/dist/ending-punctuation.spec.js.map +0 -1
  450. package/dist/ending-whitespace.spec.js +0 -42
  451. package/dist/ending-whitespace.spec.js.map +0 -1
  452. package/dist/field-008-18-34-character-groups.spec.js +0 -51
  453. package/dist/field-008-18-34-character-groups.spec.js.map +0 -1
  454. package/dist/field-505-separators.spec.js +0 -51
  455. package/dist/field-505-separators.spec.js.map +0 -1
  456. package/dist/field-521-fix.spec.js +0 -51
  457. package/dist/field-521-fix.spec.js.map +0 -1
  458. package/dist/field-exclusion.spec.js +0 -1054
  459. package/dist/field-exclusion.spec.js.map +0 -1
  460. package/dist/field-structure.spec.js +0 -535
  461. package/dist/field-structure.spec.js.map +0 -1
  462. package/dist/fields-present.spec.js +0 -121
  463. package/dist/fields-present.spec.js.map +0 -1
  464. package/dist/fix-33X.spec.js +0 -45
  465. package/dist/fix-33X.spec.js.map +0 -1
  466. package/dist/fix-country-codes.spec.js +0 -51
  467. package/dist/fix-country-codes.spec.js.map +0 -1
  468. package/dist/fix-language-codes.spec.js +0 -44
  469. package/dist/fix-language-codes.spec.js.map +0 -1
  470. package/dist/fixRelatorTerms.spec.js +0 -51
  471. package/dist/fixRelatorTerms.spec.js.map +0 -1
  472. package/dist/fixed-fields.spec.js +0 -140
  473. package/dist/fixed-fields.spec.js.map +0 -1
  474. package/dist/identical-fields.spec.js +0 -99
  475. package/dist/identical-fields.spec.js.map +0 -1
  476. package/dist/indicator-fixes.spec.js +0 -51
  477. package/dist/indicator-fixes.spec.js.map +0 -1
  478. package/dist/isbn-issn.spec.js +0 -595
  479. package/dist/isbn-issn.spec.js.map +0 -1
  480. package/dist/item-language.spec.js +0 -306
  481. package/dist/item-language.spec.js.map +0 -1
  482. package/dist/melindaCustomMergeFields.json +0 -5120
  483. package/dist/merge-fields.spec.js +0 -51
  484. package/dist/merge-fields.spec.js.map +0 -1
  485. package/dist/mergeField500Lisapainokset.spec.js +0 -51
  486. package/dist/mergeField500Lisapainokset.spec.js.map +0 -1
  487. package/dist/mergeRelatorTermFields.spec.js +0 -51
  488. package/dist/mergeRelatorTermFields.spec.js.map +0 -1
  489. package/dist/modernize-502.spec.js +0 -49
  490. package/dist/modernize-502.spec.js.map +0 -1
  491. package/dist/multiple-subfield-0.spec.js +0 -51
  492. package/dist/multiple-subfield-0.spec.js.map +0 -1
  493. package/dist/non-breaking-space.spec.js +0 -42
  494. package/dist/non-breaking-space.spec.js.map +0 -1
  495. package/dist/normalize-dashes.spec.js +0 -51
  496. package/dist/normalize-dashes.spec.js.map +0 -1
  497. package/dist/normalize-identifiers.spec.js +0 -51
  498. package/dist/normalize-identifiers.spec.js.map +0 -1
  499. package/dist/normalize-qualifying-information.spec.js +0 -51
  500. package/dist/normalize-qualifying-information.spec.js.map +0 -1
  501. package/dist/normalize-utf8-diacritics.spec.js +0 -51
  502. package/dist/normalize-utf8-diacritics.spec.js.map +0 -1
  503. package/dist/punctuation.spec.js +0 -51
  504. package/dist/punctuation.spec.js.map +0 -1
  505. package/dist/punctuation2.spec.js +0 -51
  506. package/dist/punctuation2.spec.js.map +0 -1
  507. package/dist/reindexSubfield6OccurenceNumbers.spec.js +0 -51
  508. package/dist/reindexSubfield6OccurenceNumbers.spec.js.map +0 -1
  509. package/dist/removeDuplicateDataFields.spec.js +0 -51
  510. package/dist/removeDuplicateDataFields.spec.js.map +0 -1
  511. package/dist/removeInferiorDataFields.spec.js +0 -51
  512. package/dist/removeInferiorDataFields.spec.js.map +0 -1
  513. package/dist/resolvable-ext-references-melinda.spec.js +0 -166
  514. package/dist/resolvable-ext-references-melinda.spec.js.map +0 -1
  515. package/dist/resolveOrphanedSubfield6s.spec.js +0 -51
  516. package/dist/resolveOrphanedSubfield6s.spec.js.map +0 -1
  517. package/dist/sanitize-vocabulary-source-codes.spec.js +0 -51
  518. package/dist/sanitize-vocabulary-source-codes.spec.js.map +0 -1
  519. package/dist/sort-tags.spec.js +0 -207
  520. package/dist/sort-tags.spec.js.map +0 -1
  521. package/dist/sortFields.spec.js +0 -51
  522. package/dist/sortFields.spec.js.map +0 -1
  523. package/dist/sortRelatorTerms.spec.js +0 -51
  524. package/dist/sortRelatorTerms.spec.js.map +0 -1
  525. package/dist/sortSubfields.spec.js +0 -52
  526. package/dist/sortSubfields.spec.js.map +0 -1
  527. package/dist/stripPunctuation.spec.js +0 -51
  528. package/dist/stripPunctuation.spec.js.map +0 -1
  529. package/dist/subfield-exclusion.spec.js +0 -523
  530. package/dist/subfield-exclusion.spec.js.map +0 -1
  531. package/dist/subfieldValueNormalizations.spec.js +0 -51
  532. package/dist/subfieldValueNormalizations.spec.js.map +0 -1
  533. package/dist/sync-007-and-300.spec.js +0 -51
  534. package/dist/sync-007-and-300.spec.js.map +0 -1
  535. package/dist/translate-terms.spec.js +0 -51
  536. package/dist/translate-terms.spec.js.map +0 -1
  537. package/dist/typeOfDate-008.spec.js +0 -47
  538. package/dist/typeOfDate-008.spec.js.map +0 -1
  539. package/dist/unicode-decomposition.spec.js +0 -91
  540. package/dist/unicode-decomposition.spec.js.map +0 -1
  541. package/dist/update-field-540.spec.js +0 -51
  542. package/dist/update-field-540.spec.js.map +0 -1
  543. package/dist/urn.spec.js +0 -52
  544. package/dist/urn.spec.js.map +0 -1
  545. package/src/cyrillux-usemarcon-replacement.spec.js +0 -47
@@ -1,1226 +1,335 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.getMergeConstraintsForTag = getMergeConstraintsForTag;
7
- var _debug = _interopRequireDefault(require("debug"));
8
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
- const debug = (0, _debug.default)('@natlibfi/melinda-marc-record-merge-reducers:mergeConstraints');
10
- //const debugData = debug.extend('data');
11
- const debugDev = debug.extend('dev');
12
-
13
- // Specs: https://workgroups.helsinki.fi/x/K1ohCw (though we occasionally differ from them)...
14
-
15
- // "key" is an unique key that must match (be absent or exist+be identical) in both.
16
- // "paired" refers to a field that must either exist in both or be absent in both (negative XOR). Typically it's not defined.
17
- // NB: key+paired with identical values is an attempt to prevent copy for (ET) fields, and to force separate fields on (T) fields.
18
- // NB! If base has eg. no 264, two+ 264 fields can be copied from the source.
19
-
20
- // NB! not all X00 fields have, say, $x subfield. However, we can still share them...
21
- // $h is non-1XX?, $i is 7XX only, $w is 8XX only...
22
- const keyX00 = 'abcjloqrtuwx'; // Shared: $abcdefg...
23
- const keyX10 = 'abcdfghlnoprstuwx';
24
- const keyX11 = 'acdefghlnpqstuwx';
25
- const keyX30 = 'adfghklmnoprstvwxyz';
26
- const mergeConstraints = [{
27
- 'tag': '010',
28
- 'required': 'a',
29
- 'key': 'a'
30
- }, {
31
- 'tag': '013',
32
- 'required': 'a',
33
- 'key': 'a'
34
- },
35
- // We have 2 instances in Melinda...
36
- {
37
- 'tag': '015',
38
- 'required': 'a',
39
- 'key': 'a'
40
- }, {
41
- 'tag': '016',
42
- 'required': 'a',
43
- 'key': 'a2'
44
- }, {
45
- 'tag': '017',
46
- 'required': 'a',
47
- 'key': 'a'
48
- }, {
49
- 'tag': '018',
50
- 'required': 'a',
51
- 'key': 'a'
52
- }, {
53
- 'tag': '020',
54
- 'required': '',
55
- 'paired': 'a',
56
- 'key': 'a'
57
- },
58
- // NB! how to handle $z-only cases? 'required-fallback'='z'?
59
- {
60
- 'tag': '022',
61
- 'required': '',
62
- 'paired': 'a',
63
- 'key': 'alz'
64
- }, {
65
- 'tag': '024',
66
- 'required': '',
67
- 'paired': 'a',
68
- 'key': 'ad'
69
- }, {
70
- 'tag': '025',
71
- 'required': 'a',
72
- 'key': 'a'
73
- }, {
74
- 'tag': '026',
75
- 'required': 'a',
76
- 'key': 'a'
77
- }, {
78
- 'tag': '027',
79
- 'required': 'a',
80
- 'key': 'a'
81
- },
82
- // on tuolla pari $z:ää
83
- {
84
- 'tag': '028',
85
- 'required': 'a',
86
- 'key': 'ab'
87
- }, {
88
- 'tag': '030',
89
- 'required': 'a',
90
- 'key': 'a'
91
- }, {
92
- 'tag': '031',
93
- 'required': '',
94
- 'key': 'abcegmnopr2'
95
- },
96
- // mites tämmöisen käytännössä avaimettoman klaarais? TODO: tests
97
- {
98
- 'tag': '032',
99
- 'required': 'a',
100
- 'key': 'ab'
101
- }, {
102
- 'tag': '033',
103
- 'required': 'a',
104
- 'key': 'abcp0123'
105
- },
106
- // 0,1% are without $a. Ignore them for now.
107
- {
108
- 'tag': '034',
109
- 'required': 'ab',
110
- 'key': 'abcdefghjkmnprstxyz0123'
111
- }, {
112
- 'tag': '035',
113
- 'required': '',
114
- 'key': 'az'
115
- }, {
116
- 'tag': '036',
117
- 'required': 'a',
118
- 'key': 'a'
119
- }, {
120
- 'tag': '037',
121
- 'required': 'b',
122
- 'key': 'ab'
123
- }, {
124
- 'tag': '039',
125
- 'required': 'a'
126
- }, {
127
- 'tag': '040',
128
- 'required': '',
129
- 'key': ''
130
- }, {
131
- 'tag': '041',
132
- 'required': '',
133
- 'paired': '2',
134
- 'key': ''
135
- },
136
- // Don't put $2 in 'key'! hasCommonNominator() would get into trouble with it...
137
- {
138
- 'tag': '042',
139
- 'required': 'a',
140
- 'key': ''
141
- },
142
- // NB: preprocessor hacks applied
143
- {
144
- 'tag': '043',
145
- 'required': 'a',
146
- 'key': 'abc'
147
- }, {
148
- 'tag': '044',
149
- 'required': '',
150
- 'key': 'abc',
151
- 'paired': 'abc'
152
- }, {
153
- 'tag': '045',
154
- 'required': '',
155
- 'key': 'abc',
156
- 'paired': 'abc'
157
- },
158
- // (ET) // 045 is problematic either-$a or $b or $c...
159
- {
160
- 'tag': '046',
161
- 'required': 'a',
162
- 'key': 'abcdejklmnop',
163
- 'paired': 'abcdejklmnop'
164
- }, {
165
- 'tag': '047',
166
- 'required': 'a',
167
- 'key': 'a2'
168
- }, {
169
- 'tag': '048',
170
- 'required': '',
171
- 'paired': 'ab',
172
- 'key': 'ba'
173
- }, {
174
- 'tag': '049',
175
- 'required': '',
176
- 'key': 'abcd'
177
- }, {
178
- 'tag': '050',
179
- 'required': 'a',
180
- 'key': 'ab13'
181
- }, {
182
- 'tag': '051',
183
- 'required': 'a',
184
- 'key': 'abc'
185
- },
186
- // 2021-08-27: only one field in the whole Melinda
187
- {
188
- 'tag': '052',
189
- 'required': 'a',
190
- 'key': 'abd'
191
- }, {
192
- 'tag': '055',
193
- 'required': 'a',
194
- 'key': 'ab'
195
- }, {
196
- 'tag': '060',
197
- 'required': 'a',
198
- 'key': 'ab'
199
- }, {
200
- 'tag': '061',
201
- 'required': 'a',
202
- 'paired': 'b',
203
- 'key': 'abc'
204
- }, {
205
- 'tag': '066',
206
- 'required': 'c'
207
- }, {
208
- 'tag': '070',
209
- 'required': 'a',
210
- 'key': 'ab'
211
- }, {
212
- 'tag': '071',
213
- 'required': 'a',
214
- 'paired': 'abc',
215
- 'key': 'abc'
216
- },
217
- // N=3
218
- {
219
- 'tag': '072',
220
- 'required': 'a',
221
- 'key': 'ax'
222
- }, {
223
- 'tag': '074',
224
- 'required': '',
225
- 'paired': 'a',
226
- 'key': 'az'
227
- }, {
228
- 'tag': '080',
229
- 'required': 'a',
230
- 'paired': 'bx',
231
- 'key': 'abx'
232
- }, {
233
- 'tag': '082',
234
- 'required': 'a',
235
- 'paired': 'b',
236
- 'key': 'abmq2'
237
- }, {
238
- 'tag': '083',
239
- 'required': 'a',
240
- 'paired': 'b',
241
- 'key': 'abmqy'
242
- }, {
243
- 'tag': '084',
244
- 'required': 'a',
245
- 'paired': 'b2',
246
- 'key': 'abq2'
247
- }, {
248
- 'tag': '085',
249
- 'required': '',
250
- 'paired': 'abcfrstuvwyz',
251
- 'key': 'abcfrstuvwxyz'
252
- }, {
253
- 'tag': '086',
254
- 'required': '',
255
- 'paired': 'a',
256
- 'key': 'a'
257
- }, {
258
- 'tag': '088',
259
- 'required': '',
260
- 'paired': 'a',
261
- 'key': 'a'
262
- },
263
- // NB! 100, 110 and 111 may have title parts that are handled elsewhere
264
- {
265
- 'tag': '100',
266
- 'required': 'a',
267
- 'paired': 't',
268
- 'key': keyX00
269
- }, {
270
- 'tag': '110',
271
- 'required': 'a',
272
- 'paired': 'bt',
273
- 'key': keyX10
274
- }, {
275
- 'tag': '111',
276
- 'required': 'a',
277
- 'paired': 't',
278
- 'key': keyX11
279
- },
280
- // NB! 130 has no name part, key is used for title part
281
- {
282
- 'tag': '130',
283
- 'required': 'a',
284
- 'key': keyX30
285
- }, {
286
- 'tag': '210',
287
- 'required': 'a',
288
- 'key': 'ab'
289
- }, {
290
- 'tag': '222',
291
- 'required': 'a',
292
- 'key': 'ab'
293
- }, {
294
- 'tag': '240',
295
- 'required': 'a',
296
- 'key': 'adfghklmnoprs'
297
- }, {
298
- 'tag': '242',
299
- 'required': 'a',
300
- 'key': 'abchnpy'
301
- }, {
302
- 'tag': '243',
303
- 'required': 'a',
304
- 'key': 'adfghklmnoprs'
305
- }, {
306
- 'tag': '245',
307
- 'required': 'a',
308
- 'key': 'abcghnps',
309
- 'paired': 'abnps'
310
- }, {
311
- 'tag': '246',
312
- 'required': 'a',
313
- 'key': 'abfnp'
314
- }, {
315
- 'tag': '247',
316
- 'required': 'a',
317
- 'key': 'abfnpx'
318
- }, {
319
- 'tag': '250',
320
- 'required': 'a',
321
- 'key': 'ab'
322
- }, {
323
- 'tag': '251',
324
- 'required': 'a',
325
- 'key': 'a'
326
- }, {
327
- 'tag': '254',
328
- 'required': 'a',
329
- 'key': 'a'
330
- }, {
331
- 'tag': '255',
332
- 'required': 'a',
333
- 'key': 'abcdefg',
334
- 'paired': 'abcdefg'
335
- }, {
336
- 'tag': '256',
337
- 'required': 'a',
338
- 'key': 'a'
339
- }, {
340
- 'tag': '257',
341
- 'required': 'a',
342
- 'key': 'a'
343
- }, {
344
- 'tag': '258',
345
- 'required': 'a',
346
- 'key': 'a'
347
- },
348
- // Melinda: N=1
349
- //{'tag': '260', 'required': '', 'paired': 'abcefg', 'key': 'abcefg'},
350
- {
351
- 'tag': '260',
352
- 'required': '',
353
- 'key': 'abcefg'
354
- }, {
355
- 'tag': '263',
356
- 'required': 'a',
357
- 'key': 'a'
358
- },
359
- //{'tag': '264', 'required': '', 'paired': 'abc', 'key': 'abc'}, // NB "S.l." normalizations?" not implemented
360
- {
361
- 'tag': '264',
362
- 'required': '',
363
- 'key': 'abc'
364
- },
365
- // NB "S.l." normalizations?" not implemented
366
- // SKIP TAG 270 ON PURPOSE! Melinda's N=43.
367
- {
368
- 'tag': '300',
369
- 'required': 'a',
370
- 'key': 'abcefg'
371
- }, {
372
- 'tag': '306',
373
- 'required': 'a',
374
- 'key': 'a'
375
- },
376
- // SKIP TAG 307 ON PURPOSE! N=0
377
- {
378
- 'tag': '310',
379
- 'required': 'a',
380
- 'key': 'ab'
381
- }, {
382
- 'tag': '321',
383
- 'required': 'a',
384
- 'key': 'ab'
385
- }, {
386
- 'tag': '335',
387
- 'required': 'a',
388
- 'key': 'ab'
389
- },
390
- // Melinda N=1 (a test field). M might increase?
391
- {
392
- 'tag': '336',
393
- 'required': 'b2',
394
- 'key': 'ab2'
395
- },
396
- // MET-88: don't merge different $a subfields
397
- {
398
- 'tag': '337',
399
- 'required': 'b2',
400
- 'key': 'ab2'
401
- },
402
- // MET-88: don't merge different $a subfields
403
- {
404
- 'tag': '338',
405
- 'required': 'b2',
406
- 'key': 'ab2'
407
- },
408
- // / MET-88: don't merge different $a subfields
409
- {
410
- 'tag': '340',
411
- 'required': '',
412
- 'paired': 'abcdefghijkmnop',
413
- 'key': 'abcdefghijkmnop'
414
- }, {
415
- 'tag': '341',
416
- 'required': '',
417
- 'paired': 'abcde',
418
- 'key': 'abcde'
419
- },
420
- // NEW! Starting to appear!
421
- {
422
- 'tag': '342',
423
- 'required': '',
424
- 'paired': 'abcdefghijklmnopqrstuvw',
425
- 'key': 'abcdefghijklmnopqrstuvw'
426
- },
427
- // SKIP 342. NOT SEEN!
428
- {
429
- 'tag': '343',
430
- 'required': '',
431
- 'paired': 'abcdefghi',
432
- 'key': 'abcdefghi'
433
- },
434
- // SKIP 343.
435
- {
436
- 'tag': '344',
437
- 'required': '',
438
- 'paired': 'abcdefgh',
439
- 'key': 'abcdefgh'
440
- }, {
441
- 'tag': '345',
442
- 'required': '',
443
- 'paired': 'abcd',
444
- 'key': 'abcd'
445
- }, {
446
- 'tag': '346',
447
- 'required': '',
448
- 'paired': 'ab',
449
- 'key': 'ab'
450
- }, {
451
- 'tag': '347',
452
- 'required': '',
453
- 'paired': 'abcdef',
454
- 'key': 'abcdef'
455
- }, {
456
- 'tag': '348',
457
- 'required': '',
458
- 'paired': 'ab',
459
- 'key': 'ab'
460
- }, {
461
- 'tag': '348',
462
- 'required': '',
463
- 'paired': 'abc',
464
- 'key': 'abc'
465
- }, {
466
- 'tag': '351',
467
- 'required': '',
468
- 'paired': 'abc',
469
- 'key': 'abc'
470
- }, {
471
- 'tag': '352',
472
- 'required': '',
473
- 'paired': 'abcdefgiq',
474
- 'key': 'abcdefgiq'
475
- }, {
476
- 'tag': '355',
477
- 'required': '',
478
- 'paired': 'abcdefghj',
479
- 'key': 'abcdefghj'
480
- }, {
481
- 'tag': '357',
482
- 'required': 'a',
483
- 'key': 'abcg'
484
- }, {
485
- 'tag': '362',
486
- 'required': 'a',
487
- 'key': 'az'
488
- }, {
489
- 'tag': '363',
490
- 'required': '',
491
- 'paired': 'abcdefghijklmuv',
492
- 'key': 'abcdefghijklmuv'
493
- }, {
494
- 'tag': '365',
495
- 'required': 'b',
496
- 'paired': 'abcdefghijkm',
497
- 'key': 'abcdefghijkm'
498
- },
499
- // N=0
500
- {
501
- 'tag': '366',
502
- 'required': '',
503
- 'paired': 'abcdefgjkm',
504
- 'key': 'abcdefgjkm'
505
- }, {
506
- 'tag': '370',
507
- 'required': '',
508
- 'paired': 'cfgistuv',
509
- 'key': 'cfgistuv'
510
- }, {
511
- 'tag': '377',
512
- 'required': '',
513
- 'paired': 'al',
514
- 'key': 'al'
515
- }, {
516
- 'tag': '380',
517
- 'required': 'a',
518
- 'key': 'a'
519
- }, {
520
- 'tag': '381',
521
- 'required': 'auv',
522
- 'key': 'auv'
523
- }, {
524
- 'tag': '382',
525
- 'required': ''
526
- }, {
527
- 'tag': '383',
528
- 'required': 'abcde',
529
- 'key': 'abcde'
530
- }, {
531
- 'tag': '384',
532
- 'required': 'a',
533
- 'key': 'a'
534
- }, {
535
- 'tag': '385',
536
- 'required': 'a',
537
- 'paired': 'abmn',
538
- 'key': 'abmn'
539
- }, {
540
- 'tag': '386',
541
- 'required': 'a',
542
- 'paired': 'abmn',
543
- 'key': 'abmn'
544
- }, {
545
- 'tag': '388',
546
- 'required': 'a',
547
- 'key': 'a'
548
- }, {
549
- 'tag': '490',
550
- 'required': 'a',
551
- 'key': 'axvl'
552
- }, {
553
- 'tag': '500',
554
- 'required': 'a',
555
- 'key': 'a'
556
- }, {
557
- 'tag': '501',
558
- 'required': 'a',
559
- 'key': 'a'
560
- }, {
561
- 'tag': '502',
562
- 'required': 'a',
563
- 'key': 'abcdgo'
564
- }, {
565
- 'tag': '504',
566
- 'required': 'a',
567
- 'paired': 'ab',
568
- 'key': 'ab'
569
- }, {
570
- 'tag': '505',
571
- 'required': '',
572
- 'paired': 'agrtu',
573
- 'key': 'agrtu'
574
- }, {
575
- 'tag': '506',
576
- 'required': 'a',
577
- 'paired': '',
578
- 'key': 'abcdefgqu'
579
- }, {
580
- 'tag': '507',
581
- 'required': 'a',
582
- 'paired': 'ab',
583
- 'key': 'ab'
584
- }, {
585
- 'tag': '508',
586
- 'required': 'a',
587
- 'key': 'a'
588
- }, {
589
- 'tag': '509',
590
- 'required': 'a',
591
- 'key': 'acd'
592
- }, {
593
- 'tag': '510',
594
- 'required': 'a',
595
- 'key': 'abcx'
596
- }, {
597
- 'tag': '511',
598
- 'required': 'a',
599
- 'key': 'a'
600
- }, {
601
- 'tag': '513',
602
- 'required': '',
603
- 'paired': 'ab',
604
- 'key': 'ab'
605
- }, {
606
- 'tag': '514',
607
- 'required': '',
608
- 'paired': 'abcdefghijkmuz',
609
- 'key': 'abcdefghijkmuz'
610
- }, {
611
- 'tag': '515',
612
- 'required': 'a',
613
- 'key': 'a'
614
- }, {
615
- 'tag': '518',
616
- 'required': '',
617
- 'paired': 'adop',
618
- 'key': 'adop'
619
- }, {
620
- 'tag': '520',
621
- 'required': 'a',
622
- 'paired': 'abc',
623
- 'key': 'abc'
624
- }, {
625
- 'tag': '521',
626
- 'required': 'a',
627
- 'paired': 'ab',
628
- 'key': 'ab'
629
- }, {
630
- 'tag': '522',
631
- 'required': 'a',
632
- 'key': 'a'
633
- }, {
634
- 'tag': '524',
635
- 'required': 'a',
636
- 'key': 'a'
637
- }, {
638
- 'tag': '525',
639
- 'required': 'a',
640
- 'key': 'a'
641
- }, {
642
- 'tag': '526',
643
- 'required': 'a',
644
- 'paired': 'abcdi',
645
- 'key': 'abcdi'
646
- }, {
647
- 'tag': '530',
648
- 'required': 'a',
649
- 'paired': 'abcd',
650
- 'key': 'abcd'
651
- }, {
652
- 'tag': '532',
653
- 'required': 'a',
654
- 'key': 'a'
655
- }, {
656
- 'tag': '533',
657
- 'required': 'a',
658
- 'paired': 'abcdefmn7',
659
- 'key': 'abcdefmn7'
660
- }, {
661
- 'tag': '534',
662
- 'required': '',
663
- 'paired': 'abcempt',
664
- 'key': 'abcempt'
665
- }, {
666
- 'tag': '535',
667
- 'required': '',
668
- 'paired': 'abcdg',
669
- 'key': 'abcdg'
670
- }, {
671
- 'tag': '536',
672
- 'required': '',
673
- 'paired': 'abcdefgh',
674
- 'key': 'abcdefgh'
675
- }, {
676
- 'tag': '538',
677
- 'required': 'a',
678
- 'paired': 'aiu',
679
- 'key': 'aiu'
680
- }, {
681
- 'tag': '540',
682
- 'required': '',
683
- 'paired': 'abcdfgqu',
684
- 'key': 'abcdfgqu'
685
- }, {
686
- 'tag': '541',
687
- 'required': '',
688
- 'paired': 'abcdefhno',
689
- 'key': 'abcdefhno'
690
- }, {
691
- 'tag': '542',
692
- 'required': '',
693
- 'paired': 'abcdfghijklmopqrsu',
694
- 'key': 'abcdfghijklmopqrsu'
695
- }, {
696
- 'tag': '544',
697
- 'required': '',
698
- 'paired': 'abcden',
699
- 'key': 'abcden'
700
- }, {
701
- 'tag': '545',
702
- 'required': '',
703
- 'paired': 'abu',
704
- 'key': 'abu'
705
- }, {
706
- 'tag': '546',
707
- 'required': '',
708
- 'paired': 'ab',
709
- 'key': 'ab'
710
- }, {
711
- 'tag': '547',
712
- 'required': 'a',
713
- 'key': 'a'
714
- }, {
715
- 'tag': '550',
716
- 'required': 'a',
717
- 'key': 'a'
718
- }, {
719
- 'tag': '552',
720
- 'required': '',
721
- 'paired': 'abcdefghijklmnopuz',
722
- 'key': 'abcdefghijklmnopuz'
723
- }, {
724
- 'tag': '555',
725
- 'required': 'a',
726
- 'paired': 'abcdu',
727
- 'key': 'abcdu'
728
- }, {
729
- 'tag': '556',
730
- 'required': 'a',
731
- 'key': 'az'
732
- }, {
733
- 'tag': '561',
734
- 'required': 'a',
735
- 'key': 'au'
736
- }, {
737
- 'tag': '562',
738
- 'required': '',
739
- 'paired': 'abcde',
740
- 'key': 'abcde'
741
- }, {
742
- 'tag': '563',
743
- 'required': 'a',
744
- 'key': 'au'
745
- }, {
746
- 'tag': '565',
747
- 'required': '',
748
- 'paired': 'abc',
749
- 'key': 'abc'
750
- }, {
751
- 'tag': '567',
752
- 'required': '',
753
- 'paired': 'ab',
754
- 'key': 'ab'
755
- }, {
756
- 'tag': '580',
757
- 'required': 'a',
758
- 'key': 'a'
759
- }, {
760
- 'tag': '581',
761
- 'required': 'a',
762
- 'key': 'a'
763
- }, {
764
- 'tag': '583',
765
- 'required': '',
766
- 'paired': 'abcdefhijklnou',
767
- 'key': 'abcdefhijklnou'
768
- }, {
769
- 'tag': '584',
770
- 'required': '',
771
- 'paired': 'ab',
772
- 'key': 'ab'
773
- }, {
774
- 'tag': '585',
775
- 'required': 'a',
776
- 'key': 'a'
777
- }, {
778
- 'tag': '586',
779
- 'required': 'a',
780
- 'key': 'a'
781
- }, {
782
- 'tag': '588',
783
- 'required': 'a',
784
- 'key': 'a'
785
- },
786
- // NB! Currently we never merge 59X fields (see mergableTags.js). Doublish removals such as MELKEHITYS-3147 are handled by postprocessor.
787
- {
788
- 'tag': '590',
789
- 'required': ''
790
- }, {
791
- 'tag': '591',
792
- 'required': ''
793
- }, {
794
- 'tag': '592',
795
- 'required': ''
796
- }, {
797
- 'tag': '593',
798
- 'required': ''
799
- }, {
800
- 'tag': '594',
801
- 'required': ''
802
- }, {
803
- 'tag': '595',
804
- 'required': ''
805
- }, {
806
- 'tag': '596',
807
- 'required': ''
808
- }, {
809
- 'tag': '597',
810
- 'required': ''
811
- }, {
812
- 'tag': '598',
813
- 'required': ''
814
- }, {
815
- 'tag': '599',
816
- 'required': ''
817
- }, {
818
- 'tag': '600',
819
- 'required': 'a',
820
- 'paired': 'tvxyz',
821
- 'key': keyX00
822
- }, {
823
- 'tag': '610',
824
- 'required': 'a',
825
- 'paired': 'btvxyz',
826
- 'key': keyX10
827
- }, {
828
- 'tag': '611',
829
- 'required': 'a',
830
- 'paired': 'tvxyz',
831
- 'key': keyX11
832
- }, {
833
- 'tag': '630',
834
- 'required': 'a',
835
- 'paired': 'atvxyz',
836
- 'key': keyX30
837
- },
838
- // NB! 700, 710 and 711 may have title parts that are handled elsewhere
839
- {
840
- 'tag': '647',
841
- 'required': 'a',
842
- 'paired': 'avxyz',
843
- 'key': 'acdgvxyz02'
844
- }, {
845
- 'tag': '648',
846
- 'required': 'a',
847
- 'paired': 'avxyz',
848
- 'key': 'avxyz02'
849
- }, {
850
- 'tag': '650',
851
- 'required': 'a',
852
- 'paired': 'abcdegvxyz',
853
- 'key': 'abcdegvxyz20'
854
- }, {
855
- 'tag': '651',
856
- 'required': 'a',
857
- 'paired': 'aegvxyz',
858
- 'key': 'aegvxyz20'
859
- }, {
860
- 'tag': '653',
861
- 'required': 'a',
862
- 'paired': 'a',
863
- 'key': 'a'
864
- },
865
- // this is interesting as a can be repeated
866
- {
867
- 'tag': '654',
868
- 'required': '',
869
- 'paired': 'abcevxyz'
870
- }, {
871
- 'tag': '655',
872
- 'required': 'a',
873
- 'paired': 'abcvxyz',
874
- 'key': 'avxyz20'
875
- }, {
876
- 'tag': '656',
877
- 'required': 'a',
878
- 'paired': 'akvxyz'
879
- },
880
- // N=0
881
- {
882
- 'tag': '657',
883
- 'required': 'a',
884
- 'paired': 'avxyz'
885
- },
886
- // N=0
887
- {
888
- 'tag': '658',
889
- 'required': 'a',
890
- 'paired': 'abcd'
891
- },
892
- // N=0
893
- {
894
- 'tag': '662',
895
- 'required': '',
896
- 'paired': 'abcdefgh'
897
- },
898
- // N=0
899
- {
900
- 'tag': '688',
901
- 'required': 'a'
902
- },
903
- // N=0
904
- {
905
- 'tag': '700',
906
- 'required': 'a',
907
- 'paired': 't',
908
- 'key': keyX00
909
- },
910
- // h/i/m/o/r/s/x are missing from 100
911
- {
912
- 'tag': '710',
913
- 'required': 'a',
914
- 'paired': 'bt',
915
- 'key': keyX10
916
- },
917
- // h/j/m/o/r/s/x are missing from 110
918
- {
919
- 'tag': '711',
920
- 'required': 'a',
921
- 'paired': 'cdeflns',
922
- 'key': keyX11
923
- },
924
- // h/i/s/x are missing from 711
925
- {
926
- 'tag': '720',
927
- 'required': 'a',
928
- 'key': 'a'
929
- },
930
- // NB! 730 has no name part, key is used for title part
931
- {
932
- 'tag': '730',
933
- 'required': 'a',
934
- 'key': keyX30
935
- },
936
- // NB: 130->730 magic subfields might not agree...
937
- {
938
- 'tag': '740',
939
- 'required': 'a',
940
- 'key': 'ahnp'
941
- }, {
942
- 'tag': '751',
943
- 'required': 'a',
944
- 'key': 'a'
945
- },
946
- // N=11, kaikissa pelkkä $a
947
- {
948
- 'tag': '752',
949
- 'required': '',
950
- 'key': 'abcdefgh'
951
- },
952
- // N=12234
953
- {
954
- 'tag': '753',
955
- 'required': '',
956
- 'key': 'abc'
957
- }, {
958
- 'tag': '754',
959
- 'required': '',
960
- 'key': 'acdxz'
961
- },
962
- // N=3
963
- {
964
- 'tag': '758',
965
- 'required': 'a',
966
- 'key': 'ai'
967
- },
968
- // N=1
969
-
970
- {
971
- 'tag': '760',
972
- 'required': 'tw',
973
- key: 'twxy'
974
- }, {
975
- 'tag': '762',
976
- 'required': 't',
977
- key: 'abcdhmstxy'
978
- }, {
979
- 'tag': '765',
980
- 'required': 't',
981
- key: 'abcdhmrstuwxyz'
982
- }, {
983
- 'tag': '767',
984
- 'required': 't',
985
- key: 'abcdhmrstuwxyz'
986
- }, {
987
- 'tag': '770',
988
- 'required': 't',
989
- 'paired': 'ruxyz',
990
- key: 'abcdhmrstuwxyz'
991
- }, {
992
- 'tag': '772',
993
- 'required': 't',
994
- key: 'abcdhmrstuwxyz'
995
- }, {
996
- 'tag': '773',
997
- 'required': 'w',
998
- key: 'wgq'
999
- },
1000
- // Kirjavälitys should not have any component parts. However, this need to be re-thought...
1001
- // Currently we (appently) drop fields that don't contain 773$w...
1002
- {
1003
- 'tag': '774',
1004
- 'required': '',
1005
- 'paired': 'nruxyz',
1006
- 'key': 'npqrstrxyz'
1007
- }, {
1008
- 'tag': '775',
1009
- 'required': '',
1010
- 'paired': 'ruxyz',
1011
- 'key': 'abcdefhmstuxyz'
1012
- }, {
1013
- 'tag': '776',
1014
- 'required': '',
1015
- 'paired': 'ruxyz',
1016
- 'key': 'abcdhmsuwxyz'
1017
- }, {
1018
- 'tag': '777',
1019
- 'required': '',
1020
- 'paired': 'ruxyz',
1021
- 'key': 'abcdhmstuxyz'
1022
- }, {
1023
- 'tag': '780',
1024
- 'required': '',
1025
- 'paired': 'ruxyz',
1026
- 'key': 'abcdhmstuxyz'
1027
- }, {
1028
- 'tag': '785',
1029
- 'required': '',
1030
- 'paired': 'uxyz',
1031
- 'key': 'abcdhmstuxyz'
1032
- }, {
1033
- 'tag': '786',
1034
- 'required': '',
1035
- 'paired': 'abcrstuxyz',
1036
- 'key': 'abcdhijmprstuxyz4'
1037
- }, {
1038
- 'tag': '787',
1039
- 'required': '',
1040
- 'paired': 'abcdhmstuxyz4'
1041
- }, {
1042
- 'tag': '788',
1043
- 'required': '',
1044
- 'paired': 'stx',
1045
- 'key': 'abdestx'
1046
- }, {
1047
- 'tag': '800',
1048
- 'required': 'a',
1049
- 'paired': 't',
1050
- 'key': keyX00
1051
- }, {
1052
- 'tag': '810',
1053
- 'required': 'a',
1054
- 'paired': 'bt',
1055
- 'key': keyX10
1056
- }, {
1057
- 'tag': '811',
1058
- 'required': 'a',
1059
- 'paired': 't',
1060
- 'key': keyX11
1061
- }, {
1062
- 'tag': '830',
1063
- 'required': 'a',
1064
- 'key': keyX30
1065
- }, {
1066
- 'tag': '840',
1067
- 'required': 'a'
1068
- }, {
1069
- 'tag': '841',
1070
- 'required': 'a'
1071
- }, {
1072
- 'tag': '842',
1073
- 'required': 'a'
1074
- }, {
1075
- 'tag': '843',
1076
- 'required': 'a'
1077
- }, {
1078
- 'tag': '844',
1079
- 'required': 'a'
1080
- }, {
1081
- 'tag': '845',
1082
- 'required': 'a'
1083
- }, {
1084
- 'tag': '850',
1085
- 'required': 'a',
1086
- 'key': 'a'
1087
- }, {
1088
- 'tag': '852',
1089
- 'required': 'a'
1090
- },
1091
- // HMM... we might want to reconsider this...
1092
- {
1093
- 'tag': '853',
1094
- 'required': 'a'
1095
- }, {
1096
- 'tag': '854',
1097
- 'required': 'a'
1098
- }, {
1099
- 'tag': '855',
1100
- 'required': 'a'
1101
- }, {
1102
- 'tag': '856',
1103
- 'required': 'u',
1104
- 'paired': 'u',
1105
- 'key': 'opuw23'
1106
- },
1107
- // 856 is built around $u...
1108
- {
1109
- 'tag': '863',
1110
- 'required': 'a'
1111
- }, {
1112
- 'tag': '864',
1113
- 'required': 'a'
1114
- }, {
1115
- 'tag': '865',
1116
- 'required': 'a'
1117
- }, {
1118
- 'tag': '866',
1119
- 'required': 'a'
1120
- }, {
1121
- 'tag': '867',
1122
- 'required': 'a'
1123
- }, {
1124
- 'tag': '868',
1125
- 'required': 'a'
1126
- }, {
1127
- 'tag': '876',
1128
- 'required': 'a'
1129
- }, {
1130
- 'tag': '877',
1131
- 'required': 'a'
1132
- }, {
1133
- 'tag': '878',
1134
- 'required': 'a'
1135
- }, {
1136
- 'tag': '880',
1137
- 'required': '',
1138
- 'paired': 'a',
1139
- 'key': 'abcdefghijklmnopqrstuvwxyz'
1140
- }, {
1141
- 'tag': '881',
1142
- 'required': ''
1143
- }, {
1144
- 'tag': '882',
1145
- 'required': ''
1146
- }, {
1147
- 'tag': '883',
1148
- 'required': ''
1149
- }, {
1150
- 'tag': '884',
1151
- 'required': '',
1152
- 'paired': 'agkq'
1153
- }, {
1154
- 'tag': '885',
1155
- 'required': ''
1156
- }, {
1157
- 'tag': '886',
1158
- 'required': ''
1159
- }, {
1160
- 'tag': '887',
1161
- 'required': ''
1162
- }, {
1163
- 'tag': '900',
1164
- 'required': ''
1165
- }, {
1166
- 'tag': '901',
1167
- 'required': ''
1168
- }, {
1169
- 'tag': '910',
1170
- 'required': ''
1171
- }, {
1172
- 'tag': '935',
1173
- 'required': 'a',
1174
- 'key': 'az'
1175
- },
1176
- // Fono information at least
1177
- {
1178
- 'tag': '940',
1179
- 'required': ''
1180
- }, {
1181
- 'tag': '946',
1182
- 'required': 'a',
1183
- 'key': 'abfnp'
1184
- },
1185
- // Copied from 246. However, final version might contain some elements from field 245 as well
1186
- {
1187
- 'tag': '960',
1188
- 'required': ''
1189
- }, {
1190
- 'tag': '973',
1191
- 'required': 'w',
1192
- 'key': 'w'
1193
- },
1194
- // Viola multi-hosts
1195
- {
1196
- 'tag': '995',
1197
- 'required': ''
1198
- }, {
1199
- 'tag': 'CAT',
1200
- 'required': ''
1201
- }, {
1202
- 'tag': 'LOW',
1203
- 'required': ''
1204
- }, {
1205
- 'tag': 'SID',
1206
- 'required': ''
1207
- }];
1
+ import createDebugLogger from "debug";
2
+ const debug = createDebugLogger("@natlibfi/melinda-marc-record-merge-reducers:mergeConstraints");
3
+ const debugDev = debug.extend("dev");
4
+ const keyX00 = "abcjloqrtuwx";
5
+ const keyX10 = "abcdfghlnoprstuwx";
6
+ const keyX11 = "acdefghlnpqstuwx";
7
+ const keyX30 = "adfghklmnoprstvwxyz";
8
+ const mergeConstraints = [
9
+ { "tag": "010", "required": "a", "key": "a" },
10
+ { "tag": "013", "required": "a", "key": "a" },
11
+ // We have 2 instances in Melinda...
12
+ { "tag": "015", "required": "a", "key": "a" },
13
+ { "tag": "016", "required": "a", "key": "a2" },
14
+ { "tag": "017", "required": "a", "key": "a" },
15
+ { "tag": "018", "required": "a", "key": "a" },
16
+ { "tag": "020", "required": "", "paired": "a", "key": "a" },
17
+ // NB! how to handle $z-only cases? 'required-fallback'='z'?
18
+ { "tag": "022", "required": "", "paired": "a", "key": "alz" },
19
+ { "tag": "024", "required": "", "paired": "a", "key": "ad" },
20
+ { "tag": "025", "required": "a", "key": "a" },
21
+ { "tag": "026", "required": "a", "key": "a" },
22
+ { "tag": "027", "required": "a", "key": "a" },
23
+ // on tuolla pari $z:ää
24
+ { "tag": "028", "required": "a", "key": "ab" },
25
+ { "tag": "030", "required": "a", "key": "a" },
26
+ { "tag": "031", "required": "", "key": "abcegmnopr2" },
27
+ // mites tämmöisen käytännössä avaimettoman klaarais? TODO: tests
28
+ { "tag": "032", "required": "a", "key": "ab" },
29
+ { "tag": "033", "required": "a", "key": "abcp0123" },
30
+ // 0,1% are without $a. Ignore them for now.
31
+ { "tag": "034", "required": "ab", "key": "abcdefghjkmnprstxyz0123" },
32
+ { "tag": "035", "required": "", "key": "az" },
33
+ { "tag": "036", "required": "a", "key": "a" },
34
+ { "tag": "037", "required": "b", "key": "ab" },
35
+ { "tag": "039", "required": "a" },
36
+ { "tag": "040", "required": "", "key": "" },
37
+ { "tag": "041", "required": "", "paired": "2", "key": "" },
38
+ // Don't put $2 in 'key'! hasCommonNominator() would get into trouble with it...
39
+ { "tag": "042", "required": "a", "key": "" },
40
+ // NB: preprocessor hacks applied
41
+ { "tag": "043", "required": "a", "key": "abc" },
42
+ { "tag": "044", "required": "", "key": "abc", "paired": "abc" },
43
+ { "tag": "045", "required": "", "key": "abc", "paired": "abc" },
44
+ // (ET) // 045 is problematic either-$a or $b or $c...
45
+ { "tag": "046", "required": "a", "key": "abcdejklmnop", "paired": "abcdejklmnop" },
46
+ { "tag": "047", "required": "a", "key": "a2" },
47
+ { "tag": "048", "required": "", "paired": "ab", "key": "ba" },
48
+ { "tag": "049", "required": "", "key": "abcd" },
49
+ { "tag": "050", "required": "a", "key": "ab13" },
50
+ { "tag": "051", "required": "a", "key": "abc" },
51
+ // 2021-08-27: only one field in the whole Melinda
52
+ { "tag": "052", "required": "a", "key": "abd" },
53
+ { "tag": "055", "required": "a", "key": "ab" },
54
+ { "tag": "060", "required": "a", "key": "ab" },
55
+ { "tag": "061", "required": "a", "paired": "b", "key": "abc" },
56
+ { "tag": "066", "required": "c" },
57
+ { "tag": "070", "required": "a", "key": "ab" },
58
+ { "tag": "071", "required": "a", "paired": "abc", "key": "abc" },
59
+ // N=3
60
+ { "tag": "072", "required": "a", "key": "ax" },
61
+ { "tag": "074", "required": "", "paired": "a", "key": "az" },
62
+ { "tag": "080", "required": "a", "paired": "bx", "key": "abx" },
63
+ { "tag": "082", "required": "a", "paired": "b", "key": "abmq2" },
64
+ { "tag": "083", "required": "a", "paired": "b", "key": "abmqy" },
65
+ { "tag": "084", "required": "a", "paired": "b2", "key": "abq2" },
66
+ { "tag": "085", "required": "", "paired": "abcfrstuvwyz", "key": "abcfrstuvwxyz" },
67
+ { "tag": "086", "required": "", "paired": "a", "key": "a" },
68
+ { "tag": "088", "required": "", "paired": "a", "key": "a" },
69
+ // NB! 100, 110 and 111 may have title parts that are handled elsewhere
70
+ { "tag": "100", "required": "a", "paired": "t", "key": keyX00 },
71
+ { "tag": "110", "required": "a", "paired": "bt", "key": keyX10 },
72
+ { "tag": "111", "required": "a", "paired": "t", "key": keyX11 },
73
+ // NB! 130 has no name part, key is used for title part
74
+ { "tag": "130", "required": "a", "key": keyX30 },
75
+ { "tag": "210", "required": "a", "key": "ab" },
76
+ { "tag": "222", "required": "a", "key": "ab" },
77
+ { "tag": "240", "required": "a", "key": "adfghklmnoprs" },
78
+ { "tag": "242", "required": "a", "key": "abchnpy" },
79
+ { "tag": "243", "required": "a", "key": "adfghklmnoprs" },
80
+ { "tag": "245", "required": "a", "key": "abcghnps", "paired": "abnps" },
81
+ { "tag": "246", "required": "a", "key": "abfnp" },
82
+ { "tag": "247", "required": "a", "key": "abfnpx" },
83
+ { "tag": "250", "required": "a", "key": "ab" },
84
+ { "tag": "251", "required": "a", "key": "a" },
85
+ { "tag": "254", "required": "a", "key": "a" },
86
+ { "tag": "255", "required": "a", "key": "abcdefg", "paired": "abcdefg" },
87
+ { "tag": "256", "required": "a", "key": "a" },
88
+ { "tag": "257", "required": "a", "key": "a" },
89
+ { "tag": "258", "required": "a", "key": "a" },
90
+ // Melinda: N=1
91
+ //{'tag': '260', 'required': '', 'paired': 'abcefg', 'key': 'abcefg'},
92
+ { "tag": "260", "required": "", "key": "abcefg" },
93
+ { "tag": "263", "required": "a", "key": "a" },
94
+ //{'tag': '264', 'required': '', 'paired': 'abc', 'key': 'abc'}, // NB "S.l." normalizations?" not implemented
95
+ { "tag": "264", "required": "", "key": "abc" },
96
+ // NB "S.l." normalizations?" not implemented
97
+ // SKIP TAG 270 ON PURPOSE! Melinda's N=43.
98
+ { "tag": "300", "required": "a", "key": "abcefg" },
99
+ { "tag": "306", "required": "a", "key": "a" },
100
+ // SKIP TAG 307 ON PURPOSE! N=0
101
+ { "tag": "310", "required": "a", "key": "ab" },
102
+ { "tag": "321", "required": "a", "key": "ab" },
103
+ { "tag": "335", "required": "a", "key": "ab" },
104
+ // Melinda N=1 (a test field). M might increase?
105
+ { "tag": "336", "required": "b2", "key": "ab2" },
106
+ // MET-88: don't merge different $a subfields
107
+ { "tag": "337", "required": "b2", "key": "ab2" },
108
+ // MET-88: don't merge different $a subfields
109
+ { "tag": "338", "required": "b2", "key": "ab2" },
110
+ // / MET-88: don't merge different $a subfields
111
+ { "tag": "340", "required": "", "paired": "abcdefghijkmnop", "key": "abcdefghijkmnop" },
112
+ { "tag": "341", "required": "", "paired": "abcde", "key": "abcde" },
113
+ // NEW! Starting to appear!
114
+ { "tag": "342", "required": "", "paired": "abcdefghijklmnopqrstuvw", "key": "abcdefghijklmnopqrstuvw" },
115
+ // SKIP 342. NOT SEEN!
116
+ { "tag": "343", "required": "", "paired": "abcdefghi", "key": "abcdefghi" },
117
+ // SKIP 343.
118
+ { "tag": "344", "required": "", "paired": "abcdefgh", "key": "abcdefgh" },
119
+ { "tag": "345", "required": "", "paired": "abcd", "key": "abcd" },
120
+ { "tag": "346", "required": "", "paired": "ab", "key": "ab" },
121
+ { "tag": "347", "required": "", "paired": "abcdef", "key": "abcdef" },
122
+ { "tag": "348", "required": "", "paired": "ab", "key": "ab" },
123
+ { "tag": "348", "required": "", "paired": "abc", "key": "abc" },
124
+ { "tag": "351", "required": "", "paired": "abc", "key": "abc" },
125
+ { "tag": "352", "required": "", "paired": "abcdefgiq", "key": "abcdefgiq" },
126
+ { "tag": "355", "required": "", "paired": "abcdefghj", "key": "abcdefghj" },
127
+ { "tag": "357", "required": "a", "key": "abcg" },
128
+ { "tag": "362", "required": "a", "key": "az" },
129
+ { "tag": "363", "required": "", "paired": "abcdefghijklmuv", "key": "abcdefghijklmuv" },
130
+ { "tag": "365", "required": "b", "paired": "abcdefghijkm", "key": "abcdefghijkm" },
131
+ // N=0
132
+ { "tag": "366", "required": "", "paired": "abcdefgjkm", "key": "abcdefgjkm" },
133
+ { "tag": "370", "required": "", "paired": "cfgistuv", "key": "cfgistuv" },
134
+ { "tag": "377", "required": "", "paired": "al", "key": "al" },
135
+ { "tag": "380", "required": "a", "key": "a" },
136
+ { "tag": "381", "required": "auv", "key": "auv" },
137
+ { "tag": "382", "required": "" },
138
+ { "tag": "383", "required": "abcde", "key": "abcde" },
139
+ { "tag": "384", "required": "a", "key": "a" },
140
+ { "tag": "385", "required": "a", "paired": "abmn", "key": "abmn" },
141
+ { "tag": "386", "required": "a", "paired": "abmn", "key": "abmn" },
142
+ { "tag": "388", "required": "a", "key": "a" },
143
+ { "tag": "490", "required": "a", "key": "axvl" },
144
+ { "tag": "500", "required": "a", "key": "a" },
145
+ { "tag": "501", "required": "a", "key": "a" },
146
+ { "tag": "502", "required": "a", "key": "abcdgo" },
147
+ { "tag": "504", "required": "a", "paired": "ab", "key": "ab" },
148
+ { "tag": "505", "required": "", "paired": "agrtu", "key": "agrtu" },
149
+ { "tag": "506", "required": "a", "paired": "", "key": "abcdefgqu" },
150
+ { "tag": "507", "required": "a", "paired": "ab", "key": "ab" },
151
+ { "tag": "508", "required": "a", "key": "a" },
152
+ { "tag": "509", "required": "a", "key": "acd" },
153
+ { "tag": "510", "required": "a", "key": "abcx" },
154
+ { "tag": "511", "required": "a", "key": "a" },
155
+ { "tag": "513", "required": "", "paired": "ab", "key": "ab" },
156
+ { "tag": "514", "required": "", "paired": "abcdefghijkmuz", "key": "abcdefghijkmuz" },
157
+ { "tag": "515", "required": "a", "key": "a" },
158
+ { "tag": "518", "required": "", "paired": "adop", "key": "adop" },
159
+ { "tag": "520", "required": "a", "paired": "abc", "key": "abc" },
160
+ { "tag": "521", "required": "a", "paired": "ab", "key": "ab" },
161
+ { "tag": "522", "required": "a", "key": "a" },
162
+ { "tag": "524", "required": "a", "key": "a" },
163
+ { "tag": "525", "required": "a", "key": "a" },
164
+ { "tag": "526", "required": "a", "paired": "abcdi", "key": "abcdi" },
165
+ { "tag": "530", "required": "a", "paired": "abcd", "key": "abcd" },
166
+ { "tag": "532", "required": "a", "key": "a" },
167
+ { "tag": "533", "required": "a", "paired": "abcdefmn7", "key": "abcdefmn7" },
168
+ { "tag": "534", "required": "", "paired": "abcempt", "key": "abcempt" },
169
+ { "tag": "535", "required": "", "paired": "abcdg", "key": "abcdg" },
170
+ { "tag": "536", "required": "", "paired": "abcdefgh", "key": "abcdefgh" },
171
+ { "tag": "538", "required": "a", "paired": "aiu", "key": "aiu" },
172
+ { "tag": "540", "required": "", "paired": "abcdfgqu", "key": "abcdfgqu" },
173
+ { "tag": "541", "required": "", "paired": "abcdefhno", "key": "abcdefhno" },
174
+ { "tag": "542", "required": "", "paired": "abcdfghijklmopqrsu", "key": "abcdfghijklmopqrsu" },
175
+ { "tag": "544", "required": "", "paired": "abcden", "key": "abcden" },
176
+ { "tag": "545", "required": "", "paired": "abu", "key": "abu" },
177
+ { "tag": "546", "required": "", "paired": "ab", "key": "ab" },
178
+ { "tag": "547", "required": "a", "key": "a" },
179
+ { "tag": "550", "required": "a", "key": "a" },
180
+ { "tag": "552", "required": "", "paired": "abcdefghijklmnopuz", "key": "abcdefghijklmnopuz" },
181
+ { "tag": "555", "required": "a", "paired": "abcdu", "key": "abcdu" },
182
+ { "tag": "556", "required": "a", "key": "az" },
183
+ { "tag": "561", "required": "a", "key": "au" },
184
+ { "tag": "562", "required": "", "paired": "abcde", "key": "abcde" },
185
+ { "tag": "563", "required": "a", "key": "au" },
186
+ { "tag": "565", "required": "", "paired": "abc", "key": "abc" },
187
+ { "tag": "567", "required": "", "paired": "ab", "key": "ab" },
188
+ { "tag": "580", "required": "a", "key": "a" },
189
+ { "tag": "581", "required": "a", "key": "a" },
190
+ { "tag": "583", "required": "", "paired": "abcdefhijklnou", "key": "abcdefhijklnou" },
191
+ { "tag": "584", "required": "", "paired": "ab", "key": "ab" },
192
+ { "tag": "585", "required": "a", "key": "a" },
193
+ { "tag": "586", "required": "a", "key": "a" },
194
+ { "tag": "588", "required": "a", "key": "a" },
195
+ // NB! Currently we never merge 59X fields (see mergableTags.js). Doublish removals such as MELKEHITYS-3147 are handled by postprocessor.
196
+ { "tag": "590", "required": "" },
197
+ { "tag": "591", "required": "" },
198
+ { "tag": "592", "required": "" },
199
+ { "tag": "593", "required": "" },
200
+ { "tag": "594", "required": "" },
201
+ { "tag": "595", "required": "" },
202
+ { "tag": "596", "required": "" },
203
+ { "tag": "597", "required": "" },
204
+ { "tag": "598", "required": "" },
205
+ { "tag": "599", "required": "" },
206
+ { "tag": "600", "required": "a", "paired": "tvxyz", "key": keyX00 },
207
+ { "tag": "610", "required": "a", "paired": "btvxyz", "key": keyX10 },
208
+ { "tag": "611", "required": "a", "paired": "tvxyz", "key": keyX11 },
209
+ { "tag": "630", "required": "a", "paired": "atvxyz", "key": keyX30 },
210
+ // NB! 700, 710 and 711 may have title parts that are handled elsewhere
211
+ { "tag": "647", "required": "a", "paired": "avxyz", "key": "acdgvxyz02" },
212
+ { "tag": "648", "required": "a", "paired": "avxyz", "key": "avxyz02" },
213
+ { "tag": "650", "required": "a", "paired": "abcdegvxyz", "key": "abcdegvxyz20" },
214
+ { "tag": "651", "required": "a", "paired": "aegvxyz", "key": "aegvxyz20" },
215
+ { "tag": "653", "required": "a", "paired": "a", "key": "a" },
216
+ // this is interesting as a can be repeated
217
+ { "tag": "654", "required": "", "paired": "abcevxyz" },
218
+ { "tag": "655", "required": "a", "paired": "abcvxyz", "key": "avxyz20" },
219
+ { "tag": "656", "required": "a", "paired": "akvxyz" },
220
+ // N=0
221
+ { "tag": "657", "required": "a", "paired": "avxyz" },
222
+ // N=0
223
+ { "tag": "658", "required": "a", "paired": "abcd" },
224
+ // N=0
225
+ { "tag": "662", "required": "", "paired": "abcdefgh" },
226
+ // N=0
227
+ { "tag": "688", "required": "a" },
228
+ // N=0
229
+ { "tag": "700", "required": "a", "paired": "t", "key": keyX00 },
230
+ // h/i/m/o/r/s/x are missing from 100
231
+ { "tag": "710", "required": "a", "paired": "bt", "key": keyX10 },
232
+ // h/j/m/o/r/s/x are missing from 110
233
+ { "tag": "711", "required": "a", "paired": "cdeflns", "key": keyX11 },
234
+ // h/i/s/x are missing from 711
235
+ { "tag": "720", "required": "a", "key": "a" },
236
+ // NB! 730 has no name part, key is used for title part
237
+ { "tag": "730", "required": "a", "key": keyX30 },
238
+ // NB: 130->730 magic subfields might not agree...
239
+ { "tag": "740", "required": "a", "key": "ahnp" },
240
+ { "tag": "751", "required": "a", "key": "a" },
241
+ // N=11, kaikissa pelkkä $a
242
+ { "tag": "752", "required": "", "key": "abcdefgh" },
243
+ // N=12234
244
+ { "tag": "753", "required": "", "key": "abc" },
245
+ { "tag": "754", "required": "", "key": "acdxz" },
246
+ // N=3
247
+ { "tag": "758", "required": "a", "key": "ai" },
248
+ // N=1
249
+ { "tag": "760", "required": "tw", key: "twxy" },
250
+ { "tag": "762", "required": "t", key: "abcdhmstxy" },
251
+ { "tag": "765", "required": "t", key: "abcdhmrstuwxyz" },
252
+ { "tag": "767", "required": "t", key: "abcdhmrstuwxyz" },
253
+ { "tag": "770", "required": "t", "paired": "ruxyz", key: "abcdhmrstuwxyz" },
254
+ { "tag": "772", "required": "t", key: "abcdhmrstuwxyz" },
255
+ { "tag": "773", "required": "w", key: "wgq" },
256
+ // Kirjavälitys should not have any component parts. However, this need to be re-thought...
257
+ // Currently we (appently) drop fields that don't contain 773$w...
258
+ { "tag": "774", "required": "", "paired": "nruxyz", "key": "npqrstrxyz" },
259
+ { "tag": "775", "required": "", "paired": "ruxyz", "key": "abcdefhmstuxyz" },
260
+ { "tag": "776", "required": "", "paired": "ruxyz", "key": "abcdhmsuwxyz" },
261
+ { "tag": "777", "required": "", "paired": "ruxyz", "key": "abcdhmstuxyz" },
262
+ { "tag": "780", "required": "", "paired": "ruxyz", "key": "abcdhmstuxyz" },
263
+ { "tag": "785", "required": "", "paired": "uxyz", "key": "abcdhmstuxyz" },
264
+ { "tag": "786", "required": "", "paired": "abcrstuxyz", "key": "abcdhijmprstuxyz4" },
265
+ { "tag": "787", "required": "", "paired": "abcdhmstuxyz4" },
266
+ { "tag": "788", "required": "", "paired": "stx", "key": "abdestx" },
267
+ { "tag": "800", "required": "a", "paired": "t", "key": keyX00 },
268
+ { "tag": "810", "required": "a", "paired": "bt", "key": keyX10 },
269
+ { "tag": "811", "required": "a", "paired": "t", "key": keyX11 },
270
+ { "tag": "830", "required": "a", "key": keyX30 },
271
+ { "tag": "840", "required": "a" },
272
+ { "tag": "841", "required": "a" },
273
+ { "tag": "842", "required": "a" },
274
+ { "tag": "843", "required": "a" },
275
+ { "tag": "844", "required": "a" },
276
+ { "tag": "845", "required": "a" },
277
+ { "tag": "850", "required": "a", "key": "a" },
278
+ { "tag": "852", "required": "a" },
279
+ // HMM... we might want to reconsider this...
280
+ { "tag": "853", "required": "a" },
281
+ { "tag": "854", "required": "a" },
282
+ { "tag": "855", "required": "a" },
283
+ { "tag": "856", "required": "u", "paired": "u", "key": "opuw23" },
284
+ // 856 is built around $u...
285
+ { "tag": "863", "required": "a" },
286
+ { "tag": "864", "required": "a" },
287
+ { "tag": "865", "required": "a" },
288
+ { "tag": "866", "required": "a" },
289
+ { "tag": "867", "required": "a" },
290
+ { "tag": "868", "required": "a" },
291
+ { "tag": "876", "required": "a" },
292
+ { "tag": "877", "required": "a" },
293
+ { "tag": "878", "required": "a" },
294
+ { "tag": "880", "required": "", "paired": "a", "key": "abcdefghijklmnopqrstuvwxyz" },
295
+ { "tag": "881", "required": "" },
296
+ { "tag": "882", "required": "" },
297
+ { "tag": "883", "required": "" },
298
+ { "tag": "884", "required": "", "paired": "agkq" },
299
+ { "tag": "885", "required": "" },
300
+ { "tag": "886", "required": "" },
301
+ { "tag": "887", "required": "" },
302
+ { "tag": "900", "required": "" },
303
+ { "tag": "901", "required": "" },
304
+ { "tag": "910", "required": "" },
305
+ { "tag": "935", "required": "a", "key": "az" },
306
+ // Fono information at least
307
+ { "tag": "940", "required": "" },
308
+ { "tag": "946", "required": "a", "key": "abfnp" },
309
+ // Copied from 246. However, final version might contain some elements from field 245 as well
310
+ { "tag": "960", "required": "" },
311
+ { "tag": "973", "required": "w", "key": "w" },
312
+ // Viola multi-hosts
313
+ { "tag": "995", "required": "" },
314
+ { "tag": "CAT", "required": "" },
315
+ { "tag": "LOW", "required": "" },
316
+ { "tag": "SID", "required": "" }
317
+ ];
1208
318
  function constraintToValue(tagsConstraints, constraintName) {
1209
319
  if (constraintName in tagsConstraints) {
1210
320
  return tagsConstraints[constraintName];
1211
321
  }
1212
- return null; // NB! "" might mean "apply to everything" (eg. 040.key) while null means that it is not applied.
322
+ return null;
1213
323
  }
1214
- function getMergeConstraintsForTag(tag, constraintName) {
1215
- const tagsConstraintsArray = mergeConstraints.filter(entry => tag === entry.tag);
324
+ export function getMergeConstraintsForTag(tag, constraintName) {
325
+ const tagsConstraintsArray = mergeConstraints.filter((entry) => tag === entry.tag);
1216
326
  if (tagsConstraintsArray.length === 0) {
1217
- debugDev(`WARNING\tNo key found for ${tag}. Returning NULL!`);
327
+ debugDev(`WARNING No key found for ${tag}. Returning NULL!`);
1218
328
  return null;
1219
329
  }
1220
- // NB! should we support multiple contains for a field? Eg. 505$a vs 505($tg)+
1221
330
  if (tagsConstraintsArray.length > 1) {
1222
- debugDev(`WARNING\tMultiple values for '${constraintName}' (N=${tagsConstraintsArray.length}) found in ${tag}. Using first values.`);
331
+ debugDev(`WARNING Multiple values for '${constraintName}' (N=${tagsConstraintsArray.length}) found in ${tag}. Using first values.`);
1223
332
  }
1224
333
  return constraintToValue(tagsConstraintsArray[0], constraintName);
1225
334
  }
1226
- //# sourceMappingURL=mergeConstraints.js.map
335
+ //# sourceMappingURL=mergeConstraints.js.map