@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
package/dist/cyrillux.js CHANGED
@@ -1,38 +1,26 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = _default;
7
- var _clone = _interopRequireDefault(require("clone"));
8
- var _utils = require("./utils");
9
- var iso9 = _interopRequireWildcard(require("iso9_1995"));
10
- var _subfield6Utils = require("./subfield6Utils");
11
- var _xregexp = _interopRequireDefault(require("xregexp"));
12
- var sfs4900 = _interopRequireWildcard(require("@natlibfi/sfs-4900"));
13
- var _sortFields = _interopRequireDefault(require("./sortFields"));
14
- var _reindexSubfield6OccurenceNumbers = _interopRequireDefault(require("./reindexSubfield6OccurenceNumbers"));
15
- var _punctuation = require("./punctuation2");
16
- var _addMissingField = require("./addMissingField041");
17
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
18
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
19
- //import createDebugLogger from 'debug';
20
-
21
- const iso9Trans = 'ISO9 <TRANS>';
22
- const cyrillicTrans = 'CYRILLIC <TRANS>';
23
- const sfs4900Trans = 'SFS4900 <TRANS>';
24
- function _default(config = {}) {
25
- // console.log(`CONFIG=${JSON.stringify(config)}`); // eslint-disable-line no-console
26
-
1
+ import clone from "clone";
2
+ import XRegExp from "xregexp";
3
+ import * as iso9 from "@natlibfi/iso9-1995";
4
+ import * as sfs4900 from "@natlibfi/sfs-4900";
5
+ import { fieldHasSubfield, fieldToString, fieldsToString, isControlSubfieldCode, nvdebug } from "./utils.js";
6
+ import { fieldGetMaxSubfield6OccurrenceNumberAsInteger, fieldGetOccurrenceNumberPairs, fieldGetUnambiguousOccurrenceNumber, intToOccurrenceNumberString, recordGetMaxSubfield6OccurrenceNumberAsInteger, resetSubfield6Tag } from "./subfield6Utils.js";
7
+ import { default as sortFields } from "./sortFields.js";
8
+ import { default as reindexSubfield6OccurenceNumbers } from "./reindexSubfield6OccurenceNumbers.js";
9
+ import { fieldStripPunctuation } from "./punctuation2.js";
10
+ import { getLanguageCode } from "./addMissingField041.js";
11
+ const iso9Trans = "ISO9 <TRANS>";
12
+ const cyrillicTrans = "CYRILLIC <TRANS>";
13
+ const sfs4900Trans = "SFS4900 <TRANS>";
14
+ export default function(config = {}) {
27
15
  return {
28
- description: 'Cyrillux functionality: convert original field to latinitsa (ISO-9) and add 880s for original cyrillic and latinitsa (SFS-4900)',
16
+ description: "Cyrillux functionality: convert original field to latinitsa (ISO-9) and add 880s for original cyrillic and latinitsa (SFS-4900)",
29
17
  validate,
30
18
  fix
31
19
  };
32
20
  function preprocessConfig() {
33
- config.retainCyrillic = typeof config.retainCyrillic === 'undefined' ? true : config.retainCyrillic;
34
- config.doISO9Transliteration = typeof config.doISO9Transliteration === 'undefined' ? true : config.doISO9Transliteration;
35
- config.doSFS4900Transliteration = typeof config.doSFS4900Transliteration === 'undefined' ? true : config.doSFS4900Transliteration;
21
+ config.retainCyrillic = typeof config.retainCyrillic === "undefined" ? true : config.retainCyrillic;
22
+ config.doISO9Transliteration = typeof config.doISO9Transliteration === "undefined" ? true : config.doISO9Transliteration;
23
+ config.doSFS4900Transliteration = typeof config.doSFS4900Transliteration === "undefined" ? true : config.doSFS4900Transliteration;
36
24
  config.preferSFS4900 = setPreference();
37
25
  function setPreference() {
38
26
  if (!config.doSFS4900Transliteration) {
@@ -41,352 +29,260 @@ function _default(config = {}) {
41
29
  if (!config.doISO9Transliteration && config.doSFS4900Transliteration) {
42
30
  return true;
43
31
  }
44
- if (typeof config.preferSFS4900 === 'undefined') {
32
+ if (typeof config.preferSFS4900 === "undefined") {
45
33
  return false;
46
34
  }
47
35
  return config.preferSFS4900;
48
36
  }
49
37
  }
50
38
  function fix(record) {
51
- // console.log(`FIX has CONFIG=${JSON.stringify(config)}`); // eslint-disable-line no-console
52
- // Fix always succeeds
53
- const res = {
54
- message: [],
55
- fix: [],
56
- valid: true
57
- };
39
+ const res = { message: [], fix: [], valid: true };
58
40
  preprocessConfig();
59
41
  const nBefore = record.fields.length;
60
42
  record.fields = processFields(record.fields);
61
43
  if (nBefore < record.fields.length) {
62
- (0, _reindexSubfield6OccurenceNumbers.default)().fix(record);
63
- (0, _sortFields.default)().fix(record);
44
+ reindexSubfield6OccurenceNumbers().fix(record);
45
+ sortFields().fix(record);
64
46
  }
65
47
  function processFields(input, output = []) {
66
48
  const [currField, ...remainingInput] = input;
67
49
  if (!currField) {
68
50
  return output;
69
51
  }
70
- const fakeRecord = {
71
- fields: output
72
- };
73
- const createdMax = (0, _subfield6Utils.recordGetMaxSubfield6OccurrenceNumberAsInteger)(fakeRecord);
52
+ const fakeRecord = { fields: output };
53
+ const createdMax = recordGetMaxSubfield6OccurrenceNumberAsInteger(fakeRecord);
74
54
  const result = processField(currField, record, createdMax);
75
55
  return processFields(remainingInput, [...output, ...result]);
76
56
  }
77
57
  return res;
78
58
  }
79
59
  function validate(record) {
80
- const res = {
81
- message: [],
82
- valid: true
83
- };
60
+ const res = { message: [], valid: true };
84
61
  preprocessConfig();
85
- record.fields?.forEach(field => {
62
+ record.fields?.forEach((field) => {
86
63
  validateField(field, res, record);
87
64
  });
88
65
  res.valid = !(res.message.length >= 1);
89
66
  return res;
90
67
  }
91
68
  function validateField(field, res, record) {
92
- const orig = (0, _utils.fieldToString)(field);
93
- const normalizedFields = processField((0, _clone.default)(field), record);
94
- const mod = (0, _utils.fieldsToString)(normalizedFields).replace(/\t__SEPARATOR__\t/ug, ', ').replace(/ (‡6 [0-9][0-9][0-9])-[0-9][0-9]+/gu, ' $1-NN');
69
+ const orig = fieldToString(field);
70
+ const normalizedFields = processField(clone(field), record);
71
+ const mod = fieldsToString(normalizedFields).replace(/\t__SEPARATOR__\t/ug, ", ").replace(/ (‡6 [0-9][0-9][0-9])-[0-9][0-9]+/gu, " $1-NN");
95
72
  if (orig !== mod) {
96
- // Fail as the input is "broken"/"crap"/sumthing
97
73
  res.message.push(`CHANGE: ${orig} => ${mod}`);
98
74
  return;
99
75
  }
100
76
  return;
101
77
  }
102
78
  function isCyrillicCharacter(char) {
103
- return (0, _xregexp.default)('[\\p{Cyrillic}]').test(char);
79
+ return XRegExp("[\\p{Cyrillic}]").test(char);
104
80
  }
105
81
  function containsCyrillicCharacters(str) {
106
- // from melinda-ui-cyrillux
107
82
  if (!str) {
108
83
  return false;
109
84
  }
110
- return str.split('').some(isCyrillicCharacter);
85
+ return str.split("").some(isCyrillicCharacter);
111
86
  }
112
87
  function fieldContainsCyrillicCharacters(field) {
113
- // based on melinda-ui-cyrillux
114
- return field.subfields && field.subfields.some(sf => subfieldRequiresTransliteration(sf));
88
+ return field.subfields && field.subfields.some((sf) => subfieldRequiresTransliteration(sf));
115
89
  }
116
90
  function subfieldRequiresTransliteration(subfield) {
117
- if ((0, _utils.isControlSubfieldCode)(subfield.code)) {
91
+ if (isControlSubfieldCode(subfield.code)) {
118
92
  return false;
119
93
  }
120
94
  return containsCyrillicCharacters(subfield.value);
121
95
  }
122
96
  function tagCanBeTransliterated(tag) {
123
- return !['336', '337', '338', '880'].includes(tag);
97
+ return !["336", "337", "338", "880"].includes(tag);
124
98
  }
125
99
  function fieldCanBeTransliterated(field) {
126
- // Skip certain tags ('880' is the actual skip-me beef here, but we have seen other no-nos as well).
127
- // Discussion: We should probably also skip others like 05X-08X, 648, 650, 651, and 655, but this needs thinking...
128
- // Also I'd like to convert do CYRILLIC->ISO-9 in field 300 (and others?) without 880 mappings... (<- not implemented)
129
-
130
- // nvdebug(`fieldCanBeTransliterated('${fieldToString(field)}') in...`);
131
100
  if (!tagCanBeTransliterated(field.tag)) {
132
101
  return false;
133
102
  }
134
103
  if (!config.doISO9Transliteration && !config.doSFS4900Transliteration) {
135
104
  return false;
136
105
  }
137
-
138
- // Skip control fields:
139
106
  if (!field.subfields) {
140
107
  return false;
141
108
  }
142
- // When doing MELINDA-10330-ish, we noticed that $6 should not prevent translittaration per se, so this restriction is no longer applied!
143
-
144
- if (field.subfields.some(sf => sf.code === '9' && sf.value.includes('<TRANS>'))) {
109
+ if (field.subfields.some((sf) => sf.code === "9" && sf.value.includes("<TRANS>"))) {
145
110
  return false;
146
111
  }
147
- return fieldContainsCyrillicCharacters(field); // We have something to translitterate:
112
+ return fieldContainsCyrillicCharacters(field);
148
113
  }
149
114
  function mapSubfieldToIso9(subfield) {
150
115
  if (!subfieldRequiresTransliteration(subfield)) {
151
- return {
152
- code: subfield.code,
153
- value: subfield.value
154
- }; // just clone
155
- }
156
- const value = iso9.convertToLatin(subfield.value);
157
- return {
158
- code: subfield.code,
159
- value
160
- };
116
+ return { code: subfield.code, value: subfield.value };
117
+ }
118
+ const conversionResult = iso9.convertToLatin(subfield.value);
119
+ return { code: subfield.code, value: conversionResult.result };
161
120
  }
162
- function mapSubfieldToSfs4900(subfield, lang = 'rus') {
163
- const inputLang = lang === 'ukr' ? 'ukr' : 'rus'; // Support 'ukr' and 'rus', default to 'rus'
164
- const value = subfieldRequiresTransliteration(subfield) ? sfs4900.convertToLatin(subfield.value, inputLang).result : subfield.value;
165
- //console.log(`VAL: ${subfield.value} => ${value} using ${lang}`); // eslint-disable-line no-console
166
- return {
167
- code: subfield.code,
168
- value
169
- };
121
+ function mapSubfieldToSfs4900(subfield, lang = "rus") {
122
+ const inputLang = lang === "ukr" ? "ukr" : "rus";
123
+ if (!subfieldRequiresTransliteration(subfield)) {
124
+ return { code: subfield.code, value: subfield.value };
125
+ }
126
+ const conversionResult = sfs4900.convertToLatin(subfield.value, inputLang);
127
+ console.log(JSON.stringify(conversionResult));
128
+ const result = conversionResult.result;
129
+ console.log(JSON.stringify(result));
130
+ return { code: subfield.code, value: result };
170
131
  }
171
- function mapField(field, occurrenceNumber, iso9 = true, lang = 'rus') {
172
- const subfield6 = deriveSubfield6('880', field.subfields, occurrenceNumber);
173
- const transliterationText = iso9 ? iso9Trans : sfs4900Trans;
174
- const subfield9 = (0, _utils.fieldHasSubfield)(field, '9', transliterationText) ? [] : [{
175
- code: '9',
176
- value: transliterationText
177
- }]; // Add only if needed
178
- const transliterationFunc = iso9 ? mapSubfieldToIso9 : mapSubfieldToSfs4900;
179
-
180
- // NB! iso9 won't use lang
181
- const subfields = field.subfields.filter(sf => sf.code !== '6').map(sf => transliterationFunc(sf, lang));
182
- const newField = {
183
- tag: field.tag,
184
- ind1: field.ind1,
185
- ind2: field.ind2,
186
- subfields: [subfield6, ...subfields, ...subfield9]
187
- };
188
-
189
- // Transliteration goes to the original field:
190
- if (!iso9 && config.preferSFS4900) {
132
+ function mapField(field, occurrenceNumber, iso92 = true, lang = "rus") {
133
+ const subfield6 = deriveSubfield6("880", field.subfields, occurrenceNumber);
134
+ const transliterationText = iso92 ? iso9Trans : sfs4900Trans;
135
+ const subfield9 = fieldHasSubfield(field, "9", transliterationText) ? [] : [{ code: "9", value: transliterationText }];
136
+ const transliterationFunc = iso92 ? mapSubfieldToIso9 : mapSubfieldToSfs4900;
137
+ const subfields = field.subfields.filter((sf) => sf.code !== "6").map((sf) => transliterationFunc(sf, lang));
138
+ const newField = { tag: field.tag, ind1: field.ind1, ind2: field.ind2, subfields: [subfield6, ...subfields, ...subfield9] };
139
+ if (!iso92 && config.preferSFS4900) {
191
140
  return newField;
192
141
  }
193
- if (iso9 && !config.preferSFS4900) {
142
+ if (iso92 && !config.preferSFS4900) {
194
143
  return newField;
195
144
  }
196
- // Translitetation goes to field 880:
197
-
198
- //const subfield6 = newField.subfields.find(sf => sf.code === '6');
199
- newField.tag = '880';
200
- (0, _subfield6Utils.resetSubfield6Tag)(subfield6, field.tag);
145
+ newField.tag = "880";
146
+ resetSubfield6Tag(subfield6, field.tag);
201
147
  return newField;
202
148
  }
203
149
  function mapFieldToIso9(field, occurrenceNumber) {
204
150
  if (!config.doISO9Transliteration) {
205
- return undefined;
151
+ return void 0;
206
152
  }
207
- // Just converts the field to ISO-9 latinitsa, does not create any field-880s, so don't bother with $6 or $9 either
208
153
  if (!config.retainCyrillic && !config.preferSFS4900) {
209
- const subfields = field.subfields.map(sf => mapSubfieldToIso9(sf));
210
- return {
211
- tag: field.tag,
212
- ind1: field.ind1,
213
- ind2: field.ind2,
214
- subfields
215
- };
216
- }
217
- return mapField(field, occurrenceNumber, true, 'rus');
154
+ const subfields = field.subfields.map((sf) => mapSubfieldToIso9(sf));
155
+ return { tag: field.tag, ind1: field.ind1, ind2: field.ind2, subfields };
156
+ }
157
+ return mapField(field, occurrenceNumber, true, "rus");
218
158
  }
219
- function mapFieldToSfs4900(field, occurrenceNumber, lang = 'rus') {
159
+ function mapFieldToSfs4900(field, occurrenceNumber, lang = "rus") {
220
160
  if (!config.doSFS4900Transliteration) {
221
- return undefined;
161
+ return void 0;
222
162
  }
223
- // Just converts the field to SFS-4900 latinitsa, does not create any field-880s, so don't bother with $6 or $9 either
224
163
  if (!config.retainCyrillic && config.preferSFS4900) {
225
- const subfields = field.subfields.map(sf => mapSubfieldToSfs4900(sf, lang));
226
- return {
227
- tag: field.tag,
228
- ind1: field.ind1,
229
- ind2: field.ind2,
230
- subfields
231
- };
164
+ const subfields = field.subfields.map((sf) => mapSubfieldToSfs4900(sf, lang));
165
+ return { tag: field.tag, ind1: field.ind1, ind2: field.ind2, subfields };
232
166
  }
233
167
  return mapField(field, occurrenceNumber, false, lang);
234
168
  }
235
169
  function deriveSubfield6(tag, subfields, occurrenceNumber) {
236
- const initialSubfield = {
237
- code: '6',
238
- value: `${tag}-${occurrenceNumber}`
239
- };
240
- if (tag === '880') {
241
- // If *tag in subfield $6* is 880, field is not 880 :D
170
+ const initialSubfield = { code: "6", value: `${tag}-${occurrenceNumber}` };
171
+ if (tag === "880") {
242
172
  return initialSubfield;
243
173
  }
244
- // Try to use existing subfield
245
- const [subfield6] = subfields.filter(sf => sf.code === '6').map(sf => (0, _clone.default)(sf));
174
+ const [subfield6] = subfields.filter((sf) => sf.code === "6").map((sf) => clone(sf));
246
175
  if (subfield6) {
247
- (0, _subfield6Utils.resetSubfield6Tag)(subfield6, tag); // Should we update occurrence number?
176
+ resetSubfield6Tag(subfield6, tag);
248
177
  return subfield6;
249
178
  }
250
179
  return initialSubfield;
251
180
  }
252
181
  function mapFieldToCyrillicField880(field, occurrenceNumber) {
253
182
  if (!config.retainCyrillic) {
254
- return undefined;
183
+ return void 0;
255
184
  }
256
- (0, _utils.nvdebug)(`Derive CYR 880 from ${(0, _utils.fieldToString)(field)}`);
185
+ nvdebug(`Derive CYR 880 from ${fieldToString(field)}`);
257
186
  const newSubfield6 = deriveSubfield6(field.tag, field.subfields, occurrenceNumber);
258
- const newSubfield9 = (0, _utils.fieldHasSubfield)(field, '9', cyrillicTrans) ? [] : [{
259
- code: '9',
260
- value: cyrillicTrans
261
- }];
262
- const subfields = [newSubfield6, ...field.subfields.filter(sf => sf.code !== '6').map(sf => (0, _clone.default)(sf)), ...newSubfield9];
263
- const newField = {
264
- tag: '880',
265
- ind1: field.ind1,
266
- ind2: field.ind2,
267
- subfields
268
- };
269
- (0, _utils.nvdebug)(` New CYR 880 ${(0, _utils.fieldToString)(newField)}`);
187
+ const newSubfield9 = fieldHasSubfield(field, "9", cyrillicTrans) ? [] : [{ code: "9", value: cyrillicTrans }];
188
+ const subfields = [
189
+ newSubfield6,
190
+ ...field.subfields.filter((sf) => sf.code !== "6").map((sf) => clone(sf)),
191
+ ...newSubfield9
192
+ ];
193
+ const newField = { tag: "880", ind1: field.ind1, ind2: field.ind2, subfields };
194
+ nvdebug(` New CYR 880 ${fieldToString(newField)}`);
270
195
  return newField;
271
196
  }
272
197
  function getNewOccurrenceNumber(originalField, record, maxCreatedOccurrenceNumber = 0) {
273
- const occurrenceNumber = (0, _subfield6Utils.fieldGetMaxSubfield6OccurrenceNumberAsInteger)(originalField);
274
- // Return existing occurrence number:
198
+ const occurrenceNumber = fieldGetMaxSubfield6OccurrenceNumberAsInteger(originalField);
275
199
  if (occurrenceNumber > 0) {
276
200
  return occurrenceNumber;
277
201
  }
278
202
  if (maxCreatedOccurrenceNumber) {
279
203
  return maxCreatedOccurrenceNumber + 1;
280
204
  }
281
- return (0, _subfield6Utils.recordGetMaxSubfield6OccurrenceNumberAsInteger)(record) + 1;
205
+ return recordGetMaxSubfield6OccurrenceNumberAsInteger(record) + 1;
282
206
  }
283
207
  function retainCyrillic(existingPairedFields) {
284
- // Should we move cyrillic content from a normali field to a 880?
285
208
  if (!config.retainCyrillic) {
286
209
  return false;
287
210
  }
288
- // Fail if we already have a paired 880 $9 <CYRILLIC> TRANS
289
- return !existingPairedFields.some(f => (0, _utils.fieldHasSubfield)(f, '9', cyrillicTrans));
211
+ return !existingPairedFields.some((f) => fieldHasSubfield(f, "9", cyrillicTrans));
290
212
  }
291
213
  function needsSfs4900Transliteration(existingPairedFields) {
292
214
  if (!config.doSFS4900Transliteration) {
293
215
  return false;
294
216
  }
295
- return !existingPairedFields.some(f => (0, _utils.fieldHasSubfield)(f, '9', sfs4900Trans));
217
+ return !existingPairedFields.some((f) => fieldHasSubfield(f, "9", sfs4900Trans));
296
218
  }
297
219
  function sfs4900PairCanBeTransliterated(field, record) {
298
- // MELINDA-10330: we already have public library data: (unmarked) SFS-4900 in FIELD and (unmarked) Cyrillic in 880
299
220
  if (!field.subfields || !tagCanBeTransliterated(field.tag) || !config.doISO9Transliteration || !config.retainCyrillic || !config.doSFS4900Transliteration) {
300
221
  return false;
301
222
  }
302
-
303
- // Original field: $9 ISO9 <TRANS> is the only legal <TRANS>
304
- if (fieldContainsCyrillicCharacters(field) || field.subfields.some(sf => sf.code === '9' && sf.value.includes('<TRANS>') && sf.value !== iso9Trans)) {
223
+ if (fieldContainsCyrillicCharacters(field) || field.subfields.some((sf) => sf.code === "9" && sf.value.includes("<TRANS>") && sf.value !== iso9Trans)) {
305
224
  return false;
306
225
  }
307
- const existingPairedFields = (0, _subfield6Utils.fieldGetOccurrenceNumberPairs)(field, record.get('880'));
226
+ const existingPairedFields = fieldGetOccurrenceNumberPairs(field, record.get("880"));
308
227
  if (existingPairedFields.length !== 1) {
309
228
  return false;
310
229
  }
311
-
312
- // Paired field: $9 CYRILLIC <TRANS> is the only legal <TRANS>
313
230
  const [pairedField] = existingPairedFields;
314
- (0, _utils.nvdebug)(`LOOKING FOR SFS4900 PAIR: ${(0, _utils.fieldToString)(field)}`);
315
- (0, _utils.nvdebug)(` HAVING PAIRED FIELD: ${(0, _utils.fieldToString)(pairedField)}`);
231
+ nvdebug(`LOOKING FOR SFS4900 PAIR: ${fieldToString(field)}`);
232
+ nvdebug(` HAVING PAIRED FIELD: ${fieldToString(pairedField)}`);
316
233
  if (!fieldContainsCyrillicCharacters(pairedField)) {
317
234
  return false;
318
235
  }
319
- if (pairedField.subfields.some(sf => sf.code === '9' && sf.value.includes('<TRANS>') && sf.value !== cyrillicTrans)) {
236
+ if (pairedField.subfields.some((sf) => sf.code === "9" && sf.value.includes("<TRANS>") && sf.value !== cyrillicTrans)) {
320
237
  return false;
321
238
  }
322
-
323
- // Actually check that original field and and sfs-4900-fied cyrillic field are equal (after punctuation clean-up),
324
- // and thus it's a real case of MELINDA-10330 ISO9 adding:
325
- const occurrenceNumberAsString = (0, _subfield6Utils.fieldGetUnambiguousOccurrenceNumber)(field);
326
- const languageCode = (0, _addMissingField.getLanguageCode)(record);
327
- const field2 = (0, _utils.fieldToString)(createFieldForSfs4900Comparison(mapFieldToSfs4900(pairedField, occurrenceNumberAsString, languageCode), field.tag));
328
- const field1 = (0, _utils.fieldToString)(createFieldForSfs4900Comparison(field, field.tag));
329
- (0, _utils.nvdebug)(`COMPARE CONTENTS:\n '${field1}' vs\n '${field2}': ${field1 === field2 ? 'OK' : 'FAIL'}`);
239
+ const occurrenceNumberAsString = fieldGetUnambiguousOccurrenceNumber(field);
240
+ const languageCode = getLanguageCode(record);
241
+ const field2 = fieldToString(createFieldForSfs4900Comparison(mapFieldToSfs4900(pairedField, occurrenceNumberAsString, languageCode), field.tag));
242
+ const field1 = fieldToString(createFieldForSfs4900Comparison(field, field.tag));
243
+ nvdebug(`COMPARE CONTENTS:
244
+ '${field1}' vs
245
+ '${field2}': ${field1 === field2 ? "OK" : "FAIL"}`);
330
246
  return field1 === field2;
331
247
  }
332
248
  function createFieldForSfs4900Comparison(field, tag) {
333
- const clonedField = (0, _clone.default)(field);
249
+ const clonedField = clone(field);
334
250
  clonedField.tag = tag;
335
- clonedField.subfields = clonedField.subfields.filter(sf => sf.code !== '9' || sf.value !== sfs4900Trans);
336
- return (0, _punctuation.fieldStripPunctuation)(clonedField);
251
+ clonedField.subfields = clonedField.subfields.filter((sf) => sf.code !== "9" || sf.value !== sfs4900Trans);
252
+ return fieldStripPunctuation(clonedField);
337
253
  }
338
254
  function transliterateSfs4900Pair(field, record) {
339
- // Handle MELINDA-10330: Field is already in SFS-4900 and the only paired field is in Cyrillic!
340
255
  if (!config.doISO9Transliteration) {
341
256
  return [];
342
257
  }
343
- const [pairedField] = (0, _subfield6Utils.fieldGetOccurrenceNumberPairs)(field, record.get('880'));
344
- const occurrenceNumberAsString = (0, _subfield6Utils.fieldGetUnambiguousOccurrenceNumber)(field);
345
- const languageCode = (0, _addMissingField.getLanguageCode)(record);
346
- const tmpField = {
347
- 'tag': field.tag,
348
- 'ind1': field.ind1,
349
- 'ind2': field.ind2,
350
- 'subfields': pairedField.subfields
351
- };
352
- const newMainField = config.doISO9Transliteration ? mapFieldToIso9(tmpField, occurrenceNumberAsString) : undefined; // Cyrillic => ISO-9
353
- const newCyrillicField = config.retainCyrillic ? mapFieldToCyrillicField880(tmpField, occurrenceNumberAsString) : undefined; // CYRILLIC
354
- const newSFS4900Field = config.doSFS4900Transliteration ? mapFieldToSfs4900(field, occurrenceNumberAsString, languageCode) : undefined; // SFS-4900
355
-
356
- // Trigger the drop of original counterpart $6 :
258
+ const [pairedField] = fieldGetOccurrenceNumberPairs(field, record.get("880"));
259
+ const occurrenceNumberAsString = fieldGetUnambiguousOccurrenceNumber(field);
260
+ const languageCode = getLanguageCode(record);
261
+ const tmpField = { "tag": field.tag, "ind1": field.ind1, "ind2": field.ind2, "subfields": pairedField.subfields };
262
+ const newMainField = config.doISO9Transliteration ? mapFieldToIso9(tmpField, occurrenceNumberAsString) : void 0;
263
+ const newCyrillicField = config.retainCyrillic ? mapFieldToCyrillicField880(tmpField, occurrenceNumberAsString) : void 0;
264
+ const newSFS4900Field = config.doSFS4900Transliteration ? mapFieldToSfs4900(field, occurrenceNumberAsString, languageCode) : void 0;
357
265
  pairedField.cyrilluxSkip = 1;
358
- return [newMainField, newCyrillicField, newSFS4900Field].filter(f => f);
266
+ return [newMainField, newCyrillicField, newSFS4900Field].filter((f) => f);
359
267
  }
360
268
  function processField(originalField, record, maxCreatedOccurrenceNumber = 0) {
361
269
  if (!fieldCanBeTransliterated(originalField)) {
362
270
  if (sfs4900PairCanBeTransliterated(originalField, record)) {
363
- // MELINDA-10330
364
271
  return transliterateSfs4900Pair(originalField, record);
365
272
  }
366
273
  if (originalField.cyrilluxSkip) {
367
- // MELINDA-10330 hack to remove 880 fields that were replaced/sort-of processed with their counterpair.
368
274
  return [];
369
275
  }
370
276
  return [originalField];
371
277
  }
372
-
373
- // nvdebug(`PROCESSING: ${fieldToString(originalField)}`);
374
-
375
278
  const newOccurrenceNumberAsInt = getNewOccurrenceNumber(originalField, record, maxCreatedOccurrenceNumber);
376
- const newOccurrenceNumberAsString = (0, _subfield6Utils.intToOccurrenceNumberString)(newOccurrenceNumberAsInt);
377
- const languageCode = (0, _addMissingField.getLanguageCode)(record);
378
-
379
- // nvdebug(`NEW OCCURRENCE NUMBER: '${newOccurrenceNumberAsString}'`);
380
-
381
- const existingPairedFields = (0, _subfield6Utils.fieldGetOccurrenceNumberPairs)(originalField, record.get('880'));
382
-
383
- // nvdebug(`NUMBER OF PAIRED 880 FIELDS: ${existingPairedFields.length}`);
384
-
385
- const newMainField = mapFieldToIso9(originalField, newOccurrenceNumberAsString); // ISO-9
386
- const newCyrillicField = retainCyrillic(existingPairedFields) ? mapFieldToCyrillicField880(originalField, newOccurrenceNumberAsString) : undefined; // CYRILLIC
387
- const newSFS4900Field = needsSfs4900Transliteration(existingPairedFields) ? mapFieldToSfs4900(originalField, newOccurrenceNumberAsString, languageCode) : undefined; /// SFS-4900
388
-
389
- return [newMainField, newCyrillicField, newSFS4900Field].filter(f => f);
279
+ const newOccurrenceNumberAsString = intToOccurrenceNumberString(newOccurrenceNumberAsInt);
280
+ const languageCode = getLanguageCode(record);
281
+ const existingPairedFields = fieldGetOccurrenceNumberPairs(originalField, record.get("880"));
282
+ const newMainField = mapFieldToIso9(originalField, newOccurrenceNumberAsString);
283
+ const newCyrillicField = retainCyrillic(existingPairedFields) ? mapFieldToCyrillicField880(originalField, newOccurrenceNumberAsString) : void 0;
284
+ const newSFS4900Field = needsSfs4900Transliteration(existingPairedFields) ? mapFieldToSfs4900(originalField, newOccurrenceNumberAsString, languageCode) : void 0;
285
+ return [newMainField, newCyrillicField, newSFS4900Field].filter((f) => f);
390
286
  }
391
287
  }
392
- //# sourceMappingURL=cyrillux.js.map
288
+ //# sourceMappingURL=cyrillux.js.map