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

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 (546) 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/index.js +58 -58
  338. package/src/indicator-fixes.js +3 -3
  339. package/src/{indicator-fixes.spec.js → indicator-fixes.test.js} +9 -12
  340. package/src/isbn-issn.js +1 -1
  341. package/src/{isbn-issn.spec.js → isbn-issn.test.js} +20 -22
  342. package/src/{item-language.spec.js → item-language.test.js} +21 -22
  343. package/src/merge-fields/controlSubfields.js +1 -1
  344. package/src/merge-fields/counterpartField.js +8 -9
  345. package/src/merge-fields/index.js +1 -1
  346. package/src/merge-fields/mergableIndicator.js +1 -1
  347. package/src/merge-fields/mergeField.js +6 -6
  348. package/src/merge-fields/mergeIndicator.js +1 -1
  349. package/src/merge-fields/mergeOrAddPostprocess.js +4 -4
  350. package/src/merge-fields/mergeOrAddSubfield.js +2 -2
  351. package/src/merge-fields/mergeSubfield.js +4 -4
  352. package/src/merge-fields/removeDuplicateSubfields.js +2 -2
  353. package/src/{merge-fields.spec.js → merge-fields.test.js} +12 -13
  354. package/src/{mergeField500Lisapainokset.spec.js → mergeField500Lisapainokset.test.js} +12 -13
  355. package/src/mergeRelatorTermFields.js +5 -7
  356. package/src/{mergeRelatorTermFields.spec.js → mergeRelatorTermFields.test.js} +12 -13
  357. package/src/modernize-502.js +1 -1
  358. package/src/{modernize-502.spec.js → modernize-502.test.js} +12 -13
  359. package/src/multiple-subfield-0.js +3 -3
  360. package/src/{multiple-subfield-0.spec.js → multiple-subfield-0.test.js} +13 -13
  361. package/src/{non-breaking-space.spec.js → non-breaking-space.test.js} +12 -13
  362. package/src/normalize-dashes.js +2 -2
  363. package/src/{normalize-dashes.spec.js → normalize-dashes.test.js} +12 -13
  364. package/src/normalize-identifiers.js +1 -1
  365. package/src/{normalize-identifiers.spec.js → normalize-identifiers.test.js} +12 -13
  366. package/src/normalize-qualifying-information.js +2 -2
  367. package/src/{normalize-qualifying-information.spec.js → normalize-qualifying-information.test.js} +12 -13
  368. package/src/normalize-utf8-diacritics.js +2 -2
  369. package/src/{normalize-utf8-diacritics.spec.js → normalize-utf8-diacritics.test.js} +13 -13
  370. package/src/normalizeFieldForComparison.js +6 -6
  371. package/src/normalizeSubfieldValueForComparison.js +1 -1
  372. package/src/prepublicationUtils.js +4 -4
  373. package/src/punctuation/index.js +1 -1
  374. package/src/punctuation/rules/index.js +2 -2
  375. package/src/{punctuation.spec.js → punctuation.test.js} +12 -13
  376. package/src/punctuation2.js +4 -4
  377. package/src/{punctuation2.spec.js → punctuation2.test.js} +12 -13
  378. package/src/reindexSubfield6OccurenceNumbers.js +5 -7
  379. package/src/{reindexSubfield6OccurenceNumbers.spec.js → reindexSubfield6OccurenceNumbers.test.js} +12 -13
  380. package/src/removeDuplicateDataFields.js +11 -19
  381. package/src/{removeDuplicateDataFields.spec.js → removeDuplicateDataFields.test.js} +12 -13
  382. package/src/removeInferiorDataFields.js +11 -11
  383. package/src/{removeInferiorDataFields.spec.js → removeInferiorDataFields.test.js} +13 -13
  384. package/src/resolvable-ext-references-melinda.js +1 -1
  385. package/src/{resolvable-ext-references-melinda.spec.js → resolvable-ext-references-melinda.test.js} +42 -27
  386. package/src/resolveOrphanedSubfield6s.js +5 -5
  387. package/src/{resolveOrphanedSubfield6s.spec.js → resolveOrphanedSubfield6s.test.js} +13 -13
  388. package/src/sanitize-vocabulary-source-codes.js +4 -4
  389. package/src/{sanitize-vocabulary-source-codes.spec.js → sanitize-vocabulary-source-codes.test.js} +16 -14
  390. package/src/{sort-tags.spec.js → sort-tags.test.js} +9 -11
  391. package/src/sortFields.js +4 -4
  392. package/src/{sortFields.spec.js → sortFields.test.js} +12 -13
  393. package/src/sortRelatorTerms.js +3 -3
  394. package/src/{sortRelatorTerms.spec.js → sortRelatorTerms.test.js} +13 -13
  395. package/src/sortSubfields.js +1 -1
  396. package/src/{sortSubfields.spec.js → sortSubfields.test.js} +13 -13
  397. package/src/stripPunctuation.js +3 -3
  398. package/src/{stripPunctuation.spec.js → stripPunctuation.test.js} +13 -13
  399. package/src/subfield-exclusion.js +1 -1
  400. package/src/{subfield-exclusion.spec.js → subfield-exclusion.test.js} +45 -36
  401. package/src/subfield6Utils.js +6 -10
  402. package/src/subfield8Utils.js +4 -4
  403. package/src/subfieldValueNormalizations.js +3 -3
  404. package/src/{subfieldValueNormalizations.spec.js → subfieldValueNormalizations.test.js} +18 -14
  405. package/src/sync-007-and-300.js +2 -2
  406. package/src/{sync-007-and-300.spec.js → sync-007-and-300.test.js} +13 -13
  407. package/src/translate-terms.js +3 -3
  408. package/src/{translate-terms.spec.js → translate-terms.test.js} +13 -13
  409. package/src/{typeOfDate-008.spec.js → typeOfDate-008.test.js} +12 -13
  410. package/src/{unicode-decomposition.spec.js → unicode-decomposition.test.js} +10 -16
  411. package/src/update-field-540.js +2 -2
  412. package/src/{update-field-540.spec.js → update-field-540.test.js} +13 -10
  413. package/src/urn.js +2 -2
  414. package/src/{urn.spec.js → urn.test.js} +12 -13
  415. package/src/utils.js +3 -3
  416. package/test-fixtures/field-505-separators/03/expectedResult.json +3 -1
  417. package/test-fixtures/field-505-separators/03/record.json +3 -0
  418. package/test-fixtures/normalize-subfield-value/01/metadata.json +4 -1
  419. package/test-fixtures/normalize-subfield-value/01/record.json +3 -0
  420. package/test-fixtures/normalize-subfield-value/02/expectedResult.json +3 -1
  421. package/test-fixtures/normalize-subfield-value/02/metadata.json +2 -1
  422. package/test-fixtures/normalize-subfield-value/02/record.json +3 -0
  423. package/test-fixtures/sanitize-vocabulary-source-codes/f03/expectedResult.json +3 -1
  424. package/test-fixtures/sanitize-vocabulary-source-codes/f04/expectedResult.json +3 -1
  425. package/test-fixtures/sanitize-vocabulary-source-codes/v04/metadata.json +1 -4
  426. package/test-fixtures/sanitize-vocabulary-source-codes/v04/record.json +1 -1
  427. package/dist/access-rights.spec.js +0 -195
  428. package/dist/access-rights.spec.js.map +0 -1
  429. package/dist/addMissingField041.spec.js +0 -45
  430. package/dist/addMissingField041.spec.js.map +0 -1
  431. package/dist/addMissingField336.spec.js +0 -45
  432. package/dist/addMissingField336.spec.js.map +0 -1
  433. package/dist/addMissingField337.spec.js +0 -43
  434. package/dist/addMissingField337.spec.js.map +0 -1
  435. package/dist/addMissingField338.spec.js +0 -45
  436. package/dist/addMissingField338.spec.js.map +0 -1
  437. package/dist/cyrillux-usemarcon-replacement.spec.js +0 -45
  438. package/dist/cyrillux-usemarcon-replacement.spec.js.map +0 -1
  439. package/dist/cyrillux.spec.js +0 -46
  440. package/dist/cyrillux.spec.js.map +0 -1
  441. package/dist/disambiguateSeriesStatements.spec.js +0 -51
  442. package/dist/disambiguateSeriesStatements.spec.js.map +0 -1
  443. package/dist/double-commas.spec.js +0 -73
  444. package/dist/double-commas.spec.js.map +0 -1
  445. package/dist/duplicates-ind1.spec.js +0 -45
  446. package/dist/duplicates-ind1.spec.js.map +0 -1
  447. package/dist/empty-fields.spec.js +0 -118
  448. package/dist/empty-fields.spec.js.map +0 -1
  449. package/dist/ending-punctuation.spec.js +0 -2654
  450. package/dist/ending-punctuation.spec.js.map +0 -1
  451. package/dist/ending-whitespace.spec.js +0 -42
  452. package/dist/ending-whitespace.spec.js.map +0 -1
  453. package/dist/field-008-18-34-character-groups.spec.js +0 -51
  454. package/dist/field-008-18-34-character-groups.spec.js.map +0 -1
  455. package/dist/field-505-separators.spec.js +0 -51
  456. package/dist/field-505-separators.spec.js.map +0 -1
  457. package/dist/field-521-fix.spec.js +0 -51
  458. package/dist/field-521-fix.spec.js.map +0 -1
  459. package/dist/field-exclusion.spec.js +0 -1054
  460. package/dist/field-exclusion.spec.js.map +0 -1
  461. package/dist/field-structure.spec.js +0 -535
  462. package/dist/field-structure.spec.js.map +0 -1
  463. package/dist/fields-present.spec.js +0 -121
  464. package/dist/fields-present.spec.js.map +0 -1
  465. package/dist/fix-33X.spec.js +0 -45
  466. package/dist/fix-33X.spec.js.map +0 -1
  467. package/dist/fix-country-codes.spec.js +0 -51
  468. package/dist/fix-country-codes.spec.js.map +0 -1
  469. package/dist/fix-language-codes.spec.js +0 -44
  470. package/dist/fix-language-codes.spec.js.map +0 -1
  471. package/dist/fixRelatorTerms.spec.js +0 -51
  472. package/dist/fixRelatorTerms.spec.js.map +0 -1
  473. package/dist/fixed-fields.spec.js +0 -140
  474. package/dist/fixed-fields.spec.js.map +0 -1
  475. package/dist/identical-fields.spec.js +0 -99
  476. package/dist/identical-fields.spec.js.map +0 -1
  477. package/dist/indicator-fixes.spec.js +0 -51
  478. package/dist/indicator-fixes.spec.js.map +0 -1
  479. package/dist/isbn-issn.spec.js +0 -595
  480. package/dist/isbn-issn.spec.js.map +0 -1
  481. package/dist/item-language.spec.js +0 -306
  482. package/dist/item-language.spec.js.map +0 -1
  483. package/dist/melindaCustomMergeFields.json +0 -5120
  484. package/dist/merge-fields.spec.js +0 -51
  485. package/dist/merge-fields.spec.js.map +0 -1
  486. package/dist/mergeField500Lisapainokset.spec.js +0 -51
  487. package/dist/mergeField500Lisapainokset.spec.js.map +0 -1
  488. package/dist/mergeRelatorTermFields.spec.js +0 -51
  489. package/dist/mergeRelatorTermFields.spec.js.map +0 -1
  490. package/dist/modernize-502.spec.js +0 -49
  491. package/dist/modernize-502.spec.js.map +0 -1
  492. package/dist/multiple-subfield-0.spec.js +0 -51
  493. package/dist/multiple-subfield-0.spec.js.map +0 -1
  494. package/dist/non-breaking-space.spec.js +0 -42
  495. package/dist/non-breaking-space.spec.js.map +0 -1
  496. package/dist/normalize-dashes.spec.js +0 -51
  497. package/dist/normalize-dashes.spec.js.map +0 -1
  498. package/dist/normalize-identifiers.spec.js +0 -51
  499. package/dist/normalize-identifiers.spec.js.map +0 -1
  500. package/dist/normalize-qualifying-information.spec.js +0 -51
  501. package/dist/normalize-qualifying-information.spec.js.map +0 -1
  502. package/dist/normalize-utf8-diacritics.spec.js +0 -51
  503. package/dist/normalize-utf8-diacritics.spec.js.map +0 -1
  504. package/dist/punctuation.spec.js +0 -51
  505. package/dist/punctuation.spec.js.map +0 -1
  506. package/dist/punctuation2.spec.js +0 -51
  507. package/dist/punctuation2.spec.js.map +0 -1
  508. package/dist/reindexSubfield6OccurenceNumbers.spec.js +0 -51
  509. package/dist/reindexSubfield6OccurenceNumbers.spec.js.map +0 -1
  510. package/dist/removeDuplicateDataFields.spec.js +0 -51
  511. package/dist/removeDuplicateDataFields.spec.js.map +0 -1
  512. package/dist/removeInferiorDataFields.spec.js +0 -51
  513. package/dist/removeInferiorDataFields.spec.js.map +0 -1
  514. package/dist/resolvable-ext-references-melinda.spec.js +0 -166
  515. package/dist/resolvable-ext-references-melinda.spec.js.map +0 -1
  516. package/dist/resolveOrphanedSubfield6s.spec.js +0 -51
  517. package/dist/resolveOrphanedSubfield6s.spec.js.map +0 -1
  518. package/dist/sanitize-vocabulary-source-codes.spec.js +0 -51
  519. package/dist/sanitize-vocabulary-source-codes.spec.js.map +0 -1
  520. package/dist/sort-tags.spec.js +0 -207
  521. package/dist/sort-tags.spec.js.map +0 -1
  522. package/dist/sortFields.spec.js +0 -51
  523. package/dist/sortFields.spec.js.map +0 -1
  524. package/dist/sortRelatorTerms.spec.js +0 -51
  525. package/dist/sortRelatorTerms.spec.js.map +0 -1
  526. package/dist/sortSubfields.spec.js +0 -52
  527. package/dist/sortSubfields.spec.js.map +0 -1
  528. package/dist/stripPunctuation.spec.js +0 -51
  529. package/dist/stripPunctuation.spec.js.map +0 -1
  530. package/dist/subfield-exclusion.spec.js +0 -523
  531. package/dist/subfield-exclusion.spec.js.map +0 -1
  532. package/dist/subfieldValueNormalizations.spec.js +0 -51
  533. package/dist/subfieldValueNormalizations.spec.js.map +0 -1
  534. package/dist/sync-007-and-300.spec.js +0 -51
  535. package/dist/sync-007-and-300.spec.js.map +0 -1
  536. package/dist/translate-terms.spec.js +0 -51
  537. package/dist/translate-terms.spec.js.map +0 -1
  538. package/dist/typeOfDate-008.spec.js +0 -47
  539. package/dist/typeOfDate-008.spec.js.map +0 -1
  540. package/dist/unicode-decomposition.spec.js +0 -91
  541. package/dist/unicode-decomposition.spec.js.map +0 -1
  542. package/dist/update-field-540.spec.js +0 -51
  543. package/dist/update-field-540.spec.js.map +0 -1
  544. package/dist/urn.spec.js +0 -52
  545. package/dist/urn.spec.js.map +0 -1
  546. package/src/cyrillux-usemarcon-replacement.spec.js +0 -47
@@ -1,131 +1,78 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.fieldGetMaxSubfield6OccurrenceNumberAsInteger = fieldGetMaxSubfield6OccurrenceNumberAsInteger;
7
- exports.fieldGetOccurrenceNumberPairs = fieldGetOccurrenceNumberPairs;
8
- exports.fieldGetOccurrenceNumbers = fieldGetOccurrenceNumbers;
9
- exports.fieldGetUnambiguousOccurrenceNumber = fieldGetUnambiguousOccurrenceNumber;
10
- exports.fieldGetUnambiguousTag = fieldGetUnambiguousTag;
11
- exports.fieldHasOccurrenceNumber = fieldHasOccurrenceNumber;
12
- exports.fieldHasValidSubfield6 = fieldHasValidSubfield6;
13
- exports.fieldHasWantedTagAndOccurrenceNumber = fieldHasWantedTagAndOccurrenceNumber;
14
- exports.fieldIsFirstFieldInChain = fieldIsFirstFieldInChain;
15
- exports.fieldResetOccurrenceNumber = fieldResetOccurrenceNumber;
16
- exports.fieldSevenToOneOccurrenceNumber = fieldSevenToOneOccurrenceNumber;
17
- exports.fieldToNormalizedString = fieldToNormalizedString;
18
- exports.fieldsGetOccurrenceNumbers = fieldsGetOccurrenceNumbers;
19
- exports.fieldsToNormalizedString = fieldsToNormalizedString;
20
- exports.get6s = get6s;
21
- exports.getAllLinkedSubfield6Fields = getAllLinkedSubfield6Fields;
22
- exports.intToOccurrenceNumberString = intToOccurrenceNumberString;
23
- exports.is7XX = is7XX;
24
- exports.isFirstLinkedSubfield6Field = isFirstLinkedSubfield6Field;
25
- exports.isSubfield6Pair = isSubfield6Pair;
26
- exports.isValidSubfield6 = isValidSubfield6;
27
- exports.recordGetMaxSubfield6OccurrenceNumberAsInteger = recordGetMaxSubfield6OccurrenceNumberAsInteger;
28
- exports.recordGetSubfield6ChainHeads = recordGetSubfield6ChainHeads;
29
- exports.resetSubfield6Tag = resetSubfield6Tag;
30
- exports.subfield6GetOccurrenceNumber = subfield6GetOccurrenceNumber;
31
- exports.subfield6GetOccurrenceNumberAsInteger = subfield6GetOccurrenceNumberAsInteger;
32
- exports.subfield6GetTag = subfield6GetTag;
33
- exports.subfield6HasWantedTagAndOccurrenceNumber = subfield6HasWantedTagAndOccurrenceNumber;
34
- exports.subfield6ResetOccurrenceNumber = subfield6ResetOccurrenceNumber;
35
- var _debug = _interopRequireDefault(require("debug"));
36
- var _subfield8Utils = require("./subfield8Utils");
37
- var _utils = require("./utils");
38
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
39
- // const debug = createDebugLogger('@natlibfi/marc-record-validator-melinda/subfield6Utils');
40
-
41
- const debug = (0, _debug.default)('@natlibfi/melinda-marc-record-merge-reducers:subfield6Utils');
42
- //const debugData = debug.extend('data');
43
- const debugDev = debug.extend('dev');
44
-
45
- // NB! Subfield 6 is non-repeatable and it should always comes first!
46
- // NB! Index size should always be 2 (preceding 0 required for 01..09) However, support for 100+ was added on 2023-02-27.
47
- // NB! Index value '00' are left as they are (is not paired/indexed/whatever.
1
+ import createDebugLogger from "debug";
2
+ import { add8s, fieldsGetAllSubfield8LinkingNumbers, getSubfield8LinkingNumber, isValidSubfield8 } from "./subfield8Utils.js";
3
+ import { fieldHasSubfield, fieldToString, fieldsToString, nvdebug, subfieldToString } from "./utils.js";
4
+ const debug = createDebugLogger("@natlibfi/melinda-marc-record-merge-reducers:subfield6Utils");
5
+ const debugDev = debug.extend("dev");
48
6
  const sf6Regexp = /^[0-9][0-9][0-9]-(?:[0-9][0-9]|[1-9][0-9]+)(?:[^0-9].*)?$/u;
49
- function isValidSubfield6(subfield) {
50
- if (subfield.code !== '6') {
7
+ export function isValidSubfield6(subfield) {
8
+ if (subfield.code !== "6") {
51
9
  return false;
52
10
  }
53
11
  return subfield.value.match(sf6Regexp);
54
12
  }
55
- function subfield6GetTag(subfield) {
13
+ export function subfield6GetTag(subfield) {
56
14
  if (isValidSubfield6(subfield)) {
57
15
  return subfield.value.substring(0, 3);
58
16
  }
59
- return undefined;
17
+ return void 0;
60
18
  }
61
- function subfield6GetOccurrenceNumber(subfield) {
19
+ export function subfield6GetOccurrenceNumber(subfield) {
62
20
  if (isValidSubfield6(subfield)) {
63
- // Skip "TAG-" prefix. 2023-02-20: removed 2-digit requirement from here...
64
- return subfield.value.substring(4).replace(/\D.*$/u, '');
21
+ return subfield.value.substring(4).replace(/\D.*$/u, "");
65
22
  }
66
- return undefined;
23
+ return void 0;
67
24
  }
68
- function subfield6GetOccurrenceNumberAsInteger(subfield) {
25
+ export function subfield6GetOccurrenceNumberAsInteger(subfield) {
69
26
  const index = subfield6GetOccurrenceNumber(subfield);
70
- if (index === undefined || index === '00') {
27
+ if (index === void 0 || index === "00") {
71
28
  return 0;
72
29
  }
73
30
  const result = parseInt(index, 10);
74
- //nvdebug(`SF6: ${subfield.value} => ${index} => ${result}`, debug);
75
31
  return result;
76
32
  }
77
- function subfield6ResetOccurrenceNumber(subfield, occurrenceNumber) {
33
+ export function subfield6ResetOccurrenceNumber(subfield, occurrenceNumber) {
78
34
  if (!isValidSubfield6(subfield)) {
79
35
  return;
80
36
  }
81
- const occurrenceNumberAsString = typeof occurrenceNumber === 'number' ? intToOccurrenceNumberString(occurrenceNumber) : occurrenceNumber;
37
+ const occurrenceNumberAsString = typeof occurrenceNumber === "number" ? intToOccurrenceNumberString(occurrenceNumber) : occurrenceNumber;
82
38
  const newValue = subfield.value.substring(0, 4) + occurrenceNumberAsString + subfield6GetTail(subfield);
83
- //nvdebug(`Set subfield $6 value from ${subfieldToString(subfield)} to ${newValue}`);
84
39
  subfield.value = newValue;
85
40
  }
86
41
  function subfield6GetTail(subfield) {
87
42
  if (isValidSubfield6(subfield)) {
88
- // Skip "TAG-" prefix. 2023-02-20: removed 2-digit requirement from here...
89
- return subfield.value.replace(/^\d+-\d+/u, '');
43
+ return subfield.value.replace(/^\d+-\d+/u, "");
90
44
  }
91
- return '';
45
+ return "";
92
46
  }
93
- function subfield6HasWantedTagAndOccurrenceNumber(subfield, tagAndOccurrenceNumber) {
94
- if (subfield.code !== '6') {
47
+ export function subfield6HasWantedTagAndOccurrenceNumber(subfield, tagAndOccurrenceNumber) {
48
+ if (subfield.code !== "6") {
95
49
  return false;
96
50
  }
97
- // We could also use generic code and go getTag()+'-'+getIndex() instead of regexp...
98
- const key = subfield.value.replace(/^([0-9][0-9][0-9]-[0-9][0-9]+).*$/u, '$1');
99
- (0, _utils.nvdebug)(` Compare '${key}' vs '${tagAndOccurrenceNumber}'`);
51
+ const key = subfield.value.replace(/^([0-9][0-9][0-9]-[0-9][0-9]+).*$/u, "$1");
52
+ nvdebug(` Compare '${key}' vs '${tagAndOccurrenceNumber}'`);
100
53
  return key === tagAndOccurrenceNumber;
101
54
  }
102
-
103
- // <= SUBFIELD, FIELD =>
104
-
105
- function fieldGetUnambiguousTag(field) {
106
- const tags = field.subfields.filter(sf => subfield6GetTag(sf));
55
+ export function fieldGetUnambiguousTag(field) {
56
+ const tags = field.subfields.filter((sf) => subfield6GetTag(sf));
107
57
  if (tags.length === 1) {
108
58
  return subfield6GetTag(tags[0]);
109
59
  }
110
- return undefined;
60
+ return void 0;
111
61
  }
112
- function fieldGetUnambiguousOccurrenceNumber(field) {
113
- const occurrenceNumbers = field.subfields.filter(sf => subfield6GetOccurrenceNumber(sf));
62
+ export function fieldGetUnambiguousOccurrenceNumber(field) {
63
+ const occurrenceNumbers = field.subfields.filter((sf) => subfield6GetOccurrenceNumber(sf));
114
64
  if (occurrenceNumbers.length === 1) {
115
65
  return subfield6GetOccurrenceNumber(occurrenceNumbers[0]);
116
66
  }
117
- return undefined;
67
+ return void 0;
118
68
  }
119
- function fieldHasOccurrenceNumber(field, occurrenceNumber) {
120
- //nvdebug(`${occurrenceNumber} vs ${fieldToString(field)}`);
121
- return field.subfields && field.subfields.some(sf => subfield6GetOccurrenceNumber(sf) === occurrenceNumber);
69
+ export function fieldHasOccurrenceNumber(field, occurrenceNumber) {
70
+ return field.subfields && field.subfields.some((sf) => subfield6GetOccurrenceNumber(sf) === occurrenceNumber);
122
71
  }
123
- function fieldResetOccurrenceNumber(field, newOccurrenceNumber, oldOccurrenceNumber = undefined) {
124
- field.subfields.forEach(subfield => innerReset(subfield)); // eslint-disable-line array-callback-return
125
-
72
+ export function fieldResetOccurrenceNumber(field, newOccurrenceNumber, oldOccurrenceNumber = void 0) {
73
+ field.subfields.forEach((subfield) => innerReset(subfield));
126
74
  function innerReset(subfield) {
127
- // (Optional) Check that this is really the occurrence number we wan't to reseot
128
- if (oldOccurrenceNumber !== undefined) {
75
+ if (oldOccurrenceNumber !== void 0) {
129
76
  const currOccurrenceNumber = subfield6GetOccurrenceNumber(subfield);
130
77
  if (currOccurrenceNumber !== oldOccurrenceNumber) {
131
78
  return;
@@ -134,170 +81,104 @@ function fieldResetOccurrenceNumber(field, newOccurrenceNumber, oldOccurrenceNum
134
81
  subfield6ResetOccurrenceNumber(subfield, newOccurrenceNumber);
135
82
  }
136
83
  }
137
- function intToOccurrenceNumberString(i) {
84
+ export function intToOccurrenceNumberString(i) {
138
85
  return i < 10 ? `0${i}` : `${i}`;
139
86
  }
140
- function fieldGetMaxSubfield6OccurrenceNumberAsInteger(field) {
141
- // used by reducer!
142
- //nvdebug(`Checking subfields $6 from ${JSON.stringify(field)}`);
143
- const sf6s = field.subfields ? field.subfields.filter(subfield => isValidSubfield6(subfield)) : [];
87
+ export function fieldGetMaxSubfield6OccurrenceNumberAsInteger(field) {
88
+ const sf6s = field.subfields ? field.subfields.filter((subfield) => isValidSubfield6(subfield)) : [];
144
89
  if (sf6s.length === 0) {
145
90
  return 0;
146
91
  }
147
- // There should always be one, but here we check every subfield.
148
- //nvdebug(`Got ${field.subfields} $6-subfield(s) from ${JSON.stringify(field)}`, debug);
149
- const vals = sf6s.map(sf => subfield6GetOccurrenceNumberAsInteger(sf));
92
+ const vals = sf6s.map((sf) => subfield6GetOccurrenceNumberAsInteger(sf));
150
93
  return Math.max(...vals);
151
94
  }
152
- function fieldHasWantedTagAndOccurrenceNumber(field, tagAndOccurrenceNumber) {
153
- return field.subfields && field.subfields.some(sf => subfield6HasWantedTagAndOccurrenceNumber(sf, tagAndOccurrenceNumber));
95
+ export function fieldHasWantedTagAndOccurrenceNumber(field, tagAndOccurrenceNumber) {
96
+ return field.subfields && field.subfields.some((sf) => subfield6HasWantedTagAndOccurrenceNumber(sf, tagAndOccurrenceNumber));
154
97
  }
155
-
156
- /*
157
- export function getFieldsWithGivenOccurrenceNumberSubfield6(record, occurrenceNumberAsString) {
158
- const record.fields.filter(field => field
159
-
160
- function fieldHasIndex(field, index) {
161
- if (!field.subfields) {
162
- return false;
163
- }
164
- return field.subfields.find(sf => isValidSubfield6(sf) && subfieldGetOccurrenceNumber6(sf) === index);
165
- }
166
- }
167
- */
168
-
169
- function fieldHasValidSubfield6(field) {
170
- return field.subfields && field.subfields.some(sf => isValidSubfield6(sf));
98
+ export function fieldHasValidSubfield6(field) {
99
+ return field.subfields && field.subfields.some((sf) => isValidSubfield6(sf));
171
100
  }
172
- function isSubfield6Pair(field, otherField) {
173
- // No need to log this:
174
- //nvdebug(`LOOK for $6-pair:\n ${fieldToString(field)}\n ${fieldToString(otherField)}`);
101
+ export function isSubfield6Pair(field, otherField) {
175
102
  if (!fieldHasValidSubfield6(field) || !fieldHasValidSubfield6(otherField)) {
176
103
  return false;
177
104
  }
178
105
  if (!tagsArePairable6(field.tag, otherField.tag)) {
179
- //nvdebug(` FAILED. REASON: TAGS NOT PAIRABLE!`);
180
106
  return false;
181
107
  }
182
108
  const fieldIndex = fieldGetUnambiguousOccurrenceNumber(field);
183
- if (fieldIndex === undefined || fieldIndex === '00') {
184
- //nvdebug(` FAILED. REASON: NO INDEX FOUND`);
109
+ if (fieldIndex === void 0 || fieldIndex === "00") {
185
110
  return false;
186
111
  }
187
112
  const otherFieldIndex = fieldGetUnambiguousOccurrenceNumber(otherField);
188
113
  if (fieldIndex !== otherFieldIndex) {
189
- //nvdebug(` FAILURE: INDEXES: ${fieldIndex} vs ${otherFieldIndex}`);
190
114
  return false;
191
115
  }
192
116
  if (fieldGetUnambiguousTag(field) !== otherField.tag || field.tag !== fieldGetUnambiguousTag(otherField)) {
193
- //nvdebug(` FAILURE: TAG vs $6 TAG`);
194
117
  return false;
195
118
  }
196
119
  return true;
197
120
  function tagsArePairable6(tag1, tag2) {
198
- // How to do XOR operation in one line? Well, this is probably more readable...
199
- if (tag1 === '880' && tag2 === '880') {
121
+ if (tag1 === "880" && tag2 === "880") {
200
122
  return false;
201
123
  }
202
- if (tag1 !== '880' && tag2 !== '880') {
124
+ if (tag1 !== "880" && tag2 !== "880") {
203
125
  return false;
204
126
  }
205
127
  return true;
206
128
  }
207
129
  }
208
130
  function subfieldSevenToOneOccurrenceNumber(subfield) {
209
- if (subfield.code !== '6' || subfield.value.substring(0, 1) !== '7') {
131
+ if (subfield.code !== "6" || subfield.value.substring(0, 1) !== "7") {
210
132
  return;
211
133
  }
212
134
  subfield.value = `1${subfield.value.substring(1)}`;
213
135
  }
214
- function fieldSevenToOneOccurrenceNumber(field) {
215
- if (field.tag !== '880') {
136
+ export function fieldSevenToOneOccurrenceNumber(field) {
137
+ if (field.tag !== "880") {
216
138
  return;
217
139
  }
218
- field.subfields.forEach(sf => subfieldSevenToOneOccurrenceNumber(sf)); // eslint-disable-line array-callback-return
140
+ field.subfields.forEach((sf) => subfieldSevenToOneOccurrenceNumber(sf));
219
141
  }
220
- function fieldGetOccurrenceNumberPairs(field, candFields) {
221
- // NB! TAG!=880 returns 880 fields, TAG==880 returns non-880 field
222
- //nvdebug(` Trying to finds pair for ${fieldToString(field)} in ${candFields.length} fields`);
223
- const pairs = candFields.filter(otherField => isSubfield6Pair(field, otherField));
142
+ export function fieldGetOccurrenceNumberPairs(field, candFields) {
143
+ const pairs = candFields.filter((otherField) => isSubfield6Pair(field, otherField));
224
144
  if (pairs.length === 0) {
225
- (0, _utils.nvdebug)(`NO PAIRS FOUND FOR '${(0, _utils.fieldToString)(field)}'`);
145
+ nvdebug(`NO PAIRS FOUND FOR '${fieldToString(field)}'`);
226
146
  return pairs;
227
147
  }
228
- (0, _utils.nvdebug)(`${pairs.length} PAIR(S) FOUND FOR '${(0, _utils.fieldToString)(field)}'`);
229
- pairs.forEach(pairedField => (0, _utils.nvdebug)(` '${(0, _utils.fieldToString)(pairedField)}'`)); // eslint-disable-line array-callback-return
148
+ nvdebug(`${pairs.length} PAIR(S) FOUND FOR '${fieldToString(field)}'`);
149
+ pairs.forEach((pairedField) => nvdebug(` '${fieldToString(pairedField)}'`));
230
150
  return pairs;
231
151
  }
232
- function fieldGetOccurrenceNumbers(field) {
233
- /* eslint-disable */
152
+ export function fieldGetOccurrenceNumbers(field) {
234
153
  let occurrenceNumbers = [];
235
- field.subfields?.forEach(sf => subfieldExtractOccurrenceNumber(sf));
154
+ field.subfields?.forEach((sf) => subfieldExtractOccurrenceNumber(sf));
236
155
  function subfieldExtractOccurrenceNumber(sf) {
237
156
  if (!isValidSubfield6(sf)) {
238
157
  return;
239
158
  }
240
159
  const occurrenceNumber = subfield6GetOccurrenceNumber(sf);
241
- if (occurrenceNumber === '00' || occurrenceNumbers.includes(occurrenceNumber)) {
160
+ if (occurrenceNumber === "00" || occurrenceNumbers.includes(occurrenceNumber)) {
242
161
  return;
243
162
  }
244
163
  occurrenceNumbers.push(occurrenceNumber);
245
164
  }
246
- /* eslint-enable */
247
165
  return occurrenceNumbers;
248
166
  }
249
- function fieldsGetOccurrenceNumbers(fields) {
250
- /* eslint-disable */
167
+ export function fieldsGetOccurrenceNumbers(fields) {
251
168
  let occurrenceNumbers = [];
252
- fields.forEach(f => fieldProcessOccurrenceNumbers(f));
169
+ fields.forEach((f) => fieldProcessOccurrenceNumbers(f));
253
170
  function fieldProcessOccurrenceNumbers(f) {
254
171
  const newOccurrenceNumbers = fieldGetOccurrenceNumbers(f);
255
- newOccurrenceNumbers.forEach(occurrenceNumber => {
172
+ newOccurrenceNumbers.forEach((occurrenceNumber) => {
256
173
  if (!occurrenceNumbers.includes(occurrenceNumber)) {
257
174
  occurrenceNumbers.push(occurrenceNumber);
258
175
  }
259
176
  });
260
177
  }
261
- /* eslint-enable */
262
178
  return occurrenceNumbers;
263
179
  }
264
-
265
- /*
266
- export function fieldGetSubfield6Pair(field, record) {
267
- const pairedFields = record.fields.filter(otherField => isSubfield6Pair(field, otherField));
268
- if (pairedFields.length !== 1) {
269
- return undefined;
270
- }
271
- // NB! It is theoretically possible to have multiple pairable 880 fields (one for each encoding)
272
- nvdebug(`fieldGetSubfield6Pair(): ${fieldToString(field)} => ${fieldToString(pairedFields[0])}`);
273
- return pairedFields[0];
274
- }
275
- */
276
-
277
- /*
278
- export function pairAndStringify6(field, record) {
279
- const pair6 = fieldGetSubfield6Pair(field, record);
280
- if (!pair6) {
281
- return fieldToNormalizedString(field);
282
- }
283
- return fieldsToNormalizedString([field, pair6]);
284
- }
285
- */
286
-
287
- // Frequencly list for $6 subfields in 1XX/7XX fields:
288
- // 231115 100
289
- // 183832 700
290
- // 28773 710
291
- // 2047 711
292
- // 661 110
293
- // 341 111
294
- // 284 130
295
- // 63 730
296
- // Thus there's a real risk of ending up with, say, identical 100 vs 700 chains.
297
- // Semi-hackily support 1XX/7XX-version: 7XX can be deleted if corresponding 1XX exists:
298
-
299
- function is7XX(tag) {
300
- return ['700', '710', '711', '730'].includes(tag);
180
+ export function is7XX(tag) {
181
+ return ["700", "710", "711", "730"].includes(tag);
301
182
  }
302
183
  function normalizeEntryTag(tag) {
303
184
  if (tag.match(/^[17](?:00|10|11|30)$/u)) {
@@ -306,166 +187,123 @@ function normalizeEntryTag(tag) {
306
187
  return tag;
307
188
  }
308
189
  function subfieldToNormalizedString(sf, tag, targetLinkingNumber = 0, normalizeOccurrenceNumber = false, normalizeEntryTagBoolean = false) {
309
- // targetLinkingNumber refers to $8.
310
- // normalizeEntryTagBoolean refers to 1XX/7XX tag values in subfield $6 value.
311
190
  if (isValidSubfield6(sf)) {
312
- // && targetLinkingNumber === 0) {
313
- // 1XX/7XX (entry tag) normalization:
314
191
  const tag2 = normalizeEntryTagBoolean ? normalizeEntryTag(tag) : tag;
315
- const occurrenceNumber = normalizeOccurrenceNumber ? 'XX' : subfield6GetOccurrenceNumber(sf);
316
- // If we are normalizing a $8 chain, don't normalize $6 occurrence number!
317
- // Replace $6 occurrence number with XX:
318
- return ` ‡${sf.code} ${tag2}-${occurrenceNumber}${subfield6GetTail(sf)}`;
192
+ const occurrenceNumber = normalizeOccurrenceNumber ? "XX" : subfield6GetOccurrenceNumber(sf);
193
+ return ` \u2021${sf.code} ${tag2}-${occurrenceNumber}${subfield6GetTail(sf)}`;
319
194
  }
320
- if ((0, _subfield8Utils.isValidSubfield8)(sf)) {
321
- const currLinkingNumber = (0, _subfield8Utils.getSubfield8LinkingNumber)(sf); //getSubfield8Index(sf);
195
+ if (isValidSubfield8(sf)) {
196
+ const currLinkingNumber = getSubfield8LinkingNumber(sf);
322
197
  if (targetLinkingNumber > 0 && currLinkingNumber === targetLinkingNumber) {
323
- // For $8 we should only XX the index we are looking at...
324
- const normVal = sf.value.replace(/^[0-9]+/u, 'XX');
325
- return ` ‡${sf.code} ${normVal}`;
198
+ const normVal = sf.value.replace(/^[0-9]+/u, "XX");
199
+ return ` \u2021${sf.code} ${normVal}`;
326
200
  }
327
- return ''; // Other $8 subfields are meaningless in this context
201
+ return "";
328
202
  }
329
- return ` ${(0, _utils.subfieldToString)(sf)}`; // `‡${sf.code} ${sf.value}`;
203
+ return ` ${subfieldToString(sf)}`;
330
204
  }
331
- function fieldToNormalizedString(field, targetLinkingNumber = 0, normalizeOccurrenceNumber = false, normalizeEntryTagBoolean = false) {
332
- if ('subfields' in field) {
205
+ export function fieldToNormalizedString(field, targetLinkingNumber = 0, normalizeOccurrenceNumber = false, normalizeEntryTagBoolean = false) {
206
+ if ("subfields" in field) {
333
207
  const tag2 = normalizeEntryTagBoolean ? normalizeEntryTag(field.tag) : field.tag;
334
208
  return `${tag2} ${field.ind1}${field.ind2}${formatAndNormalizeSubfields(field)}`;
335
209
  }
336
210
  return `${field.tag} ${field.value}`;
337
- function formatAndNormalizeSubfields(field) {
338
- return field.subfields.map(sf => subfieldToNormalizedString(sf, field.tag, targetLinkingNumber, normalizeOccurrenceNumber, normalizeEntryTagBoolean)).join('');
211
+ function formatAndNormalizeSubfields(field2) {
212
+ return field2.subfields.map((sf) => subfieldToNormalizedString(sf, field2.tag, targetLinkingNumber, normalizeOccurrenceNumber, normalizeEntryTagBoolean)).join("");
339
213
  }
340
214
  }
341
215
  function guessTargetLinkingNumber(fields, defaultTargetLinkingNumber) {
342
216
  if (defaultTargetLinkingNumber !== 0) {
343
217
  return defaultTargetLinkingNumber;
344
218
  }
345
- const linkingNumbers = (0, _subfield8Utils.fieldsGetAllSubfield8LinkingNumbers)(fields);
219
+ const linkingNumbers = fieldsGetAllSubfield8LinkingNumbers(fields);
346
220
  return linkingNumbers.length === 1 ? linkingNumbers[0] : 0;
347
221
  }
348
- function fieldsToNormalizedString(fields, defaultTargetLinkingNumber = 0, normalizeOccurrenceNumber = false, normalizeEntryTag = false) {
222
+ export function fieldsToNormalizedString(fields, defaultTargetLinkingNumber = 0, normalizeOccurrenceNumber = false, normalizeEntryTag2 = false) {
349
223
  const targetLinkingNumber = guessTargetLinkingNumber(fields, defaultTargetLinkingNumber);
350
- (0, _utils.nvdebug)(`fieldsToNormalizedString: OCC: ${normalizeOccurrenceNumber}`);
351
- const strings = fields.map(field => fieldToNormalizedString(field, targetLinkingNumber, normalizeOccurrenceNumber, normalizeEntryTag));
224
+ nvdebug(`fieldsToNormalizedString: OCC: ${normalizeOccurrenceNumber}`);
225
+ const strings = fields.map((field) => fieldToNormalizedString(field, targetLinkingNumber, normalizeOccurrenceNumber, normalizeEntryTag2));
352
226
  strings.sort();
353
- return strings.join('\t__SEPARATOR__\t');
354
- }
355
-
356
- /*
357
-
358
- export function removeField6IfNeeded(field, record, fieldsAsString) {
359
- const pairField = fieldGetSubfield6Pair(field, record);
360
- const asString = pairField ? fieldsToNormalizedString([field, pairField]) : fieldToNormalizedString(field);
361
- nvdebug(`SOURCE: ${asString} -- REALITY: ${fieldToString(field)}`);
362
- const tmp = pairField ? fieldToString(pairField) : 'HUTI';
363
- nvdebug(`PAIR: ${tmp}`);
364
- nvdebug(`BASE:\n ${fieldsAsString.join('\n ')}`);
365
- if (!fieldsAsString.includes(asString)) {
366
- return;
367
- }
368
- nvdebug(`Duplicate $6 removal: ${fieldToString(field)}`);
369
- record.removeField(field);
370
-
371
- if (pairField === undefined) {
372
- return;
373
- }
374
- nvdebug(`Duplicate $6 removal (pair): ${fieldToString(pairField)}`);
375
- record.removeField(pairField);
227
+ return strings.join(" __SEPARATOR__ ");
376
228
  }
377
- */
378
-
379
229
  function getFirstField(record, fields) {
380
- const fieldsAsStrings = fields.map(field => (0, _utils.fieldToString)(field));
381
- //record.fields.forEach((field, i) => nvdebug(`${i}:\t${fieldToString(field)}`));
382
- //nvdebug(`getFirstField: ${fieldsAsStrings.join('\t')}`);
383
- const i = record.fields.findIndex(field => fieldsAsStrings.includes((0, _utils.fieldToString)(field)));
230
+ const fieldsAsStrings = fields.map((field) => fieldToString(field));
231
+ const i = record.fields.findIndex((field) => fieldsAsStrings.includes(fieldToString(field)));
384
232
  if (i > -1) {
385
233
  const field = record.fields[i];
386
- //nvdebug(`1st F: ${i + 1}/${record.fields.length} ${fieldToString(field)}`);
387
234
  return field;
388
235
  }
389
- return undefined;
236
+ return void 0;
390
237
  }
391
238
  function isRelevantSubfield6Chain(fields) {
392
239
  if (fields.length < 2) {
393
- // 1 non-880-field and 1+ 880 fields
394
240
  return false;
395
241
  }
396
- const non880 = fields.filter(f => f.tag !== '880');
242
+ const non880 = fields.filter((f) => f.tag !== "880");
397
243
  if (non880.length !== 1) {
398
244
  return false;
399
245
  }
400
- const linkingNumbers = (0, _subfield8Utils.fieldsGetAllSubfield8LinkingNumbers)(fields);
246
+ const linkingNumbers = fieldsGetAllSubfield8LinkingNumbers(fields);
401
247
  if (linkingNumbers.length !== 0) {
402
248
  return false;
403
249
  }
404
- return fields.every(f => (0, _utils.fieldHasSubfield)(f, '6'));
250
+ return fields.every((f) => fieldHasSubfield(f, "6"));
405
251
  }
406
- function fieldIsFirstFieldInChain(field, chain, record) {
407
- // Interpretation of first: position of field in record (however, we might have a duplicate field. See tests...)
252
+ export function fieldIsFirstFieldInChain(field, chain, record) {
408
253
  const firstField = getFirstField(record, chain);
409
254
  if (firstField) {
410
- return (0, _utils.fieldToString)(field) === (0, _utils.fieldToString)(firstField);
255
+ return fieldToString(field) === fieldToString(firstField);
411
256
  }
412
257
  return false;
413
258
  }
414
- function getAllLinkedSubfield6Fields(field, record) {
259
+ export function getAllLinkedSubfield6Fields(field, record) {
415
260
  const fields = get6s(field, record);
416
- const moreFields = (0, _subfield8Utils.add8s)(fields, record);
417
-
418
- // Currently we don't handle fields with more than one $6 and/or $8 subfield.
261
+ const moreFields = add8s(fields, record);
419
262
  if (moreFields.length > fields.length) {
420
- return []; // Don't fix!
263
+ return [];
421
264
  }
422
265
  return moreFields;
423
266
  }
424
- function isFirstLinkedSubfield6Field(field, record) {
267
+ export function isFirstLinkedSubfield6Field(field, record) {
425
268
  if (!field.subfields) {
426
- // Is not a datafield
427
269
  return false;
428
270
  }
429
271
  const chain = getAllLinkedSubfield6Fields(field, record);
430
272
  if (!isRelevantSubfield6Chain(chain)) {
431
- (0, _utils.nvdebug)(`Rejected 6: ${(0, _utils.fieldsToString)(chain)}`);
273
+ nvdebug(`Rejected 6: ${fieldsToString(chain)}`);
432
274
  return false;
433
275
  }
434
276
  return fieldIsFirstFieldInChain(field, chain, record);
435
277
  }
436
- function recordGetSubfield6ChainHeads(record) {
437
- return record.fields.filter(field => isFirstLinkedSubfield6Field(field, record));
278
+ export function recordGetSubfield6ChainHeads(record) {
279
+ return record.fields.filter((field) => isFirstLinkedSubfield6Field(field, record));
438
280
  }
439
- function recordGetMaxSubfield6OccurrenceNumberAsInteger(record) {
281
+ export function recordGetMaxSubfield6OccurrenceNumberAsInteger(record) {
440
282
  if (record.fields.length === 0) {
441
283
  return 0;
442
284
  }
443
- // Should we cache the value here?
444
- const vals = record.fields.map(field => fieldGetMaxSubfield6OccurrenceNumberAsInteger(field));
285
+ const vals = record.fields.map((field) => fieldGetMaxSubfield6OccurrenceNumberAsInteger(field));
445
286
  return Math.max(...vals);
446
287
  }
447
- function get6s(field, candidateFields) {
448
- // NB! Convert field to fields!!!
449
- // Get all fields with given occurrence number
450
- const sixes = field.subfields.filter(sf => isValidSubfield6(sf));
288
+ export function get6s(field, candidateFields) {
289
+ const sixes = field.subfields.filter((sf) => isValidSubfield6(sf));
451
290
  if (sixes.length === 0) {
452
291
  return [field];
453
292
  }
454
- (0, _utils.nvdebug)(`SIXES: ${sixes.length}`);
455
- const occurrenceNumbers = sixes.map(sf => subfield6GetOccurrenceNumber(sf)).filter(value => value !== undefined && value !== '00');
456
- (0, _utils.nvdebug)(occurrenceNumbers.join(' -- '));
457
- const relevantFields = candidateFields.filter(f => occurrenceNumbers.some(o => fieldHasOccurrenceNumber(f, o)));
458
- (0, _utils.nvdebug)(`${(0, _utils.fieldToString)(field)}: $6-RELFIELDS FOUND: ${relevantFields.length}...`);
459
- relevantFields.forEach(f => (0, _utils.nvdebug)((0, _utils.fieldToString)(f))); // eslint-disable-line array-callback-return
293
+ nvdebug(`SIXES: ${sixes.length}`);
294
+ const occurrenceNumbers = sixes.map((sf) => subfield6GetOccurrenceNumber(sf)).filter((value) => value !== void 0 && value !== "00");
295
+ nvdebug(occurrenceNumbers.join(" -- "));
296
+ const relevantFields = candidateFields.filter((f) => occurrenceNumbers.some((o) => fieldHasOccurrenceNumber(f, o)));
297
+ nvdebug(`${fieldToString(field)}: $6-RELFIELDS FOUND: ${relevantFields.length}...`);
298
+ relevantFields.forEach((f) => nvdebug(fieldToString(f)));
460
299
  return relevantFields;
461
300
  }
462
- function resetSubfield6Tag(subfield, tag) {
301
+ export function resetSubfield6Tag(subfield, tag) {
463
302
  if (!isValidSubfield6(subfield)) {
464
303
  return;
465
304
  }
466
- // NB! mainly for 1XX<->7XX transfers
467
305
  const newValue = `${tag}-${subfield.value.substring(4)}`;
468
- (0, _utils.nvdebug)(`Set subfield $6 value from ${(0, _utils.subfieldToString)(subfield)} to ${newValue}`, debugDev);
306
+ nvdebug(`Set subfield $6 value from ${subfieldToString(subfield)} to ${newValue}`, debugDev);
469
307
  subfield.value = newValue;
470
308
  }
471
- //# sourceMappingURL=subfield6Utils.js.map
309
+ //# sourceMappingURL=subfield6Utils.js.map