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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (563) hide show
  1. package/.github/workflows/{melinda-node-tests.yml → melinda-node-tests-and-publish.yml} +37 -12
  2. package/dist/access-rights.js +63 -91
  3. package/dist/access-rights.js.map +7 -1
  4. package/dist/access-rights.test.js +137 -0
  5. package/dist/access-rights.test.js.map +7 -0
  6. package/dist/addMissingField041.js +21 -53
  7. package/dist/addMissingField041.js.map +7 -1
  8. package/dist/addMissingField041.test.js +39 -0
  9. package/dist/addMissingField041.test.js.map +7 -0
  10. package/dist/addMissingField336.js +99 -191
  11. package/dist/addMissingField336.js.map +7 -1
  12. package/dist/addMissingField336.test.js +39 -0
  13. package/dist/addMissingField336.test.js.map +7 -0
  14. package/dist/addMissingField337.js +63 -132
  15. package/dist/addMissingField337.js.map +7 -1
  16. package/dist/addMissingField337.test.js +39 -0
  17. package/dist/addMissingField337.test.js.map +7 -0
  18. package/dist/addMissingField338.js +147 -253
  19. package/dist/addMissingField338.js.map +7 -1
  20. package/dist/addMissingField338.test.js +39 -0
  21. package/dist/addMissingField338.test.js.map +7 -0
  22. package/dist/cyrillux-usemarcon-replacement.js +119 -272
  23. package/dist/cyrillux-usemarcon-replacement.js.map +7 -1
  24. package/dist/cyrillux-usemarcon-replacement.test.js +43 -0
  25. package/dist/cyrillux-usemarcon-replacement.test.js.map +7 -0
  26. package/dist/cyrillux.js +119 -223
  27. package/dist/cyrillux.js.map +7 -1
  28. package/dist/cyrillux.test.js +39 -0
  29. package/dist/cyrillux.test.js.map +7 -0
  30. package/dist/disambiguateSeriesStatements.js +40 -81
  31. package/dist/disambiguateSeriesStatements.js.map +7 -1
  32. package/dist/disambiguateSeriesStatements.test.js +44 -0
  33. package/dist/disambiguateSeriesStatements.test.js.map +7 -0
  34. package/dist/double-commas.js +7 -14
  35. package/dist/double-commas.js.map +7 -1
  36. package/dist/double-commas.test.js +48 -0
  37. package/dist/double-commas.test.js.map +7 -0
  38. package/dist/duplicates-ind1.js +10 -31
  39. package/dist/duplicates-ind1.js.map +7 -1
  40. package/dist/duplicates-ind1.test.js +40 -0
  41. package/dist/duplicates-ind1.test.js.map +7 -0
  42. package/dist/empty-fields.js +10 -22
  43. package/dist/empty-fields.js.map +7 -1
  44. package/dist/empty-fields.test.js +129 -0
  45. package/dist/empty-fields.test.js.map +7 -0
  46. package/dist/ending-punctuation-conf.js +873 -769
  47. package/dist/ending-punctuation-conf.js.map +7 -1
  48. package/dist/ending-punctuation.js +156 -169
  49. package/dist/ending-punctuation.js.map +7 -1
  50. package/dist/ending-punctuation.test.js +2385 -0
  51. package/dist/ending-punctuation.test.js.map +7 -0
  52. package/dist/ending-whitespace.js +10 -35
  53. package/dist/ending-whitespace.js.map +7 -1
  54. package/dist/ending-whitespace.test.js +38 -0
  55. package/dist/ending-whitespace.test.js.map +7 -0
  56. package/dist/field-008-18-34-character-groups.js +40 -125
  57. package/dist/field-008-18-34-character-groups.js.map +7 -1
  58. package/dist/field-008-18-34-character-groups.test.js +45 -0
  59. package/dist/field-008-18-34-character-groups.test.js.map +7 -0
  60. package/dist/field-505-separators.js +19 -39
  61. package/dist/field-505-separators.js.map +7 -1
  62. package/dist/field-505-separators.test.js +45 -0
  63. package/dist/field-505-separators.test.js.map +7 -0
  64. package/dist/field-521-fix.js +19 -47
  65. package/dist/field-521-fix.js.map +7 -1
  66. package/dist/field-521-fix.test.js +44 -0
  67. package/dist/field-521-fix.test.js.map +7 -0
  68. package/dist/field-exclusion.js +37 -91
  69. package/dist/field-exclusion.js.map +7 -1
  70. package/dist/field-exclusion.test.js +821 -0
  71. package/dist/field-exclusion.test.js.map +7 -0
  72. package/dist/field-structure.js +52 -104
  73. package/dist/field-structure.js.map +7 -1
  74. package/dist/field-structure.test.js +587 -0
  75. package/dist/field-structure.test.js.map +7 -0
  76. package/dist/field33XUtils.js +119 -503
  77. package/dist/field33XUtils.js.map +7 -1
  78. package/dist/fields-present.js +11 -23
  79. package/dist/fields-present.js.map +7 -1
  80. package/dist/fields-present.test.js +95 -0
  81. package/dist/fields-present.test.js.map +7 -0
  82. package/dist/fix-33X.js +393 -431
  83. package/dist/fix-33X.js.map +7 -1
  84. package/dist/fix-33X.test.js +39 -0
  85. package/dist/fix-33X.test.js.map +7 -0
  86. package/dist/fix-country-codes.js +20 -50
  87. package/dist/fix-country-codes.js.map +7 -1
  88. package/dist/fix-country-codes.test.js +44 -0
  89. package/dist/fix-country-codes.test.js.map +7 -0
  90. package/dist/fix-language-codes.js +23 -53
  91. package/dist/fix-language-codes.js.map +7 -1
  92. package/dist/fix-language-codes.test.js +38 -0
  93. package/dist/fix-language-codes.test.js.map +7 -0
  94. package/dist/fixRelatorTerms.js +82 -209
  95. package/dist/fixRelatorTerms.js.map +7 -1
  96. package/dist/fixRelatorTerms.test.js +44 -0
  97. package/dist/fixRelatorTerms.test.js.map +7 -0
  98. package/dist/fixed-fields.js +21 -30
  99. package/dist/fixed-fields.js.map +7 -1
  100. package/dist/fixed-fields.test.js +87 -0
  101. package/dist/fixed-fields.test.js.map +7 -0
  102. package/dist/identical-fields.js +8 -24
  103. package/dist/identical-fields.js.map +7 -1
  104. package/dist/identical-fields.test.js +119 -0
  105. package/dist/identical-fields.test.js.map +7 -0
  106. package/dist/index.js +182 -413
  107. package/dist/index.js.map +7 -1
  108. package/dist/indicator-fixes.js +66 -94
  109. package/dist/indicator-fixes.js.map +7 -1
  110. package/dist/indicator-fixes.test.js +42 -0
  111. package/dist/indicator-fixes.test.js.map +7 -0
  112. package/dist/isbn-issn.js +71 -128
  113. package/dist/isbn-issn.js.map +7 -1
  114. package/dist/isbn-issn.test.js +398 -0
  115. package/dist/isbn-issn.test.js.map +7 -0
  116. package/dist/item-language.js +32 -65
  117. package/dist/item-language.js.map +7 -1
  118. package/dist/item-language.test.js +322 -0
  119. package/dist/item-language.test.js.map +7 -0
  120. package/dist/melindaCustomMergeFields.js +5182 -11233
  121. package/dist/melindaCustomMergeFields.js.map +7 -1
  122. package/dist/merge-fields/controlSubfields.js +75 -142
  123. package/dist/merge-fields/controlSubfields.js.map +7 -1
  124. package/dist/merge-fields/counterpartField.js +187 -379
  125. package/dist/merge-fields/counterpartField.js.map +7 -1
  126. package/dist/merge-fields/dataProvenance.js +29 -0
  127. package/dist/merge-fields/dataProvenance.js.map +7 -0
  128. package/dist/merge-fields/index.js +25 -50
  129. package/dist/merge-fields/index.js.map +7 -1
  130. package/dist/merge-fields/mergableIndicator.js +18 -51
  131. package/dist/merge-fields/mergableIndicator.js.map +7 -1
  132. package/dist/merge-fields/mergableTag.js +78 -30
  133. package/dist/merge-fields/mergableTag.js.map +7 -1
  134. package/dist/merge-fields/mergeConfig.js +66 -171
  135. package/dist/merge-fields/mergeConfig.js.map +7 -1
  136. package/dist/merge-fields/mergeConstraints.js +323 -1214
  137. package/dist/merge-fields/mergeConstraints.js.map +7 -1
  138. package/dist/merge-fields/mergeField.js +47 -111
  139. package/dist/merge-fields/mergeField.js.map +7 -1
  140. package/dist/merge-fields/mergeIndicator.js +64 -118
  141. package/dist/merge-fields/mergeIndicator.js.map +7 -1
  142. package/dist/merge-fields/mergeOrAddPostprocess.js +14 -38
  143. package/dist/merge-fields/mergeOrAddPostprocess.js.map +7 -1
  144. package/dist/merge-fields/mergeOrAddSubfield.js +62 -104
  145. package/dist/merge-fields/mergeOrAddSubfield.js.map +7 -1
  146. package/dist/merge-fields/mergeSubfield.js +47 -95
  147. package/dist/merge-fields/mergeSubfield.js.map +7 -1
  148. package/dist/merge-fields/removeDuplicateSubfields.js +18 -31
  149. package/dist/merge-fields/removeDuplicateSubfields.js.map +7 -1
  150. package/dist/merge-fields/worldKnowledge.js +15 -40
  151. package/dist/merge-fields/worldKnowledge.js.map +7 -1
  152. package/dist/merge-fields.test.js +46 -0
  153. package/dist/merge-fields.test.js.map +7 -0
  154. package/dist/mergeField500Lisapainokset.js +27 -56
  155. package/dist/mergeField500Lisapainokset.js.map +7 -1
  156. package/dist/mergeField500Lisapainokset.test.js +44 -0
  157. package/dist/mergeField500Lisapainokset.test.js.map +7 -0
  158. package/dist/mergeRelatorTermFields.js +33 -69
  159. package/dist/mergeRelatorTermFields.js.map +7 -1
  160. package/dist/mergeRelatorTermFields.test.js +44 -0
  161. package/dist/mergeRelatorTermFields.test.js.map +7 -0
  162. package/dist/modernize-502.js +23 -55
  163. package/dist/modernize-502.js.map +7 -1
  164. package/dist/modernize-502.test.js +38 -0
  165. package/dist/modernize-502.test.js.map +7 -0
  166. package/dist/multiple-subfield-0.js +23 -48
  167. package/dist/multiple-subfield-0.js.map +7 -1
  168. package/dist/multiple-subfield-0.test.js +44 -0
  169. package/dist/multiple-subfield-0.test.js.map +7 -0
  170. package/dist/non-breaking-space.js +11 -32
  171. package/dist/non-breaking-space.js.map +7 -1
  172. package/dist/non-breaking-space.test.js +38 -0
  173. package/dist/non-breaking-space.test.js.map +7 -0
  174. package/dist/normalize-dashes.js +18 -37
  175. package/dist/normalize-dashes.js.map +7 -1
  176. package/dist/normalize-dashes.test.js +44 -0
  177. package/dist/normalize-dashes.test.js.map +7 -0
  178. package/dist/normalize-identifiers.js +54 -140
  179. package/dist/normalize-identifiers.js.map +7 -1
  180. package/dist/normalize-identifiers.test.js +44 -0
  181. package/dist/normalize-identifiers.test.js.map +7 -0
  182. package/dist/normalize-qualifying-information.js +23 -48
  183. package/dist/normalize-qualifying-information.js.map +7 -1
  184. package/dist/normalize-qualifying-information.test.js +44 -0
  185. package/dist/normalize-qualifying-information.test.js.map +7 -0
  186. package/dist/normalize-utf8-diacritics.js +19 -105
  187. package/dist/normalize-utf8-diacritics.js.map +7 -1
  188. package/dist/normalize-utf8-diacritics.test.js +44 -0
  189. package/dist/normalize-utf8-diacritics.test.js.map +7 -0
  190. package/dist/normalizeFieldForComparison.js +91 -158
  191. package/dist/normalizeFieldForComparison.js.map +7 -1
  192. package/dist/normalizeSubfieldValueForComparison.js +37 -77
  193. package/dist/normalizeSubfieldValueForComparison.js.map +7 -1
  194. package/dist/prepublicationUtils.js +58 -111
  195. package/dist/prepublicationUtils.js.map +7 -1
  196. package/dist/punctuation/index.js +56 -72
  197. package/dist/punctuation/index.js.map +7 -1
  198. package/dist/punctuation/rules/aut.js +372 -331
  199. package/dist/punctuation/rules/aut.js.map +7 -1
  200. package/dist/punctuation/rules/bib.js +420 -373
  201. package/dist/punctuation/rules/bib.js.map +7 -1
  202. package/dist/punctuation/rules/index.js +7 -21
  203. package/dist/punctuation/rules/index.js.map +7 -1
  204. package/dist/punctuation.test.js +44 -0
  205. package/dist/punctuation.test.js.map +7 -0
  206. package/dist/punctuation2.js +259 -802
  207. package/dist/punctuation2.js.map +7 -1
  208. package/dist/punctuation2.test.js +44 -0
  209. package/dist/punctuation2.test.js.map +7 -0
  210. package/dist/reindexSubfield6OccurenceNumbers.js +61 -96
  211. package/dist/reindexSubfield6OccurenceNumbers.js.map +7 -1
  212. package/dist/reindexSubfield6OccurenceNumbers.test.js +44 -0
  213. package/dist/reindexSubfield6OccurenceNumbers.test.js.map +7 -0
  214. package/dist/removeDuplicateDataFields.js +102 -202
  215. package/dist/removeDuplicateDataFields.js.map +7 -1
  216. package/dist/removeDuplicateDataFields.test.js +44 -0
  217. package/dist/removeDuplicateDataFields.test.js.map +7 -0
  218. package/dist/removeInferiorDataFields.js +104 -227
  219. package/dist/removeInferiorDataFields.js.map +7 -1
  220. package/dist/removeInferiorDataFields.test.js +44 -0
  221. package/dist/removeInferiorDataFields.test.js.map +7 -0
  222. package/dist/resolvable-ext-references-melinda.js +25 -60
  223. package/dist/resolvable-ext-references-melinda.js.map +7 -1
  224. package/dist/resolvable-ext-references-melinda.test.js +160 -0
  225. package/dist/resolvable-ext-references-melinda.test.js.map +7 -0
  226. package/dist/resolveOrphanedSubfield6s.js +32 -63
  227. package/dist/resolveOrphanedSubfield6s.js.map +7 -1
  228. package/dist/resolveOrphanedSubfield6s.test.js +44 -0
  229. package/dist/resolveOrphanedSubfield6s.test.js.map +7 -0
  230. package/dist/sanitize-vocabulary-source-codes.js +27 -55
  231. package/dist/sanitize-vocabulary-source-codes.js.map +7 -1
  232. package/dist/sanitize-vocabulary-source-codes.test.js +45 -0
  233. package/dist/sanitize-vocabulary-source-codes.test.js.map +7 -0
  234. package/dist/sort-tags.js +13 -25
  235. package/dist/sort-tags.js.map +7 -1
  236. package/dist/sort-tags.test.js +261 -0
  237. package/dist/sort-tags.test.js.map +7 -0
  238. package/dist/sortFields.js +152 -222
  239. package/dist/sortFields.js.map +7 -1
  240. package/dist/sortFields.test.js +44 -0
  241. package/dist/sortFields.test.js.map +7 -0
  242. package/dist/sortRelatorTerms.js +30 -68
  243. package/dist/sortRelatorTerms.js.map +7 -1
  244. package/dist/sortRelatorTerms.test.js +44 -0
  245. package/dist/sortRelatorTerms.test.js.map +7 -0
  246. package/dist/sortSubfields.js +102 -255
  247. package/dist/sortSubfields.js.map +7 -1
  248. package/dist/sortSubfields.test.js +44 -0
  249. package/dist/sortSubfields.test.js.map +7 -0
  250. package/dist/stripPunctuation.js +13 -36
  251. package/dist/stripPunctuation.js.map +7 -1
  252. package/dist/stripPunctuation.test.js +44 -0
  253. package/dist/stripPunctuation.test.js.map +7 -0
  254. package/dist/subfield-exclusion.js +28 -75
  255. package/dist/subfield-exclusion.js.map +7 -1
  256. package/dist/subfield-exclusion.test.js +471 -0
  257. package/dist/subfield-exclusion.test.js.map +7 -0
  258. package/dist/subfield6Utils.js +107 -269
  259. package/dist/subfield6Utils.js.map +7 -1
  260. package/dist/subfield8Utils.js +26 -50
  261. package/dist/subfield8Utils.js.map +7 -1
  262. package/dist/subfieldValueNormalizations.js +40 -74
  263. package/dist/subfieldValueNormalizations.js.map +7 -1
  264. package/dist/subfieldValueNormalizations.test.js +45 -0
  265. package/dist/subfieldValueNormalizations.test.js.map +7 -0
  266. package/dist/sync-007-and-300.js +22 -53
  267. package/dist/sync-007-and-300.js.map +7 -1
  268. package/dist/sync-007-and-300.test.js +44 -0
  269. package/dist/sync-007-and-300.test.js.map +7 -0
  270. package/dist/translate-terms.js +67 -155
  271. package/dist/translate-terms.js.map +7 -1
  272. package/dist/translate-terms.test.js +54 -0
  273. package/dist/translate-terms.test.js.map +7 -0
  274. package/dist/typeOfDate-008.js +10 -25
  275. package/dist/typeOfDate-008.js.map +7 -1
  276. package/dist/typeOfDate-008.test.js +40 -0
  277. package/dist/typeOfDate-008.test.js.map +7 -0
  278. package/dist/unicode-decomposition.js +94 -107
  279. package/dist/unicode-decomposition.js.map +7 -1
  280. package/dist/unicode-decomposition.test.js +94 -0
  281. package/dist/unicode-decomposition.test.js.map +7 -0
  282. package/dist/update-field-540.js +30 -75
  283. package/dist/update-field-540.js.map +7 -1
  284. package/dist/update-field-540.test.js +44 -0
  285. package/dist/update-field-540.test.js.map +7 -0
  286. package/dist/urn.js +55 -128
  287. package/dist/urn.js.map +7 -1
  288. package/dist/urn.test.js +44 -0
  289. package/dist/urn.test.js.map +7 -0
  290. package/dist/utils.js +78 -126
  291. package/dist/utils.js.map +7 -1
  292. package/eslint.config.mjs +1 -2
  293. package/package.json +28 -101
  294. package/src/access-rights.js +1 -1
  295. package/src/{access-rights.spec.js → access-rights.test.js} +9 -10
  296. package/src/addMissingField041.js +1 -1
  297. package/src/{addMissingField336.spec.js → addMissingField041.test.js} +13 -14
  298. package/src/addMissingField336.js +3 -3
  299. package/src/{addMissingField041.spec.js → addMissingField336.test.js} +13 -14
  300. package/src/addMissingField337.js +2 -2
  301. package/src/{addMissingField337.spec.js → addMissingField337.test.js} +13 -14
  302. package/src/addMissingField338.js +2 -2
  303. package/src/{addMissingField338.spec.js → addMissingField338.test.js} +13 -14
  304. package/src/cyrillux-usemarcon-replacement.js +18 -18
  305. package/src/{cyrillux-usemarcon-replacement.spec.js → cyrillux-usemarcon-replacement.test.js} +17 -14
  306. package/src/cyrillux.js +19 -12
  307. package/src/{cyrillux.spec.js → cyrillux.test.js} +13 -14
  308. package/src/disambiguateSeriesStatements.js +2 -2
  309. package/src/{disambiguateSeriesStatements.spec.js → disambiguateSeriesStatements.test.js} +12 -13
  310. package/src/double-commas.js +1 -1
  311. package/src/{double-commas.spec.js → double-commas.test.js} +9 -11
  312. package/src/duplicates-ind1.js +1 -1
  313. package/src/{duplicates-ind1.spec.js → duplicates-ind1.test.js} +12 -13
  314. package/src/{empty-fields.spec.js → empty-fields.test.js} +11 -13
  315. package/src/ending-punctuation-conf.js +6 -5
  316. package/src/ending-punctuation.js +115 -24
  317. package/src/{ending-punctuation.spec.js → ending-punctuation.test.js} +357 -275
  318. package/src/{ending-whitespace.spec.js → ending-whitespace.test.js} +12 -13
  319. package/src/field-008-18-34-character-groups.js +2 -2
  320. package/src/{field-008-18-34-character-groups.spec.js → field-008-18-34-character-groups.test.js} +13 -13
  321. package/src/field-505-separators.js +3 -3
  322. package/src/{field-505-separators.spec.js → field-505-separators.test.js} +16 -14
  323. package/src/field-521-fix.js +2 -2
  324. package/src/{field-521-fix.spec.js → field-521-fix.test.js} +12 -13
  325. package/src/field-exclusion.js +1 -1
  326. package/src/{field-exclusion.spec.js → field-exclusion.test.js} +60 -57
  327. package/src/{field-structure.spec.js → field-structure.test.js} +29 -29
  328. package/src/{fields-present.spec.js → fields-present.test.js} +12 -15
  329. package/src/fix-33X.js +4 -4
  330. package/src/{fix-33X.spec.js → fix-33X.test.js} +13 -14
  331. package/src/fix-country-codes.js +1 -1
  332. package/src/{fix-country-codes.spec.js → fix-country-codes.test.js} +12 -13
  333. package/src/fix-language-codes.js +5 -5
  334. package/src/{fix-language-codes.spec.js → fix-language-codes.test.js} +12 -13
  335. package/src/fixRelatorTerms.js +5 -5
  336. package/src/{fixRelatorTerms.spec.js → fixRelatorTerms.test.js} +13 -13
  337. package/src/{fixed-fields.spec.js → fixed-fields.test.js} +11 -14
  338. package/src/identical-fields.js +1 -1
  339. package/src/{identical-fields.spec.js → identical-fields.test.js} +9 -11
  340. package/src/index.js +132 -59
  341. package/src/indicator-fixes.js +17 -4
  342. package/src/{indicator-fixes.spec.js → indicator-fixes.test.js} +9 -12
  343. package/src/isbn-issn.js +12 -7
  344. package/src/{isbn-issn.spec.js → isbn-issn.test.js} +20 -22
  345. package/src/{item-language.spec.js → item-language.test.js} +21 -22
  346. package/src/melindaCustomMergeFields.js +1 -1
  347. package/src/merge-fields/controlSubfields.js +1 -1
  348. package/src/merge-fields/counterpartField.js +14 -9
  349. package/src/merge-fields/dataProvenance.js +41 -0
  350. package/src/merge-fields/index.js +12 -3
  351. package/src/merge-fields/mergableIndicator.js +1 -1
  352. package/src/merge-fields/mergeField.js +8 -8
  353. package/src/merge-fields/mergeIndicator.js +1 -1
  354. package/src/merge-fields/mergeOrAddPostprocess.js +4 -4
  355. package/src/merge-fields/mergeOrAddSubfield.js +2 -2
  356. package/src/merge-fields/mergeSubfield.js +4 -4
  357. package/src/merge-fields/removeDuplicateSubfields.js +2 -2
  358. package/src/{merge-fields.spec.js → merge-fields.test.js} +18 -15
  359. package/src/mergeField500Lisapainokset.js +1 -1
  360. package/src/{mergeField500Lisapainokset.spec.js → mergeField500Lisapainokset.test.js} +12 -13
  361. package/src/mergeRelatorTermFields.js +5 -7
  362. package/src/{mergeRelatorTermFields.spec.js → mergeRelatorTermFields.test.js} +12 -13
  363. package/src/modernize-502.js +1 -1
  364. package/src/{modernize-502.spec.js → modernize-502.test.js} +12 -13
  365. package/src/multiple-subfield-0.js +3 -3
  366. package/src/{multiple-subfield-0.spec.js → multiple-subfield-0.test.js} +13 -13
  367. package/src/{non-breaking-space.spec.js → non-breaking-space.test.js} +12 -13
  368. package/src/normalize-dashes.js +2 -2
  369. package/src/{normalize-dashes.spec.js → normalize-dashes.test.js} +12 -13
  370. package/src/normalize-identifiers.js +1 -1
  371. package/src/{normalize-identifiers.spec.js → normalize-identifiers.test.js} +12 -13
  372. package/src/normalize-qualifying-information.js +2 -2
  373. package/src/{normalize-qualifying-information.spec.js → normalize-qualifying-information.test.js} +12 -13
  374. package/src/normalize-utf8-diacritics.js +2 -2
  375. package/src/{normalize-utf8-diacritics.spec.js → normalize-utf8-diacritics.test.js} +13 -13
  376. package/src/normalizeFieldForComparison.js +32 -6
  377. package/src/normalizeSubfieldValueForComparison.js +1 -1
  378. package/src/prepublicationUtils.js +4 -4
  379. package/src/punctuation/index.js +1 -1
  380. package/src/punctuation/rules/index.js +2 -2
  381. package/src/{punctuation.spec.js → punctuation.test.js} +12 -13
  382. package/src/punctuation2.js +17 -8
  383. package/src/{punctuation2.spec.js → punctuation2.test.js} +12 -13
  384. package/src/reindexSubfield6OccurenceNumbers.js +5 -7
  385. package/src/{reindexSubfield6OccurenceNumbers.spec.js → reindexSubfield6OccurenceNumbers.test.js} +12 -13
  386. package/src/removeDuplicateDataFields.js +11 -19
  387. package/src/{removeDuplicateDataFields.spec.js → removeDuplicateDataFields.test.js} +12 -13
  388. package/src/removeInferiorDataFields.js +15 -12
  389. package/src/{removeInferiorDataFields.spec.js → removeInferiorDataFields.test.js} +13 -13
  390. package/src/resolvable-ext-references-melinda.js +1 -1
  391. package/src/{resolvable-ext-references-melinda.spec.js → resolvable-ext-references-melinda.test.js} +42 -27
  392. package/src/resolveOrphanedSubfield6s.js +6 -6
  393. package/src/{resolveOrphanedSubfield6s.spec.js → resolveOrphanedSubfield6s.test.js} +13 -13
  394. package/src/sanitize-vocabulary-source-codes.js +4 -4
  395. package/src/{sanitize-vocabulary-source-codes.spec.js → sanitize-vocabulary-source-codes.test.js} +16 -14
  396. package/src/{sort-tags.spec.js → sort-tags.test.js} +9 -11
  397. package/src/sortFields.js +4 -4
  398. package/src/{sortFields.spec.js → sortFields.test.js} +12 -13
  399. package/src/sortRelatorTerms.js +3 -3
  400. package/src/{sortRelatorTerms.spec.js → sortRelatorTerms.test.js} +13 -13
  401. package/src/sortSubfields.js +8 -6
  402. package/src/{sortSubfields.spec.js → sortSubfields.test.js} +13 -13
  403. package/src/stripPunctuation.js +3 -3
  404. package/src/{stripPunctuation.spec.js → stripPunctuation.test.js} +13 -13
  405. package/src/subfield-exclusion.js +1 -1
  406. package/src/{subfield-exclusion.spec.js → subfield-exclusion.test.js} +45 -36
  407. package/src/subfield6Utils.js +6 -10
  408. package/src/subfield8Utils.js +4 -4
  409. package/src/subfieldValueNormalizations.js +3 -3
  410. package/src/{subfieldValueNormalizations.spec.js → subfieldValueNormalizations.test.js} +18 -14
  411. package/src/sync-007-and-300.js +2 -2
  412. package/src/{sync-007-and-300.spec.js → sync-007-and-300.test.js} +13 -13
  413. package/src/translate-terms.js +3 -3
  414. package/src/translate-terms.test.js +75 -0
  415. package/src/{typeOfDate-008.spec.js → typeOfDate-008.test.js} +12 -13
  416. package/src/{unicode-decomposition.spec.js → unicode-decomposition.test.js} +10 -16
  417. package/src/update-field-540.js +2 -2
  418. package/src/{update-field-540.spec.js → update-field-540.test.js} +13 -10
  419. package/src/urn.js +2 -2
  420. package/src/{urn.spec.js → urn.test.js} +12 -13
  421. package/src/utils.js +21 -5
  422. package/test-fixtures/field-505-separators/03/expectedResult.json +3 -1
  423. package/test-fixtures/field-505-separators/03/record.json +3 -0
  424. package/test-fixtures/indicator-fixes/10/expectedResult.json +11 -0
  425. package/test-fixtures/indicator-fixes/10/metadata.json +4 -0
  426. package/test-fixtures/indicator-fixes/10/record.json +11 -0
  427. package/test-fixtures/merge-fields/f05/expectedResult.json +24 -0
  428. package/test-fixtures/merge-fields/f05/metadata.json +6 -0
  429. package/test-fixtures/merge-fields/f05/record.json +30 -0
  430. package/test-fixtures/normalize-subfield-value/01/metadata.json +4 -1
  431. package/test-fixtures/normalize-subfield-value/01/record.json +3 -0
  432. package/test-fixtures/normalize-subfield-value/02/expectedResult.json +3 -1
  433. package/test-fixtures/normalize-subfield-value/02/metadata.json +2 -1
  434. package/test-fixtures/normalize-subfield-value/02/record.json +3 -0
  435. package/test-fixtures/remove-inferior-datafields/f16/expectedResult.json +12 -0
  436. package/test-fixtures/remove-inferior-datafields/f16/metadata.json +5 -0
  437. package/test-fixtures/remove-inferior-datafields/f16/record.json +14 -0
  438. package/test-fixtures/sanitize-vocabulary-source-codes/f03/expectedResult.json +3 -1
  439. package/test-fixtures/sanitize-vocabulary-source-codes/f04/expectedResult.json +3 -1
  440. package/test-fixtures/sanitize-vocabulary-source-codes/v04/metadata.json +1 -4
  441. package/test-fixtures/sanitize-vocabulary-source-codes/v04/record.json +1 -1
  442. package/test-fixtures/translate-terms-data.js +42 -0
  443. package/dist/access-rights.spec.js +0 -195
  444. package/dist/access-rights.spec.js.map +0 -1
  445. package/dist/addMissingField041.spec.js +0 -45
  446. package/dist/addMissingField041.spec.js.map +0 -1
  447. package/dist/addMissingField336.spec.js +0 -45
  448. package/dist/addMissingField336.spec.js.map +0 -1
  449. package/dist/addMissingField337.spec.js +0 -43
  450. package/dist/addMissingField337.spec.js.map +0 -1
  451. package/dist/addMissingField338.spec.js +0 -45
  452. package/dist/addMissingField338.spec.js.map +0 -1
  453. package/dist/cyrillux-usemarcon-replacement.spec.js +0 -45
  454. package/dist/cyrillux-usemarcon-replacement.spec.js.map +0 -1
  455. package/dist/cyrillux.spec.js +0 -46
  456. package/dist/cyrillux.spec.js.map +0 -1
  457. package/dist/disambiguateSeriesStatements.spec.js +0 -51
  458. package/dist/disambiguateSeriesStatements.spec.js.map +0 -1
  459. package/dist/double-commas.spec.js +0 -73
  460. package/dist/double-commas.spec.js.map +0 -1
  461. package/dist/duplicates-ind1.spec.js +0 -45
  462. package/dist/duplicates-ind1.spec.js.map +0 -1
  463. package/dist/empty-fields.spec.js +0 -118
  464. package/dist/empty-fields.spec.js.map +0 -1
  465. package/dist/ending-punctuation.spec.js +0 -2654
  466. package/dist/ending-punctuation.spec.js.map +0 -1
  467. package/dist/ending-whitespace.spec.js +0 -42
  468. package/dist/ending-whitespace.spec.js.map +0 -1
  469. package/dist/field-008-18-34-character-groups.spec.js +0 -51
  470. package/dist/field-008-18-34-character-groups.spec.js.map +0 -1
  471. package/dist/field-505-separators.spec.js +0 -51
  472. package/dist/field-505-separators.spec.js.map +0 -1
  473. package/dist/field-521-fix.spec.js +0 -51
  474. package/dist/field-521-fix.spec.js.map +0 -1
  475. package/dist/field-exclusion.spec.js +0 -1054
  476. package/dist/field-exclusion.spec.js.map +0 -1
  477. package/dist/field-structure.spec.js +0 -535
  478. package/dist/field-structure.spec.js.map +0 -1
  479. package/dist/fields-present.spec.js +0 -121
  480. package/dist/fields-present.spec.js.map +0 -1
  481. package/dist/fix-33X.spec.js +0 -45
  482. package/dist/fix-33X.spec.js.map +0 -1
  483. package/dist/fix-country-codes.spec.js +0 -51
  484. package/dist/fix-country-codes.spec.js.map +0 -1
  485. package/dist/fix-language-codes.spec.js +0 -44
  486. package/dist/fix-language-codes.spec.js.map +0 -1
  487. package/dist/fixRelatorTerms.spec.js +0 -51
  488. package/dist/fixRelatorTerms.spec.js.map +0 -1
  489. package/dist/fixed-fields.spec.js +0 -140
  490. package/dist/fixed-fields.spec.js.map +0 -1
  491. package/dist/identical-fields.spec.js +0 -99
  492. package/dist/identical-fields.spec.js.map +0 -1
  493. package/dist/indicator-fixes.spec.js +0 -51
  494. package/dist/indicator-fixes.spec.js.map +0 -1
  495. package/dist/isbn-issn.spec.js +0 -595
  496. package/dist/isbn-issn.spec.js.map +0 -1
  497. package/dist/item-language.spec.js +0 -306
  498. package/dist/item-language.spec.js.map +0 -1
  499. package/dist/melindaCustomMergeFields.json +0 -5120
  500. package/dist/merge-fields.spec.js +0 -51
  501. package/dist/merge-fields.spec.js.map +0 -1
  502. package/dist/mergeField500Lisapainokset.spec.js +0 -51
  503. package/dist/mergeField500Lisapainokset.spec.js.map +0 -1
  504. package/dist/mergeRelatorTermFields.spec.js +0 -51
  505. package/dist/mergeRelatorTermFields.spec.js.map +0 -1
  506. package/dist/modernize-502.spec.js +0 -49
  507. package/dist/modernize-502.spec.js.map +0 -1
  508. package/dist/multiple-subfield-0.spec.js +0 -51
  509. package/dist/multiple-subfield-0.spec.js.map +0 -1
  510. package/dist/non-breaking-space.spec.js +0 -42
  511. package/dist/non-breaking-space.spec.js.map +0 -1
  512. package/dist/normalize-dashes.spec.js +0 -51
  513. package/dist/normalize-dashes.spec.js.map +0 -1
  514. package/dist/normalize-identifiers.spec.js +0 -51
  515. package/dist/normalize-identifiers.spec.js.map +0 -1
  516. package/dist/normalize-qualifying-information.spec.js +0 -51
  517. package/dist/normalize-qualifying-information.spec.js.map +0 -1
  518. package/dist/normalize-utf8-diacritics.spec.js +0 -51
  519. package/dist/normalize-utf8-diacritics.spec.js.map +0 -1
  520. package/dist/punctuation.spec.js +0 -51
  521. package/dist/punctuation.spec.js.map +0 -1
  522. package/dist/punctuation2.spec.js +0 -51
  523. package/dist/punctuation2.spec.js.map +0 -1
  524. package/dist/reindexSubfield6OccurenceNumbers.spec.js +0 -51
  525. package/dist/reindexSubfield6OccurenceNumbers.spec.js.map +0 -1
  526. package/dist/removeDuplicateDataFields.spec.js +0 -51
  527. package/dist/removeDuplicateDataFields.spec.js.map +0 -1
  528. package/dist/removeInferiorDataFields.spec.js +0 -51
  529. package/dist/removeInferiorDataFields.spec.js.map +0 -1
  530. package/dist/resolvable-ext-references-melinda.spec.js +0 -166
  531. package/dist/resolvable-ext-references-melinda.spec.js.map +0 -1
  532. package/dist/resolveOrphanedSubfield6s.spec.js +0 -51
  533. package/dist/resolveOrphanedSubfield6s.spec.js.map +0 -1
  534. package/dist/sanitize-vocabulary-source-codes.spec.js +0 -51
  535. package/dist/sanitize-vocabulary-source-codes.spec.js.map +0 -1
  536. package/dist/sort-tags.spec.js +0 -207
  537. package/dist/sort-tags.spec.js.map +0 -1
  538. package/dist/sortFields.spec.js +0 -51
  539. package/dist/sortFields.spec.js.map +0 -1
  540. package/dist/sortRelatorTerms.spec.js +0 -51
  541. package/dist/sortRelatorTerms.spec.js.map +0 -1
  542. package/dist/sortSubfields.spec.js +0 -52
  543. package/dist/sortSubfields.spec.js.map +0 -1
  544. package/dist/stripPunctuation.spec.js +0 -51
  545. package/dist/stripPunctuation.spec.js.map +0 -1
  546. package/dist/subfield-exclusion.spec.js +0 -523
  547. package/dist/subfield-exclusion.spec.js.map +0 -1
  548. package/dist/subfieldValueNormalizations.spec.js +0 -51
  549. package/dist/subfieldValueNormalizations.spec.js.map +0 -1
  550. package/dist/sync-007-and-300.spec.js +0 -51
  551. package/dist/sync-007-and-300.spec.js.map +0 -1
  552. package/dist/translate-terms.spec.js +0 -51
  553. package/dist/translate-terms.spec.js.map +0 -1
  554. package/dist/typeOfDate-008.spec.js +0 -47
  555. package/dist/typeOfDate-008.spec.js.map +0 -1
  556. package/dist/unicode-decomposition.spec.js +0 -91
  557. package/dist/unicode-decomposition.spec.js.map +0 -1
  558. package/dist/update-field-540.spec.js +0 -51
  559. package/dist/update-field-540.spec.js.map +0 -1
  560. package/dist/urn.spec.js +0 -52
  561. package/dist/urn.spec.js.map +0 -1
  562. package/src/melindaCustomMergeFields.json +0 -5120
  563. package/src/translate-terms.spec.js +0 -52
@@ -1,48 +1,25 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = _default;
7
- exports.fieldOrderComparator = fieldOrderComparator;
8
- exports.scoreRelatorTerm = scoreRelatorTerm;
9
- var _clone = _interopRequireDefault(require("clone"));
10
- var _utils = require("./utils");
11
- var _marcFieldSort = require("@natlibfi/marc-record/dist/marcFieldSort");
12
- var _subfield8Utils = require("./subfield8Utils");
13
- var _subfield6Utils = require("./subfield6Utils");
14
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
- // Taken from project marc-record-js, file marcSortFields.js as this contains more and more Melinda-specific rules.
16
-
17
- //import createDebugLogger from 'debug';
18
-
19
- //const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:sortFields');
20
- //const debugData = debug.extend('data');
21
- //const debugDev = debug.extend('dev');
22
-
1
+ import clone from "clone";
2
+ import { fieldHasSubfield, fieldToString } from "./utils.js";
3
+ import { sortByTag, sortAlphabetically, fieldOrderComparator as globalFieldOrderComparator } from "@natlibfi/marc-record/dist/marcFieldSort.js";
4
+ import { isValidSubfield8 } from "./subfield8Utils.js";
5
+ import { fieldGetUnambiguousOccurrenceNumber, fieldGetUnambiguousTag } from "./subfield6Utils.js";
23
6
  const BIG_BAD_NUMBER = 999999999;
24
- function _default() {
7
+ export default function() {
25
8
  return {
26
- description: 'Sort fields using both generic and Melinda specific rules',
9
+ description: "Sort fields using both generic and Melinda specific rules",
27
10
  validate,
28
11
  fix
29
12
  };
30
13
  function fix(record) {
31
- const res = {
32
- message: [],
33
- fix: [],
34
- valid: true
35
- };
14
+ const res = { message: [], fix: [], valid: true };
36
15
  record.fields.sort(fieldOrderComparator);
37
16
  return res;
38
17
  }
39
18
  function validate(record) {
40
- const res = {
41
- message: []
42
- };
43
- const fields = record.fields.map(f => (0, _clone.default)(f));
19
+ const res = { message: [] };
20
+ const fields = record.fields.map((f) => clone(f));
44
21
  fields.sort(fieldOrderComparator);
45
- const relocatedFields = fields.filter((f, i) => (0, _utils.fieldToString)(f) !== (0, _utils.fieldToString)(record.fields[i]));
22
+ const relocatedFields = fields.filter((f, i) => fieldToString(f) !== fieldToString(record.fields[i]));
46
23
  if (relocatedFields.length > 0) {
47
24
  res.message.push(`${relocatedFields.length} field(s) in new places`);
48
25
  }
@@ -58,136 +35,132 @@ const relatorTermScore = {
58
35
  // We should 1) check the order of these, and 2) add translations (support Swedish at the very least)
59
36
  // work/teos > expression/ekspressio > manifestation/manifestaatin,
60
37
  // Work https://finto.fi/mts/fi/page/m1298
61
- 'säveltäjä': 100,
62
- 'composer': 100,
63
- 'kirjoittaja': 100,
64
- 'author': 100,
65
- 'libretisti': 100,
66
- 'sarjakuvantekijä': 100,
67
- 'soitonoppaan tekijä': 100,
68
- 'kartantekijä': 99,
69
- 'taiteilija': 98,
70
- 'designer': 90,
71
- 'sanoittaja': 90,
72
- 'käsikirjoittaja': 90,
73
- 'kuvaaja': 89,
74
- 'valokuvaaja': 89,
75
- 'kokoaja': 86,
76
- 'alkuperäisidean luoja': 85,
77
- 'teoksella kunnioitettu': 84,
78
- 'gratulaation kohde': 84,
79
- 'julkaisija': 82,
80
- 'tuottaja': 81,
38
+ "s\xE4velt\xE4j\xE4": 100,
39
+ "composer": 100,
40
+ "kirjoittaja": 100,
41
+ "author": 100,
42
+ "libretisti": 100,
43
+ "sarjakuvantekij\xE4": 100,
44
+ "soitonoppaan tekij\xE4": 100,
45
+ "kartantekij\xE4": 99,
46
+ "taiteilija": 98,
47
+ "designer": 90,
48
+ "sanoittaja": 90,
49
+ "k\xE4sikirjoittaja": 90,
50
+ "kuvaaja": 89,
51
+ "valokuvaaja": 89,
52
+ "kokoaja": 86,
53
+ "alkuper\xE4isidean luoja": 85,
54
+ "teoksella kunnioitettu": 84,
55
+ "gratulaation kohde": 84,
56
+ "julkaisija": 82,
57
+ "tuottaja": 81,
81
58
  // expression: https://finto.fi/mts/fi/page/m153
82
- 'sovittaja': 79,
83
- 'arranger': 79,
84
- 'toimittaja': 78,
85
- 'editor': 78,
86
- 'kuvittaja': 77,
87
- 'esipuheen kirjoittaja': 76,
88
- 'alkusanojen kirjoittaja': 75,
89
- 'loppusanojen kirjoittaja': 75,
90
- 'esittäjä': 74,
91
- 'johtaja': 73,
59
+ "sovittaja": 79,
60
+ "arranger": 79,
61
+ "toimittaja": 78,
62
+ "editor": 78,
63
+ "kuvittaja": 77,
64
+ "esipuheen kirjoittaja": 76,
65
+ "alkusanojen kirjoittaja": 75,
66
+ "loppusanojen kirjoittaja": 75,
67
+ "esitt\xE4j\xE4": 74,
68
+ "johtaja": 73,
92
69
  // orkesterinjohtaja
93
- 'editointi': 71,
70
+ "editointi": 71,
94
71
  // for music, editor/toimittaja is another thing
95
- 'kääntäjä': 70,
96
- 'lukija': 61,
97
- 'kertoja': 61,
72
+ "k\xE4\xE4nt\xE4j\xE4": 70,
73
+ "lukija": 61,
74
+ "kertoja": 61,
98
75
  // Manifestation level: https://finto.fi/mts/fi/page/m491
99
- 'graafinen suunnittelija': 50,
100
- 'kustantaja': 41
76
+ "graafinen suunnittelija": 50,
77
+ "kustantaja": 41
101
78
  // Item level: https://finto.fi/mts/fi/page/m1157
102
79
  };
103
80
  const relatorTermScoreBk = {
104
81
  // https://finto.fi/mts/fi/page/m34 100-81
105
- 'libretisti': 100,
106
- 'sarjakuvantekijä': 100,
107
- 'kirjoittaja': 99,
108
- 'author': 99,
109
- 'soitonoppaan tekijä': 99,
110
- 'kuvaaja': 98,
111
- 'valokuvaaja': 98,
112
- 'kokoaja': 86,
113
- 'designer': 86,
114
- 'alkuperäisidean luoja': 85,
115
- 'teoksella kunnioitettu': 84,
116
- 'gratulaation kohde': 84,
117
- 'säveltäjä': 83,
82
+ "libretisti": 100,
83
+ "sarjakuvantekij\xE4": 100,
84
+ "kirjoittaja": 99,
85
+ "author": 99,
86
+ "soitonoppaan tekij\xE4": 99,
87
+ "kuvaaja": 98,
88
+ "valokuvaaja": 98,
89
+ "kokoaja": 86,
90
+ "designer": 86,
91
+ "alkuper\xE4isidean luoja": 85,
92
+ "teoksella kunnioitettu": 84,
93
+ "gratulaation kohde": 84,
94
+ "s\xE4velt\xE4j\xE4": 83,
118
95
  // if 300$e has CD etc
119
- 'sanoittaja': 82,
120
- 'julkaisija': 81,
96
+ "sanoittaja": 82,
97
+ "julkaisija": 81,
121
98
  // expression: https://finto.fi/mts/fi/page/m153
122
- 'toimittaja': 78,
123
- 'kuvittaja': 77,
124
- 'esipuheen kirjoittaja': 76,
125
- 'alkusanojen kirjoittaja': 75,
126
- 'loppusanojen kirjoittaja': 75,
127
- 'kääntäjä': 70,
128
- 'sovittaja': 50,
99
+ "toimittaja": 78,
100
+ "kuvittaja": 77,
101
+ "esipuheen kirjoittaja": 76,
102
+ "alkusanojen kirjoittaja": 75,
103
+ "loppusanojen kirjoittaja": 75,
104
+ "k\xE4\xE4nt\xE4j\xE4": 70,
105
+ "sovittaja": 50,
129
106
  // manifestaatio
130
- 'graafinen suunnittelija': 40,
107
+ "graafinen suunnittelija": 40,
131
108
  // kappale/item
132
- 'sitoja': 25,
133
- 'gratulaation kirjoittaja': 24
109
+ "sitoja": 25,
110
+ "gratulaation kirjoittaja": 24
134
111
  };
135
112
  const relatorTermScoreMu = {
136
- 'säveltäjä': 100,
137
- 'sanoittaja': 99,
138
- 'soitonoppaan tekijä': 98,
139
- 'alkuperäisidean luoja': 85,
140
- 'teoksella kunnioitettu': 81,
113
+ "s\xE4velt\xE4j\xE4": 100,
114
+ "sanoittaja": 99,
115
+ "soitonoppaan tekij\xE4": 98,
116
+ "alkuper\xE4isidean luoja": 85,
117
+ "teoksella kunnioitettu": 81,
141
118
  // expression: https://finto.fi/mts/fi/page/m153
142
- 'sovittaja': 79,
143
- 'johtaja': 78,
144
- 'esittäjä': 77,
145
- 'lukija': 76,
146
- 'miksaaja': 75,
119
+ "sovittaja": 79,
120
+ "johtaja": 78,
121
+ "esitt\xE4j\xE4": 77,
122
+ "lukija": 76,
123
+ "miksaaja": 75,
147
124
  // manifestaatio
148
- 'esittäjä (manifestaatio)': 69,
149
- 'graafinen suunnittelija': 50,
150
- 'valmistaja': 41,
151
- 'jakaja': 40
125
+ "esitt\xE4j\xE4 (manifestaatio)": 69,
126
+ "graafinen suunnittelija": 50,
127
+ "valmistaja": 41,
128
+ "jakaja": 40
152
129
  // kappale/item
153
130
  };
154
131
  const relatorTermScoreVm = {
155
132
  // Visual Material
156
133
  // Work
157
- 'ohjaaja': 100,
158
- 'kirjoittaja': 99,
159
- 'author': 99,
134
+ "ohjaaja": 100,
135
+ "kirjoittaja": 99,
136
+ "author": 99,
160
137
  // Here we assume that film/whatever is based on author's book
161
- 'käsikirjoittaja': 98,
162
- 'designer': 98,
163
- 'kuvaaja': 89,
164
- 'säveltäjä': 86,
138
+ "k\xE4sikirjoittaja": 98,
139
+ "designer": 98,
140
+ "kuvaaja": 89,
141
+ "s\xE4velt\xE4j\xE4": 86,
165
142
  // Volatile. John Williams?
166
- 'alkuperäisidean luoja': 85,
167
- 'julkaisija': 82,
168
- 'tuottaja': 81,
143
+ "alkuper\xE4isidean luoja": 85,
144
+ "julkaisija": 82,
145
+ "tuottaja": 81,
169
146
  // Expression
170
- 'leikkaaja': 80,
171
- 'sovittaja': 79,
172
- 'johtaja': 78,
173
- 'esittäjä': 77,
174
- 'lukija': 76,
175
- 'miksaaja': 75,
176
- 'kääntäjä': 70,
147
+ "leikkaaja": 80,
148
+ "sovittaja": 79,
149
+ "johtaja": 78,
150
+ "esitt\xE4j\xE4": 77,
151
+ "lukija": 76,
152
+ "miksaaja": 75,
153
+ "k\xE4\xE4nt\xE4j\xE4": 70,
177
154
  // Manifestation
178
- 'kaivertaja': 60,
179
- 'graafinen suunnittelija': 59,
180
- 'kustantaja': 42,
181
- 'elokuvan jakelija': 41,
182
- 'jakaja': 41
183
-
155
+ "kaivertaja": 60,
156
+ "graafinen suunnittelija": 59,
157
+ "kustantaja": 42,
158
+ "elokuvan jakelija": 41,
159
+ "jakaja": 41
184
160
  // Item
185
161
  };
186
162
  function normalizeValue(value) {
187
- // Removing last punc char is good enough for our purposes.
188
- // We don't handle abbreviations here etc.
189
- // Brackets should not happen either, should they?
190
- return value.replace(/[.,]$/u, '');
163
+ return value.replace(/[.,]$/u, "");
191
164
  }
192
165
  function scoreRelatorTermBk(normalizedValue) {
193
166
  if (normalizedValue in relatorTermScoreBk) {
@@ -207,19 +180,15 @@ function scoreRelatorTermVm(normalizedValue) {
207
180
  }
208
181
  return 0;
209
182
  }
210
- function scoreRelatorTerm(value, typeOfMaterial = undefined) {
211
- // NB! We are currently using type of material only for sorting relator terms, not 7XX fields!!!
183
+ export function scoreRelatorTerm(value, typeOfMaterial = void 0) {
212
184
  const normalizedValue = normalizeValue(value);
213
- if (typeOfMaterial === 'BK') {
214
- // Books
185
+ if (typeOfMaterial === "BK") {
215
186
  return scoreRelatorTermBk(normalizedValue);
216
187
  }
217
- if (typeOfMaterial === 'MU') {
218
- // Music (NB: audio books should be BK in this context!)
188
+ if (typeOfMaterial === "MU") {
219
189
  return scoreRelatorTermMu(normalizedValue);
220
190
  }
221
- if (typeOfMaterial === 'VM') {
222
- // video material
191
+ if (typeOfMaterial === "VM") {
223
192
  return scoreRelatorTermVm(normalizedValue);
224
193
  }
225
194
  if (normalizedValue in relatorTermScore) {
@@ -227,44 +196,25 @@ function scoreRelatorTerm(value, typeOfMaterial = undefined) {
227
196
  }
228
197
  return 0;
229
198
  }
230
- function fieldOrderComparator(fieldA, fieldB) {
231
- //const sorterFunctions = [sortByTag, sortByIndexTerms, sortAlphabetically, sortByRelatorTerm, sortByOccurrenceNumber, preferFenniKeep, sortByFieldLinkAndSequenceNumber];
232
-
233
- const sorterFunctions = [_marcFieldSort.sortByTag, sortByIndexTerms, _marcFieldSort.sortAlphabetically, sortByRelatorTerm, sortBySubfield6, preferFenniKeep, sortByFieldLinkAndSequenceNumber];
234
- //const sorterFunctions = [sortByIndexTerms, sortByRelatorTerm, sortByOccurrenceNumber, preferFenniKeep, sortByFieldLinkAndSequenceNumber];
235
-
236
- return (0, _marcFieldSort.fieldOrderComparator)(fieldA, fieldB, sorterFunctions);
199
+ export function fieldOrderComparator(fieldA, fieldB) {
200
+ const sorterFunctions = [sortByTag, sortByIndexTerms, sortAlphabetically, sortByRelatorTerm, sortBySubfield6, preferFenniKeep, sortByFieldLinkAndSequenceNumber];
201
+ return globalFieldOrderComparator(fieldA, fieldB, sorterFunctions);
237
202
  }
238
203
  function sortByIndexTerms(fieldA, fieldB) {
239
- const indexTermFields = ['600', '610', '611', '630', '648', '650', '651', '652', '653', '654', '655', '656', '657', '658', '659', '662'];
204
+ const indexTermFields = ["600", "610", "611", "630", "648", "650", "651", "652", "653", "654", "655", "656", "657", "658", "659", "662"];
240
205
  function scoreInd2(val) {
241
- const ind2Score = {
242
- '0': 0,
243
- '1': 1,
244
- '2': 2,
245
- '3': 3,
246
- '4': 8,
247
- '5': 5,
248
- '6': 6,
249
- '7': 7
250
- };
206
+ const ind2Score = { "0": 0, "1": 1, "2": 2, "3": 3, "4": 8, "5": 5, "6": 6, "7": 7 };
251
207
  if (val in ind2Score) {
252
208
  return ind2Score[val];
253
209
  }
254
210
  return 9;
255
211
  }
256
-
257
- // ATM this is not needed.
258
- // You may need this, if you change compare function order in sorterFunctions
259
- // istanbul ignore next
260
212
  if (fieldA.tag !== fieldB.tag) {
261
213
  return 0;
262
214
  }
263
215
  if (!indexTermFields.includes(fieldA.tag)) {
264
216
  return 0;
265
217
  }
266
-
267
- // Puts ind2=4 last
268
218
  if (scoreInd2(fieldA.ind2) > scoreInd2(fieldB.ind2)) {
269
219
  return 1;
270
220
  }
@@ -273,46 +223,42 @@ function sortByIndexTerms(fieldA, fieldB) {
273
223
  }
274
224
  function scoreDictionary(dictionary) {
275
225
  const dictionarySortIndex = {
276
- 'yso/fin': 0,
277
- 'yso/swe': 1,
278
- 'yso/eng': 2,
279
- 'slm/fin': 0.1,
280
- 'slm/swe': 1.1,
281
- 'kauno/fin': 2.1,
282
- 'kauno/swe': 2.2,
283
- 'kaunokki': 4,
284
- 'bella': 5
226
+ "yso/fin": 0,
227
+ "yso/swe": 1,
228
+ "yso/eng": 2,
229
+ "slm/fin": 0.1,
230
+ "slm/swe": 1.1,
231
+ "kauno/fin": 2.1,
232
+ "kauno/swe": 2.2,
233
+ "kaunokki": 4,
234
+ "bella": 5
285
235
  };
286
236
  if (dictionary in dictionarySortIndex) {
287
237
  return dictionarySortIndex[dictionary];
288
238
  }
289
239
  return BIG_BAD_NUMBER;
290
240
  }
291
- const dictionaryA = selectFirstValue(fieldA, '2');
292
- const dictionaryB = selectFirstValue(fieldB, '2');
241
+ const dictionaryA = selectFirstValue(fieldA, "2");
242
+ const dictionaryB = selectFirstValue(fieldB, "2");
293
243
  const dictScoreA = scoreDictionary(dictionaryA);
294
244
  const dictScoreB = scoreDictionary(dictionaryB);
295
- // Use priority order for listed dictionaries:
296
245
  if (dictScoreA > dictScoreB) {
297
246
  return 1;
298
247
  }
299
248
  if (dictScoreA < dictScoreB) {
300
249
  return -1;
301
250
  }
302
- // Unlisted dictionaries: sort $2 value alphabetically:
303
- //if (dictScoreA === BIG_BAD_NUMBER) {
304
251
  if (dictionaryA > dictionaryB) {
305
252
  return 1;
306
253
  }
307
254
  if (dictionaryA < dictionaryB) {
308
255
  return -1;
309
256
  }
310
- //}
311
257
  return 0;
312
258
  }
313
- function preferKeep(fieldA, fieldB, keepOwner = 'FENNI') {
314
- const hasKeepA = (0, _utils.fieldHasSubfield)(fieldA, '9', `${keepOwner}<KEEP>`);
315
- const hasKeepB = (0, _utils.fieldHasSubfield)(fieldB, '9', `${keepOwner}<KEEP>`);
259
+ function preferKeep(fieldA, fieldB, keepOwner = "FENNI") {
260
+ const hasKeepA = fieldHasSubfield(fieldA, "9", `${keepOwner}<KEEP>`);
261
+ const hasKeepB = fieldHasSubfield(fieldB, "9", `${keepOwner}<KEEP>`);
316
262
  if (hasKeepA && !hasKeepB) {
317
263
  return -1;
318
264
  }
@@ -322,37 +268,33 @@ function preferKeep(fieldA, fieldB, keepOwner = 'FENNI') {
322
268
  return 0;
323
269
  }
324
270
  function preferFenniKeep(fieldA, fieldB) {
325
- const fenniPreference = preferKeep(fieldA, fieldB, 'FENNI');
271
+ const fenniPreference = preferKeep(fieldA, fieldB, "FENNI");
326
272
  if (fenniPreference !== 0) {
327
273
  return fenniPreference;
328
274
  }
329
- const violaPreference = preferKeep(fieldA, fieldB, 'VIOLA');
275
+ const violaPreference = preferKeep(fieldA, fieldB, "VIOLA");
330
276
  if (violaPreference !== 0) {
331
277
  return violaPreference;
332
278
  }
333
- return preferKeep(fieldA, fieldB, 'FIKKA');
279
+ return preferKeep(fieldA, fieldB, "FIKKA");
334
280
  }
335
281
  function sortByRelatorTerm(fieldA, fieldB) {
336
- //if (!['600', '610', '611', '630', '700', '710', '711', '730', '800', '810', '811', '830'].includes(fieldA.tag)) {
337
- if (!['700', '710', '711', '730'].includes(fieldA.tag)) {
282
+ if (!["700", "710", "711", "730"].includes(fieldA.tag)) {
338
283
  return 0;
339
284
  }
340
285
  function fieldGetMaxRelatorTermScore(field) {
341
286
  if (!field.subfields) {
342
287
  return -2;
343
288
  }
344
- // If field has $t, it's a teos-nimeke-auktoriteetti, and thus meaningless. These should follow all $t-less fields...
345
- if ((0, _utils.fieldHasSubfield)(field, 't')) {
289
+ if (fieldHasSubfield(field, "t")) {
346
290
  return -2;
347
291
  }
348
- const relatorSubfieldCode = ['611', '711', '811'].includes(field.tag) ? 'j' : 'e';
349
- const e = field.subfields.filter(sf => sf.code === relatorSubfieldCode);
292
+ const relatorSubfieldCode = ["611", "711", "811"].includes(field.tag) ? "j" : "e";
293
+ const e = field.subfields.filter((sf) => sf.code === relatorSubfieldCode);
350
294
  if (e.length === 0) {
351
- // No $e is still better than having a $t
352
295
  return -1;
353
296
  }
354
- const scores = e.map(sf => scoreRelatorTerm(sf.value));
355
- //debugDev(`RELATOR SCORE FOR '${fieldToString(field)}': ${scores.join(', ')}`);
297
+ const scores = e.map((sf) => scoreRelatorTerm(sf.value));
356
298
  return Math.max(...scores);
357
299
  }
358
300
  const scoreA = fieldGetMaxRelatorTermScore(fieldA);
@@ -369,20 +311,16 @@ function fieldGetMinLinkAndSequenceNumber(field) {
369
311
  if (!field.subfields) {
370
312
  return BIG_BAD_NUMBER;
371
313
  }
372
- const relevantSubfields = field.subfields.filter(sf => (0, _subfield8Utils.isValidSubfield8)(sf));
373
- // If val is something like "1.2\x" parseFloat() would give a syntax erro because of hex-like escape sequnce (at least on Chrome). Thus remove tail:
374
- const scores = relevantSubfields.map(sf => parseFloat(sf.value.replace(/\\.*$/u, '')));
314
+ const relevantSubfields = field.subfields.filter((sf) => isValidSubfield8(sf));
315
+ const scores = relevantSubfields.map((sf) => parseFloat(sf.value.replace(/\\.*$/u, "")));
375
316
  if (scores.length === 0) {
376
317
  return BIG_BAD_NUMBER;
377
318
  }
378
319
  return Math.min(...scores);
379
320
  }
380
321
  function sortByFieldLinkAndSequenceNumber(fieldA, fieldB) {
381
- // Sort by subfield $8 that is...
382
322
  const scoreA = fieldGetMinLinkAndSequenceNumber(fieldA);
383
323
  const scoreB = fieldGetMinLinkAndSequenceNumber(fieldB);
384
- //debugDev(` sf-8-A-score for '${fieldToString(fieldA)}: ${scoreA}`);
385
- //debugDev(` sf-8-B-score for '${fieldToString(fieldB)}: ${scoreB}`);
386
324
  if (scoreA === scoreB) {
387
325
  return 0;
388
326
  }
@@ -393,19 +331,17 @@ function sortByFieldLinkAndSequenceNumber(fieldA, fieldB) {
393
331
  return -1;
394
332
  }
395
333
  if (scoreA > scoreB) {
396
- // smaller is better
397
334
  return 1;
398
335
  }
399
336
  return -1;
400
337
  }
401
338
  function sortBySubfield6(fieldA, fieldB) {
402
- // Sort by subfield $6, ex-sortByOccurrenceNumber...
403
- if (fieldA.tag !== '880' || fieldB.tag !== '880') {
339
+ if (fieldA.tag !== "880" || fieldB.tag !== "880") {
404
340
  return 0;
405
341
  }
406
342
  function compareLinkingTags() {
407
- const tagStringA = (0, _subfield6Utils.fieldGetUnambiguousTag)(fieldA);
408
- const tagStringB = (0, _subfield6Utils.fieldGetUnambiguousTag)(fieldB);
343
+ const tagStringA = fieldGetUnambiguousTag(fieldA);
344
+ const tagStringB = fieldGetUnambiguousTag(fieldB);
409
345
  if (tagStringA === tagStringB || !tagStringA || !tagStringB) {
410
346
  return 0;
411
347
  }
@@ -415,29 +351,23 @@ function sortBySubfield6(fieldA, fieldB) {
415
351
  return -1;
416
352
  }
417
353
  function compareOccurrenceNumbers() {
418
- const stringA = (0, _subfield6Utils.fieldGetUnambiguousOccurrenceNumber)(fieldA);
419
- const stringB = (0, _subfield6Utils.fieldGetUnambiguousOccurrenceNumber)(fieldB);
354
+ const stringA = fieldGetUnambiguousOccurrenceNumber(fieldA);
355
+ const stringB = fieldGetUnambiguousOccurrenceNumber(fieldB);
420
356
  if (stringA === stringB) {
421
- // No action required here
422
357
  return 0;
423
358
  }
424
-
425
- // Handle expections: no occurrence number, occurrence number '00':
426
- if (!stringB || stringB === '00') {
427
- if (!stringA || stringA === '00') {
359
+ if (!stringB || stringB === "00") {
360
+ if (!stringA || stringA === "00") {
428
361
  return 0;
429
362
  }
430
363
  return -1;
431
364
  }
432
- if (!stringA || stringA === '00') {
365
+ if (!stringA || stringA === "00") {
433
366
  return 1;
434
367
  }
435
-
436
- // NB! We need compare ints as occurrence number can exceed 99 and be a three-digit value!
437
368
  const scoreA = parseInt(stringA, 10);
438
369
  const scoreB = parseInt(stringB, 10);
439
370
  if (scoreA > scoreB) {
440
- // smaller is better, thus '00' is the best
441
371
  return 1;
442
372
  }
443
373
  return -1;
@@ -449,6 +379,6 @@ function sortBySubfield6(fieldA, fieldB) {
449
379
  return compareOccurrenceNumbers();
450
380
  }
451
381
  function selectFirstValue(field, subcode) {
452
- return field.subfields.filter(subfield => subcode === subfield.code).map(subfield => subfield.value).slice(0, 1);
382
+ return field.subfields.filter((subfield) => subcode === subfield.code).map((subfield) => subfield.value).slice(0, 1);
453
383
  }
454
- //# sourceMappingURL=sortFields.js.map
384
+ //# sourceMappingURL=sortFields.js.map