@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,76 +1,44 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = _default;
7
- exports.removeIndividualInferiorDatafields = removeIndividualInferiorDatafields;
8
- exports.removeInferiorChains = removeInferiorChains;
9
- exports.removeInferiorDatafields = removeInferiorDatafields;
10
- var _debug = _interopRequireDefault(require("debug"));
11
- var _removeDuplicateDataFields = require("./removeDuplicateDataFields");
12
- var _subfield6Utils = require("./subfield6Utils");
13
- var _utils = require("./utils");
14
- var _subfield8Utils = require("./subfield8Utils");
15
- var _prepublicationUtils = require("./prepublicationUtils");
16
- var _normalizeFieldForComparison = require("./normalizeFieldForComparison");
17
- var _normalizeUtf8Diacritics = require("./normalize-utf8-diacritics");
18
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
19
- // Relocated from melinda-marc-record-merge-reducers (and renamed)
20
-
21
- // NB! This validator handles only full fields, and does not support subfield $8 removal.
22
- // Also, having multiple $8 subfields in same fields is not supported.
23
- // If this functionality is needed, see removeDuplicateDatafields.js for examples of subfield-only stuff.
24
- const debug = (0, _debug.default)('@natlibfi/marc-record-validators-melinda:removeInferiorDataFields');
25
- function _default() {
1
+ import createDebugLogger from "debug";
2
+ import { fieldToChain, sameField } from "./removeDuplicateDataFields.js";
3
+ import { fieldGetOccurrenceNumberPairs, fieldHasValidSubfield6, fieldSevenToOneOccurrenceNumber, fieldsToNormalizedString } from "./subfield6Utils.js";
4
+ import { fieldHasSubfield, fieldsToString, fieldToString, nvdebug, uniqArray } from "./utils.js";
5
+ import { fieldHasValidSubfield8 } from "./subfield8Utils.js";
6
+ import { encodingLevelIsBetterThanPrepublication, fieldRefersToKoneellisestiTuotettuTietue, getEncodingLevel } from "./prepublicationUtils.js";
7
+ import { cloneAndNormalizeFieldForComparison } from "./normalizeFieldForComparison.js";
8
+ import { fixComposition, precomposeFinnishLetters } from "./normalize-utf8-diacritics.js";
9
+ const debug = createDebugLogger("@natlibfi/marc-record-validators-melinda:removeInferiorDataFields");
10
+ export default function() {
26
11
  return {
27
- description: 'Remove subset data fields. Certain exceptions apply, mainly too complicated for chained fields',
12
+ description: "Remove subset data fields. Certain exceptions apply, mainly too complicated for chained fields",
28
13
  validate,
29
14
  fix
30
15
  };
31
16
  function fix(record) {
32
- (0, _utils.nvdebug)('Fix record: remove inferior (eg. subset) data fields', debug);
33
- const res = {
34
- message: [],
35
- fix: [],
36
- valid: true
37
- };
17
+ nvdebug("Fix record: remove inferior (eg. subset) data fields", debug);
18
+ const res = { message: [], fix: [], valid: true };
38
19
  removeInferiorDatafields(record, true);
39
- // This can not really fail...
40
20
  return res;
41
21
  }
42
22
  function validate(record) {
43
- // Check max, and check number of different indexes
44
- (0, _utils.nvdebug)('Validate record: remove inferior (eg. subset) data fields', debug);
23
+ nvdebug("Validate record: remove inferior (eg. subset) data fields", debug);
45
24
  const duplicates = removeInferiorDatafields(record, false);
46
- const res = {
47
- message: duplicates
48
- };
25
+ const res = { message: duplicates };
49
26
  res.valid = res.message.length < 1;
50
27
  return res;
51
28
  }
52
29
  }
53
30
  function deriveInferiorChains(fields, record) {
54
- //nvdebug(`======= GOT ${fields.length} FIELDS TO CHAINIFY`);
55
31
  const hash = {};
56
- fields.forEach(f => fieldToChainToDeletables(f)); // eslint-disable-line array-callback-return
57
-
32
+ fields.forEach((f) => fieldToChainToDeletables(f));
58
33
  return hash;
59
-
60
- //nvdebug(`WP1: GOT ${todoList.length} CHAINS`);
61
-
62
- // here we map deletableStringObject[str] => field. The idea is to help debugging. We don't actually need the field object...
63
- //return deriveChainDeletables(todoList);
64
-
65
34
  function fieldToChainToDeletables(field) {
66
- const chain = (0, _removeDuplicateDataFields.fieldToChain)(field, record);
35
+ const chain = fieldToChain(field, record);
67
36
  if (chain.length < 2) {
68
37
  return;
69
38
  }
70
- const chainAsString = (0, _subfield6Utils.fieldsToNormalizedString)(chain, 0, true, true);
39
+ const chainAsString = fieldsToNormalizedString(chain, 0, true, true);
71
40
  const arr = deriveChainDeletables([chainAsString]);
72
- //nvdebug(`GOT ${arr.length} DELETABLES FOR ${chainAsString}`);
73
- arr.forEach(val => {
41
+ arr.forEach((val) => {
74
42
  if (!(val in hash)) {
75
43
  hash[val] = field;
76
44
  }
@@ -78,19 +46,13 @@ function deriveInferiorChains(fields, record) {
78
46
  }
79
47
  function deriveChainDeletables(todoList, deletables = []) {
80
48
  const [chainAsString, ...stillToDo] = todoList;
81
- if (chainAsString === undefined) {
49
+ if (chainAsString === void 0) {
82
50
  return deletables;
83
51
  }
84
-
85
- // Fix MRA-476 (part 1): one $6 value can be worse than the other
86
- const withoutScriptIdentificationCode = chainAsString.replace(/( ‡6 [0-9X][0-9][0-9]-(?:XX|[0-9]+))\/[^ ]+/u, '$1');
87
-
88
- // Remove keepless versions:
89
- const keepless = chainAsString.replace(/ ‡9 [A-Z]+<KEEP>/u, '');
90
-
91
- // MRA-433: 490 ind1=1 vs ind1=0: remove latter (luckily no 2nd indicator etc)
92
- const linked490Ind1 = chainAsString.replace(/^490 1/u, '490 0').replace(/\t880 1/ug, '\t880 0');
93
- const arr = [withoutScriptIdentificationCode, keepless, linked490Ind1].filter(val => val !== chainAsString);
52
+ const withoutScriptIdentificationCode = chainAsString.replace(/( ‡6 [0-9X][0-9][0-9]-(?:XX|[0-9]+))\/[^ ]+/u, "$1");
53
+ const keepless = chainAsString.replace(/ ‡9 [A-Z]+<KEEP>/u, "");
54
+ const linked490Ind1 = chainAsString.replace(/^490 1/u, "490 0").replace(/\t880 1/ug, " 880 0");
55
+ const arr = [withoutScriptIdentificationCode, keepless, linked490Ind1].filter((val) => val !== chainAsString);
94
56
  if (arr.length > 0) {
95
57
  return deriveChainDeletables([...stillToDo, ...arr], [...deletables, ...arr]);
96
58
  }
@@ -98,147 +60,104 @@ function deriveInferiorChains(fields, record) {
98
60
  }
99
61
  }
100
62
  function isRelevantChain6(field, record) {
101
- //Can't be a chain:
102
- if (!(0, _subfield6Utils.fieldHasValidSubfield6)(field) && !(0, _subfield8Utils.fieldHasValidSubfield8)(field)) {
63
+ if (!fieldHasValidSubfield6(field) && !fieldHasValidSubfield8(field)) {
103
64
  return false;
104
65
  }
105
- // Too short to be a chain:
106
- const chain = (0, _removeDuplicateDataFields.fieldToChain)(field, record);
66
+ const chain = fieldToChain(field, record);
107
67
  if (chain.length < 2) {
108
68
  return false;
109
69
  }
110
- // No field can contains no more than one subfield $6
111
- if (chain.some(f => f.subfields.filter(sf => sf.code === '6').length > 1)) {
70
+ if (chain.some((f) => f.subfields.filter((sf) => sf.code === "6").length > 1)) {
112
71
  return false;
113
72
  }
114
-
115
- // Check whether our field is the head of a chain:
116
- return (0, _removeDuplicateDataFields.sameField)(field, chain[0]);
73
+ return sameField(field, chain[0]);
117
74
  }
118
- function removeInferiorChains(record, fix = true) {
119
- const fields = record.fields.filter(f => isRelevantChain6(f, record));
120
- //nvdebug(`WP2.0: GOT ${fields.length} chain(s)`);
121
-
75
+ export function removeInferiorChains(record, fix = true) {
76
+ const fields = record.fields.filter((f) => isRelevantChain6(f, record));
122
77
  const deletableChainsAsKeys = deriveInferiorChains(fields, record);
123
78
  const nChains = Object.keys(deletableChainsAsKeys).length;
124
- //nvdebug(`WP2: GOT ${nChains} chain(s)`);
125
79
  if (nChains === 0) {
126
80
  return [];
127
81
  }
128
-
129
- //nvdebug(`removeInferiorChains() has ${fields.length} fields-in-chain(s), and a list of ${nChains} deletable(s)`);
130
-
131
82
  return innerRemoveInferiorChains(fields);
132
- function innerRemoveInferiorChains(fields, deletedStringsArray = []) {
133
- const [currField, ...remainingFields] = fields;
134
- if (currField === undefined) {
83
+ function innerRemoveInferiorChains(fields2, deletedStringsArray = []) {
84
+ const [currField, ...remainingFields] = fields2;
85
+ if (currField === void 0) {
135
86
  return deletedStringsArray;
136
87
  }
137
- const chain = (0, _removeDuplicateDataFields.fieldToChain)(currField, record);
138
- if (chain.length === 0 || !(0, _removeDuplicateDataFields.sameField)(currField, chain[0])) {
88
+ const chain = fieldToChain(currField, record);
89
+ if (chain.length === 0 || !sameField(currField, chain[0])) {
139
90
  return innerRemoveInferiorChains(remainingFields, deletedStringsArray);
140
91
  }
141
- const chainAsString = (0, _subfield6Utils.fieldsToNormalizedString)(chain, 0, true, true);
92
+ const chainAsString = fieldsToNormalizedString(chain, 0, true, true);
142
93
  if (!(chainAsString in deletableChainsAsKeys)) {
143
94
  return innerRemoveInferiorChains(remainingFields, deletedStringsArray);
144
95
  }
145
96
  const triggeringField = deletableChainsAsKeys[chainAsString];
146
- const triggeringChain = (0, _removeDuplicateDataFields.fieldToChain)(triggeringField, record);
147
-
148
- // If the inferior (deletable) chain is 1XX-based, convert the triggering better chain from 7XX to 1XX:
97
+ const triggeringChain = fieldToChain(triggeringField, record);
149
98
  if (chainContains1XX(chain)) {
150
- triggeringChain.forEach(f => sevenToOne(f, triggeringChain)); // eslint-disable-line array-callback-return
99
+ triggeringChain.forEach((f) => sevenToOne(f, triggeringChain));
151
100
  }
152
- //nvdebug(`iRIS6C: ${chainAsString}`);
153
- const deletedString = (0, _utils.fieldsToString)(chain);
154
- const message = `DEL: '${deletedString}' REASON: '${(0, _utils.fieldsToString)(triggeringChain)}'`;
101
+ const deletedString = fieldsToString(chain);
102
+ const message = `DEL: '${deletedString}' REASON: '${fieldsToString(triggeringChain)}'`;
155
103
  if (fix) {
156
- //nvdebug(`INFERIOR $6 CHAIN REMOVAL: ${message}}`, debug);
157
- chain.forEach(field => record.removeField(field)); // eslint-disable-line array-callback-return
104
+ chain.forEach((field) => record.removeField(field));
158
105
  }
159
106
  return innerRemoveInferiorChains(remainingFields, [...deletedStringsArray, message]);
160
107
  }
161
108
  function chainContains1XX(chain) {
162
- return chain.some(f => f.tag.substring(0, 1) === '1');
109
+ return chain.some((f) => f.tag.substring(0, 1) === "1");
163
110
  }
164
111
  function sevenToOne(field, chain) {
165
- // Change 7XX field to 1XX field. Also handle the corresponding 880$6 7XX-NN subfields
166
- // NB! This function should be called only if the original 1XX gets deleted!
167
- if (!['700', '710', '711', '730'].includes(field.tag)) {
112
+ if (!["700", "710", "711", "730"].includes(field.tag)) {
168
113
  return;
169
114
  }
170
- // Retag field 7XX as 1XX and fix corresponding occurrence numbers as well:
171
- const pairs = (0, _subfield6Utils.fieldGetOccurrenceNumberPairs)(field, chain);
115
+ const pairs = fieldGetOccurrenceNumberPairs(field, chain);
172
116
  field.tag = `1${field.tag.substring(1)}`;
173
- // There should always be one pair, but I'm not sanity-checking this
174
- pairs.forEach(pairedField => (0, _subfield6Utils.fieldSevenToOneOccurrenceNumber)(pairedField)); // eslint-disable-line array-callback-return
117
+ pairs.forEach((pairedField) => fieldSevenToOneOccurrenceNumber(pairedField));
175
118
  }
176
119
  }
177
120
  function getIdentifierlessAndKeeplessSubsets(fieldAsString) {
178
- // The rules below are not perfect (in complex cases they don't catch all permutations), but good enough:
179
- // Remove identifier(s) (MELKEHITYS-2383-ish):
180
-
181
- const identifierlessString = fieldAsString.replace(/ ‡[01] [^‡]+($| ‡)/u, '$1');
182
- const keeplessString = fieldAsString.replace(/ ‡9 [A-Z]+<KEEP>/u, '');
183
- return [identifierlessString, keeplessString].filter(val => val !== fieldAsString);
121
+ const identifierlessString = fieldAsString.replace(/ ‡[01] [^‡]+($| )/u, "$1");
122
+ const keeplessString = fieldAsString.replace(/ ‡9 [A-Z]+<KEEP>/u, "");
123
+ return [identifierlessString, keeplessString].filter((val) => val !== fieldAsString);
184
124
  }
185
125
  function deriveIndividualDeletables490(todoList, deletables = []) {
186
126
  const [fieldAsString, ...stillToDo] = todoList;
187
- if (fieldAsString === undefined) {
127
+ if (fieldAsString === void 0) {
188
128
  return deletables;
189
129
  }
190
- //nvdebug(`PROCESS ${fieldAsString}`);
191
130
  if (!fieldAsString.match(/^490/u)) {
192
131
  return deriveIndividualDeletables490(stillToDo, deletables);
193
132
  }
194
-
195
- // $6-less version (keep this first)
196
- const sixless = fieldAsString.replace(/6 [^‡]+ ‡/u, '');
197
-
198
- // Without final $v or $x:
199
- const withoutFinalVOrX = fieldAsString.replace(/ *[;,] ‡[vx] [^‡]+$/u, '');
200
- // Add intermediate $x-less version
201
- const xless = fieldAsString.replace(/, ‡x [^‡]+(, ‡x| ; ‡v)/u, '$1');
202
-
203
- // Add $xv-less version (handled by recursion?)
204
- const xvless = fieldAsString.replace(/, ‡x [^‡]+ ‡v [^‡]+$/u, '');
205
-
206
- // MRA-433-ish (non-chain): 490 ind1=1 vs ind1=0: remove latter
133
+ const sixless = fieldAsString.replace(/ ‡6 [^‡]+ ‡/u, " \u2021");
134
+ const withoutFinalVOrX = fieldAsString.replace(/ *[;,] ‡[vx] [^‡]+$/u, "");
135
+ const xless = fieldAsString.replace(/,x [^‡]+(, ‡x| ; v)/u, "$1");
136
+ const xvless = fieldAsString.replace(/, ‡x [^‡]+ ‡v [^‡]+$/u, "");
207
137
  const modifiedInd2 = fieldAsString.match(/^490 1/u) ? `490 0${fieldAsString.substring(5)}` : fieldAsString;
208
- const arr = [sixless, withoutFinalVOrX, xless, xvless, modifiedInd2].filter(val => val !== fieldAsString);
209
-
210
- /*
211
- if (arr.length) {
212
- nvdebug(`${arr.length} derivation(s) for ${fieldAsString}`);
213
- nvdebug(arr.join('\n'));
214
- }
215
- */
138
+ const arr = [sixless, withoutFinalVOrX, xless, xvless, modifiedInd2].filter((val) => val !== fieldAsString);
216
139
  return arr;
217
140
  }
218
141
  function deriveIndividualDeletables(record) {
219
- const todoList = record.fields.map(f => (0, _utils.fieldToString)(f));
220
- //const finishedRecord = encodingLevelIsBetterThanPrepublication(getEncodingLevel(record));
221
-
142
+ const todoList = record.fields.map((f) => fieldToString(f));
222
143
  const deletableStringsArray = processTodoList(todoList);
223
144
  const inferiorTerms = getInferiorTerms(record);
224
- return (0, _utils.uniqArray)([...deletableStringsArray, ...inferiorTerms]);
225
- function getInferiorTerms(record) {
226
- const inputFields = record.fields.filter(f => ['648', '650', '651'].includes(f.tag) && f.subfields);
227
- const result = inputFields.flatMap(f => fieldToInferiorFields(f));
228
-
229
- // console.log(result.join('\n')); // eslint-disable-line no-console
145
+ return uniqArray([...deletableStringsArray, ...inferiorTerms]);
146
+ function getInferiorTerms(record2) {
147
+ const inputFields = record2.fields.filter((f) => ["648", "650", "651"].includes(f.tag) && f.subfields);
148
+ const result = inputFields.flatMap((f) => fieldToInferiorFields(f));
230
149
  return result;
231
150
  }
232
151
  function fieldToInferiorFields(field) {
233
- const aArray = field.subfields.filter(sf => sf.code === 'a');
234
- if (field.tag === '650') {
235
- return aArray.flatMap(sf => [`653 ## ‡a ${sf.value}`, `653 #0 ‡a ${sf.value}`]);
152
+ const aArray = field.subfields.filter((sf) => sf.code === "a");
153
+ if (field.tag === "650") {
154
+ return aArray.flatMap((sf) => [`653 ## \u2021a ${sf.value}`, `653 #0 \u2021a ${sf.value}`]);
236
155
  }
237
- return aArray.map(sf => `653 ## ‡a ${sf.value}`);
156
+ return aArray.map((sf) => `653 ## \u2021a ${sf.value}`);
238
157
  }
239
158
  function processTodoList(thingsToDo, deletables = []) {
240
159
  const [currString, ...stillToDo] = thingsToDo;
241
- if (currString === undefined) {
160
+ if (currString === void 0) {
242
161
  return deletables;
243
162
  }
244
163
  const accentless = getAccentlessVersion(currString);
@@ -246,155 +165,114 @@ function deriveIndividualDeletables(record) {
246
165
  const subsets = getIdentifierlessAndKeeplessSubsets(currString);
247
166
  const moreToDo = [...accentless, ...d490, ...subsets];
248
167
  if (currString.match(/^[1678]00/u)) {
249
- // Proof-of-concept rule. Should be improved eventually...
250
168
  if (currString.match(/, ‡e [^‡]+\.$/u)) {
251
- const tmp = currString.replace(/, ‡e [^‡]+\.$/u, '.');
169
+ const tmp = currString.replace(/, ‡e [^‡]+\.$/u, ".");
252
170
  return processTodoList([tmp, ...stillToDo, ...moreToDo], [...deletables, tmp]);
253
171
  }
254
172
  }
255
173
  if (currString.match(/^500 ## ‡a Lisäpainokset: Lisäpainos /u)) {
256
- // MET-569
257
- const tmp1 = currString.replace(' Lisäpainos ', ' [Lisäpainos] ');
258
- const tmp2 = currString.replace(' Lisäpainos ', ' ');
174
+ const tmp1 = currString.replace(" Lis\xE4painos ", " [Lis\xE4painos] ");
175
+ const tmp2 = currString.replace(" Lis\xE4painos ", " ");
259
176
  if (tmp1 !== currString && tmp2 !== currString) {
260
177
  return processTodoList([...stillToDo, ...moreToDo], [...deletables, tmp1, tmp2]);
261
178
  }
262
179
  }
263
180
  if (currString.match(/^500 ## ‡a Lisäpainokset: \[Lisäpainos\] /u)) {
264
- // MET-569
265
- const tmp = currString.replace(' [Lisäpainos] ', ' ');
181
+ const tmp = currString.replace(" [Lis\xE4painos] ", " ");
266
182
  if (tmp !== currString) {
267
183
  return processTodoList([...stillToDo, ...moreToDo], [...deletables, tmp]);
268
184
  }
269
185
  }
270
186
  if (currString.match(/^500 ## ‡a Ei vastaanotettu\.$/u)) {
271
- // MELKEHITYS-3147
272
- return processTodoList([...stillToDo, ...moreToDo], [...deletables, '500 ## ‡a EI VASTAANOTETTU.']);
187
+ return processTodoList([...stillToDo, ...moreToDo], [...deletables, "500 ## \u2021a EI VASTAANOTETTU."]);
273
188
  }
274
189
  if (currString.match(/^500 ## ‡a Ei ilmesty\.$/u)) {
275
- // MELKEHITYS-3147
276
- return processTodoList([...stillToDo, ...moreToDo], [...deletables, '500 ## ‡a EI ILMESTY.']);
190
+ return processTodoList([...stillToDo, ...moreToDo], [...deletables, "500 ## \u2021a EI ILMESTY."]);
277
191
  }
278
192
  if (currString.match(/^505 .0.*-- ‡t/u)) {
279
- // MRA-413-ish
280
- const tmp = currString.replace(/ -- ‡t /gu, ' -- ').
281
- // remove non-initial $t subfields
282
- replace(/ ‡[rg] /gu, ' ').
283
- // remove $r and $g subfields
284
- replace(/ ‡t /u, ' ‡a ').
285
- // change first $t to $a
286
- // ind2: '1' => '#':
287
- replace(/^505 (.)0/u, '505 $1#');
193
+ const tmp = currString.replace(/ -- ‡t /gu, " -- ").replace(/ ‡[rg] /gu, " ").replace(/ ‡t /u, " \u2021a ").replace(/^505 (.)0/u, "505 $1#");
288
194
  if (tmp !== currString) {
289
195
  return processTodoList([tmp, ...stillToDo, ...moreToDo], [...deletables, tmp]);
290
196
  }
291
- //nvdebug(`505 ORIGINAL: '${fieldAsString}'`)
292
- //nvdebug(`505 DERIVATE: '${tmp}'`)
293
197
  }
294
198
  if (currString.match(/^594 ## ‡a Ei vastaanotettu ‡5 FENNI$/u)) {
295
- // MELKEHITYS-3147
296
- return processTodoList([...stillToDo, ...moreToDo], [...deletables, '594 ## ‡a EI VASTAANOTETTU ‡5 FENNI']);
199
+ return processTodoList([...stillToDo, ...moreToDo], [...deletables, "594 ## \u2021a EI VASTAANOTETTU \u20215 FENNI"]);
297
200
  }
298
201
  if (currString.match(/^594 ## ‡a Ei ilmesty ‡5 FENNI$/u)) {
299
- // MELKEHITYS-3147
300
- return processTodoList([...stillToDo, ...moreToDo], [...deletables, '594 ## ‡a EI ILMESTY ‡5 FENNI']);
202
+ return processTodoList([...stillToDo, ...moreToDo], [...deletables, "594 ## \u2021a EI ILMESTY \u20215 FENNI"]);
301
203
  }
302
-
303
- // MET-381: remove occurence number TAG-00, if TAG-NN existists
304
204
  if (currString.match(/^880.* ‡6 [0-9][0-9][0-9]-(?:[1-9][0-9]|0[1-9])/u)) {
305
- const tmp = currString.replace(/( ‡6 [0-9][0-9][0-9])-[0-9]+/u, '$1-00');
306
- //nvdebug(`MET-381: ADD TO DELETABLES: '${tmp}'`);
307
- //deletableStringsArray.push(tmp);
205
+ const tmp = currString.replace(/( ‡6 [0-9][0-9][0-9])-[0-9]+/u, "$1-00");
308
206
  if (tmp.match(/ ‡6 [0-9][0-9][0-9]-00\/[^ ]+ /u)) {
309
- const tmp2 = tmp.replace(/( ‡6 [0-9][0-9][0-9]-00)[^ ]+/u, '$1');
310
- //nvdebug(`MET-381: ADD TO DELETABLES: '${tmp2}'`);
207
+ const tmp2 = tmp.replace(/( ‡6 [0-9][0-9][0-9]-00)[^ ]+/u, "$1");
311
208
  return processTodoList([...stillToDo, ...moreToDo], [...deletables, tmp, tmp2]);
312
209
  }
313
210
  return processTodoList([...stillToDo, ...moreToDo], [...deletables, tmp]);
314
211
  }
315
-
316
- // MET-575 (merge: applies in postprocessing)
317
- const inferiorTerms = getPrepublicationTerms(currString);
318
- const newDeletables = [...deletables, ...subsets, ...accentless, ...d490, ...inferiorTerms];
212
+ const inferiorTerms2 = getPrepublicationTerms(currString);
213
+ const newDeletables = [...deletables, ...subsets, ...accentless, ...d490, ...inferiorTerms2];
319
214
  if (subsets.length) {
320
215
  return processTodoList([...stillToDo, ...moreToDo], newDeletables);
321
216
  }
322
217
  return processTodoList([...stillToDo, ...moreToDo], newDeletables);
323
218
  }
324
219
  function getAccentlessVersion(string) {
325
- // MET-527
326
- //nvdebug(`START: '${string}`);
327
- // This is a sanity check: if precomposition does something, there's something wrong, and we don't want to proceed..
328
- if (string !== (0, _normalizeUtf8Diacritics.precomposeFinnishLetters)(string)) {
220
+ if (string !== precomposeFinnishLetters(string)) {
329
221
  return [];
330
222
  }
331
- const accentless = String((0, _normalizeUtf8Diacritics.fixComposition)(string)).replace(/\p{Diacritic}/gu, '');
332
- //nvdebug(`FROM '${string}'\n TO '${accentless}'`);
223
+ const accentless = String(fixComposition(string)).replace(/\p{Diacritic}/gu, "");
333
224
  if (accentless === string) {
334
- // Don't self-destruct
335
225
  return [];
336
226
  }
337
227
  return [accentless];
338
228
  }
339
229
  function getPrepublicationTerms(fieldAsString) {
340
230
  if (fieldAsString.match(/^653./u)) {
341
- // MET-528 (extented by MET-575)
342
- return [`${fieldAsString} ‡g ENNAKKOTIETO`, `${fieldAsString} ‡g Ennakkotieto`, `${fieldAsString} ‡g ennakkotieto`, `${fieldAsString} ‡g ENNAKKOTIETO.`, `${fieldAsString} ‡g Ennakkotieto.`, `${fieldAsString} ‡g ennakkotieto.`];
231
+ return [`${fieldAsString} \u2021g ENNAKKOTIETO`, `${fieldAsString} \u2021g Ennakkotieto`, `${fieldAsString} \u2021g ennakkotieto`, `${fieldAsString} \u2021g ENNAKKOTIETO.`, `${fieldAsString} \u2021g Ennakkotieto.`, `${fieldAsString} \u2021g ennakkotieto.`];
343
232
  }
344
233
  return [];
345
234
  }
346
235
  }
347
236
  function fieldToNormalizedString(field) {
348
- const normalizedField = (0, _normalizeFieldForComparison.cloneAndNormalizeFieldForComparison)(field);
349
- return (0, _utils.fieldToString)(normalizedField);
237
+ const normalizedField = cloneAndNormalizeFieldForComparison(field);
238
+ return fieldToString(normalizedField);
350
239
  }
351
240
  function deriveIndividualNormalizedDeletables(record) {
352
- // MET-461:
353
- const encodingLevel = (0, _prepublicationUtils.getEncodingLevel)(record);
354
- const recordIsFinished = (0, _prepublicationUtils.encodingLevelIsBetterThanPrepublication)(encodingLevel);
355
- const met495 = encodingLevel === '2' && record.fields.some(f => f.tag === '500' && (0, _prepublicationUtils.fieldRefersToKoneellisestiTuotettuTietue)(f));
241
+ const encodingLevel = getEncodingLevel(record);
242
+ const recordIsFinished = encodingLevelIsBetterThanPrepublication(encodingLevel);
243
+ const met495 = encodingLevel === "2" && record.fields.some((f) => f.tag === "500" && fieldRefersToKoneellisestiTuotettuTietue(f));
356
244
  if (!recordIsFinished || met495) {
357
245
  return [];
358
246
  }
359
- const relevantFields = record.fields.filter(f => ['245', '246'].includes(f.tag) && (0, _utils.fieldHasSubfield)(f, 'a'));
247
+ const relevantFields = record.fields.filter((f) => ["245", "246"].includes(f.tag) && fieldHasSubfield(f, "a"));
360
248
  return deriveDeletable946s(relevantFields);
361
249
  function deriveDeletable946s(fields, results = []) {
362
250
  const [currField, ...remainingFields] = fields;
363
- if (currField === undefined) {
251
+ if (currField === void 0) {
364
252
  return results;
365
253
  }
366
254
  const fieldAsNormalizedString = fieldToNormalizedString(currField);
367
- const tmp = fieldAsNormalizedString.replace(/^(?:...) ../u, '946 ##').
368
- // <= Change tag to 946 and indicators to '##'
369
- replace(' ‡a ', ' ‡i nimeke onixissa ‡a ').
370
- // Add $i before $a. NB! This is added in the normalized lower-cased form!
371
- replace(/(?: \/)? ‡c[^‡]+$/u, ''); // Remove $c. (Can $c be non-last?)
372
- const candArray = [tmp, `${tmp} ‡5 MELINDA`].filter(val => val !== fieldAsNormalizedString);
255
+ const tmp = fieldAsNormalizedString.replace(/^(?:...) ../u, "946 ##").replace(" \u2021a ", " \u2021i nimeke onixissa \u2021a ").replace(/(?: \/)? ‡c[^‡]+$/u, "");
256
+ const candArray = [tmp, `${tmp} \u20215 MELINDA`].filter((val) => val !== fieldAsNormalizedString);
373
257
  if (candArray.length) {
374
258
  return deriveDeletable946s(remainingFields, [...results, ...candArray]);
375
259
  }
376
260
  return deriveDeletable946s(remainingFields, results);
377
261
  }
378
262
  }
379
- function removeIndividualInferiorDatafields(record, fix = true) {
380
- // No $6 nor $8 in field
263
+ export function removeIndividualInferiorDatafields(record, fix = true) {
381
264
  const deletableFieldsAsStrings = deriveIndividualDeletables(record);
382
265
  const deletableFieldsAsNormalizedStrings = deriveIndividualNormalizedDeletables(record);
383
-
384
- // nvdebug(`Deletables:\n ${deletableFieldsAsStrings.join('\n ')}`);
385
- // nvdebug(`Normalized deletables:\n ${deletableFieldsAsNormalizedStrings.join('\n ')}`);
386
-
387
- const hits = record.fields.filter(field => isDeletableField(field));
388
- const deletedFieldsAsStrings = hits.map(f => (0, _utils.fieldToString)(f));
266
+ const hits = record.fields.filter((field) => isDeletableField(field));
267
+ const deletedFieldsAsStrings = hits.map((f) => fieldToString(f));
389
268
  if (fix) {
390
- hits.forEach(field => {
391
- //nvdebug(`Remove inferior field: ${fieldToString(field)}`, debug);
269
+ hits.forEach((field) => {
392
270
  record.removeField(field);
393
271
  });
394
272
  }
395
273
  return deletedFieldsAsStrings;
396
274
  function isDeletableField(field) {
397
- const fieldAsString = (0, _utils.fieldToString)(field);
275
+ const fieldAsString = fieldToString(field);
398
276
  if (deletableFieldsAsStrings.includes(fieldAsString)) {
399
277
  return true;
400
278
  }
@@ -405,16 +283,14 @@ function removeIndividualInferiorDatafields(record, fix = true) {
405
283
  return false;
406
284
  }
407
285
  }
408
- function removeInferiorDatafields(record, fix = true) {
409
- const removables = removeIndividualInferiorDatafields(record, fix); // Lone fields
410
- //const removables8 = removeDuplicateSubfield8Chains(record, fix); // Lone subfield $8 chains
411
- const removables6 = removeInferiorChains(record, fix); // Lone subfield $6 chains
412
- // HOW TO HANDLE $6+$8 combos? Skipping is relatively OK.
413
-
414
- (0, _utils.nvdebug)(`REMOVABLES:\n ${removables.join('\n ')}`, debug);
415
- (0, _utils.nvdebug)(`REMOVABLES 6:\n ${removables6.join('\n ')}`, debug);
416
- const removablesAll = removables.concat(removables6); //.concat(removables8);
417
-
286
+ export function removeInferiorDatafields(record, fix = true) {
287
+ const removables = removeIndividualInferiorDatafields(record, fix);
288
+ const removables6 = removeInferiorChains(record, fix);
289
+ nvdebug(`REMOVABLES:
290
+ ${removables.join("\n ")}`, debug);
291
+ nvdebug(`REMOVABLES 6:
292
+ ${removables6.join("\n ")}`, debug);
293
+ const removablesAll = removables.concat(removables6);
418
294
  return removablesAll;
419
295
  }
420
- //# sourceMappingURL=removeInferiorDataFields.js.map
296
+ //# sourceMappingURL=removeInferiorDataFields.js.map