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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (545) hide show
  1. package/.github/workflows/melinda-node-tests.yml +1 -1
  2. package/dist/access-rights.js +63 -91
  3. package/dist/access-rights.js.map +7 -1
  4. package/dist/access-rights.test.js +137 -0
  5. package/dist/access-rights.test.js.map +7 -0
  6. package/dist/addMissingField041.js +21 -53
  7. package/dist/addMissingField041.js.map +7 -1
  8. package/dist/addMissingField041.test.js +39 -0
  9. package/dist/addMissingField041.test.js.map +7 -0
  10. package/dist/addMissingField336.js +99 -191
  11. package/dist/addMissingField336.js.map +7 -1
  12. package/dist/addMissingField336.test.js +39 -0
  13. package/dist/addMissingField336.test.js.map +7 -0
  14. package/dist/addMissingField337.js +63 -132
  15. package/dist/addMissingField337.js.map +7 -1
  16. package/dist/addMissingField337.test.js +39 -0
  17. package/dist/addMissingField337.test.js.map +7 -0
  18. package/dist/addMissingField338.js +147 -253
  19. package/dist/addMissingField338.js.map +7 -1
  20. package/dist/addMissingField338.test.js +39 -0
  21. package/dist/addMissingField338.test.js.map +7 -0
  22. package/dist/cyrillux-usemarcon-replacement.js +119 -272
  23. package/dist/cyrillux-usemarcon-replacement.js.map +7 -1
  24. package/dist/cyrillux-usemarcon-replacement.test.js +46 -0
  25. package/dist/cyrillux-usemarcon-replacement.test.js.map +7 -0
  26. package/dist/cyrillux.js +119 -223
  27. package/dist/cyrillux.js.map +7 -1
  28. package/dist/cyrillux.test.js +39 -0
  29. package/dist/cyrillux.test.js.map +7 -0
  30. package/dist/disambiguateSeriesStatements.js +40 -81
  31. package/dist/disambiguateSeriesStatements.js.map +7 -1
  32. package/dist/disambiguateSeriesStatements.test.js +44 -0
  33. package/dist/disambiguateSeriesStatements.test.js.map +7 -0
  34. package/dist/double-commas.js +7 -14
  35. package/dist/double-commas.js.map +7 -1
  36. package/dist/double-commas.test.js +48 -0
  37. package/dist/double-commas.test.js.map +7 -0
  38. package/dist/duplicates-ind1.js +10 -31
  39. package/dist/duplicates-ind1.js.map +7 -1
  40. package/dist/duplicates-ind1.test.js +40 -0
  41. package/dist/duplicates-ind1.test.js.map +7 -0
  42. package/dist/empty-fields.js +10 -22
  43. package/dist/empty-fields.js.map +7 -1
  44. package/dist/empty-fields.test.js +129 -0
  45. package/dist/empty-fields.test.js.map +7 -0
  46. package/dist/ending-punctuation-conf.js +871 -769
  47. package/dist/ending-punctuation-conf.js.map +7 -1
  48. package/dist/ending-punctuation.js +84 -167
  49. package/dist/ending-punctuation.js.map +7 -1
  50. package/dist/ending-punctuation.test.js +2290 -0
  51. package/dist/ending-punctuation.test.js.map +7 -0
  52. package/dist/ending-whitespace.js +10 -35
  53. package/dist/ending-whitespace.js.map +7 -1
  54. package/dist/ending-whitespace.test.js +38 -0
  55. package/dist/ending-whitespace.test.js.map +7 -0
  56. package/dist/field-008-18-34-character-groups.js +40 -125
  57. package/dist/field-008-18-34-character-groups.js.map +7 -1
  58. package/dist/field-008-18-34-character-groups.test.js +45 -0
  59. package/dist/field-008-18-34-character-groups.test.js.map +7 -0
  60. package/dist/field-505-separators.js +19 -39
  61. package/dist/field-505-separators.js.map +7 -1
  62. package/dist/field-505-separators.test.js +45 -0
  63. package/dist/field-505-separators.test.js.map +7 -0
  64. package/dist/field-521-fix.js +19 -47
  65. package/dist/field-521-fix.js.map +7 -1
  66. package/dist/field-521-fix.test.js +44 -0
  67. package/dist/field-521-fix.test.js.map +7 -0
  68. package/dist/field-exclusion.js +37 -91
  69. package/dist/field-exclusion.js.map +7 -1
  70. package/dist/field-exclusion.test.js +821 -0
  71. package/dist/field-exclusion.test.js.map +7 -0
  72. package/dist/field-structure.js +52 -104
  73. package/dist/field-structure.js.map +7 -1
  74. package/dist/field-structure.test.js +587 -0
  75. package/dist/field-structure.test.js.map +7 -0
  76. package/dist/field33XUtils.js +119 -503
  77. package/dist/field33XUtils.js.map +7 -1
  78. package/dist/fields-present.js +11 -23
  79. package/dist/fields-present.js.map +7 -1
  80. package/dist/fields-present.test.js +95 -0
  81. package/dist/fields-present.test.js.map +7 -0
  82. package/dist/fix-33X.js +393 -431
  83. package/dist/fix-33X.js.map +7 -1
  84. package/dist/fix-33X.test.js +39 -0
  85. package/dist/fix-33X.test.js.map +7 -0
  86. package/dist/fix-country-codes.js +20 -50
  87. package/dist/fix-country-codes.js.map +7 -1
  88. package/dist/fix-country-codes.test.js +44 -0
  89. package/dist/fix-country-codes.test.js.map +7 -0
  90. package/dist/fix-language-codes.js +23 -53
  91. package/dist/fix-language-codes.js.map +7 -1
  92. package/dist/fix-language-codes.test.js +38 -0
  93. package/dist/fix-language-codes.test.js.map +7 -0
  94. package/dist/fixRelatorTerms.js +82 -209
  95. package/dist/fixRelatorTerms.js.map +7 -1
  96. package/dist/fixRelatorTerms.test.js +44 -0
  97. package/dist/fixRelatorTerms.test.js.map +7 -0
  98. package/dist/fixed-fields.js +21 -30
  99. package/dist/fixed-fields.js.map +7 -1
  100. package/dist/fixed-fields.test.js +87 -0
  101. package/dist/fixed-fields.test.js.map +7 -0
  102. package/dist/identical-fields.js +8 -24
  103. package/dist/identical-fields.js.map +7 -1
  104. package/dist/identical-fields.test.js +119 -0
  105. package/dist/identical-fields.test.js.map +7 -0
  106. package/dist/index.js +119 -413
  107. package/dist/index.js.map +7 -1
  108. package/dist/indicator-fixes.js +57 -95
  109. package/dist/indicator-fixes.js.map +7 -1
  110. package/dist/indicator-fixes.test.js +42 -0
  111. package/dist/indicator-fixes.test.js.map +7 -0
  112. package/dist/isbn-issn.js +66 -126
  113. package/dist/isbn-issn.js.map +7 -1
  114. package/dist/isbn-issn.test.js +398 -0
  115. package/dist/isbn-issn.test.js.map +7 -0
  116. package/dist/item-language.js +32 -65
  117. package/dist/item-language.js.map +7 -1
  118. package/dist/item-language.test.js +322 -0
  119. package/dist/item-language.test.js.map +7 -0
  120. package/dist/melindaCustomMergeFields.js +5182 -11233
  121. package/dist/melindaCustomMergeFields.js.map +7 -1
  122. package/dist/merge-fields/controlSubfields.js +75 -142
  123. package/dist/merge-fields/controlSubfields.js.map +7 -1
  124. package/dist/merge-fields/counterpartField.js +182 -379
  125. package/dist/merge-fields/counterpartField.js.map +7 -1
  126. package/dist/merge-fields/index.js +15 -49
  127. package/dist/merge-fields/index.js.map +7 -1
  128. package/dist/merge-fields/mergableIndicator.js +18 -51
  129. package/dist/merge-fields/mergableIndicator.js.map +7 -1
  130. package/dist/merge-fields/mergableTag.js +78 -30
  131. package/dist/merge-fields/mergableTag.js.map +7 -1
  132. package/dist/merge-fields/mergeConfig.js +66 -171
  133. package/dist/merge-fields/mergeConfig.js.map +7 -1
  134. package/dist/merge-fields/mergeConstraints.js +323 -1214
  135. package/dist/merge-fields/mergeConstraints.js.map +7 -1
  136. package/dist/merge-fields/mergeField.js +47 -111
  137. package/dist/merge-fields/mergeField.js.map +7 -1
  138. package/dist/merge-fields/mergeIndicator.js +64 -118
  139. package/dist/merge-fields/mergeIndicator.js.map +7 -1
  140. package/dist/merge-fields/mergeOrAddPostprocess.js +14 -38
  141. package/dist/merge-fields/mergeOrAddPostprocess.js.map +7 -1
  142. package/dist/merge-fields/mergeOrAddSubfield.js +62 -104
  143. package/dist/merge-fields/mergeOrAddSubfield.js.map +7 -1
  144. package/dist/merge-fields/mergeSubfield.js +47 -95
  145. package/dist/merge-fields/mergeSubfield.js.map +7 -1
  146. package/dist/merge-fields/removeDuplicateSubfields.js +18 -31
  147. package/dist/merge-fields/removeDuplicateSubfields.js.map +7 -1
  148. package/dist/merge-fields/worldKnowledge.js +15 -40
  149. package/dist/merge-fields/worldKnowledge.js.map +7 -1
  150. package/dist/merge-fields.test.js +44 -0
  151. package/dist/merge-fields.test.js.map +7 -0
  152. package/dist/mergeField500Lisapainokset.js +28 -57
  153. package/dist/mergeField500Lisapainokset.js.map +7 -1
  154. package/dist/mergeField500Lisapainokset.test.js +44 -0
  155. package/dist/mergeField500Lisapainokset.test.js.map +7 -0
  156. package/dist/mergeRelatorTermFields.js +33 -69
  157. package/dist/mergeRelatorTermFields.js.map +7 -1
  158. package/dist/mergeRelatorTermFields.test.js +44 -0
  159. package/dist/mergeRelatorTermFields.test.js.map +7 -0
  160. package/dist/modernize-502.js +23 -55
  161. package/dist/modernize-502.js.map +7 -1
  162. package/dist/modernize-502.test.js +38 -0
  163. package/dist/modernize-502.test.js.map +7 -0
  164. package/dist/multiple-subfield-0.js +23 -48
  165. package/dist/multiple-subfield-0.js.map +7 -1
  166. package/dist/multiple-subfield-0.test.js +44 -0
  167. package/dist/multiple-subfield-0.test.js.map +7 -0
  168. package/dist/non-breaking-space.js +11 -32
  169. package/dist/non-breaking-space.js.map +7 -1
  170. package/dist/non-breaking-space.test.js +38 -0
  171. package/dist/non-breaking-space.test.js.map +7 -0
  172. package/dist/normalize-dashes.js +18 -37
  173. package/dist/normalize-dashes.js.map +7 -1
  174. package/dist/normalize-dashes.test.js +44 -0
  175. package/dist/normalize-dashes.test.js.map +7 -0
  176. package/dist/normalize-identifiers.js +54 -140
  177. package/dist/normalize-identifiers.js.map +7 -1
  178. package/dist/normalize-identifiers.test.js +44 -0
  179. package/dist/normalize-identifiers.test.js.map +7 -0
  180. package/dist/normalize-qualifying-information.js +23 -48
  181. package/dist/normalize-qualifying-information.js.map +7 -1
  182. package/dist/normalize-qualifying-information.test.js +44 -0
  183. package/dist/normalize-qualifying-information.test.js.map +7 -0
  184. package/dist/normalize-utf8-diacritics.js +19 -105
  185. package/dist/normalize-utf8-diacritics.js.map +7 -1
  186. package/dist/normalize-utf8-diacritics.test.js +44 -0
  187. package/dist/normalize-utf8-diacritics.test.js.map +7 -0
  188. package/dist/normalizeFieldForComparison.js +67 -158
  189. package/dist/normalizeFieldForComparison.js.map +7 -1
  190. package/dist/normalizeSubfieldValueForComparison.js +37 -77
  191. package/dist/normalizeSubfieldValueForComparison.js.map +7 -1
  192. package/dist/prepublicationUtils.js +58 -111
  193. package/dist/prepublicationUtils.js.map +7 -1
  194. package/dist/punctuation/index.js +56 -72
  195. package/dist/punctuation/index.js.map +7 -1
  196. package/dist/punctuation/rules/aut.js +372 -331
  197. package/dist/punctuation/rules/aut.js.map +7 -1
  198. package/dist/punctuation/rules/bib.js +420 -373
  199. package/dist/punctuation/rules/bib.js.map +7 -1
  200. package/dist/punctuation/rules/index.js +7 -21
  201. package/dist/punctuation/rules/index.js.map +7 -1
  202. package/dist/punctuation.test.js +44 -0
  203. package/dist/punctuation.test.js.map +7 -0
  204. package/dist/punctuation2.js +251 -800
  205. package/dist/punctuation2.js.map +7 -1
  206. package/dist/punctuation2.test.js +44 -0
  207. package/dist/punctuation2.test.js.map +7 -0
  208. package/dist/reindexSubfield6OccurenceNumbers.js +61 -96
  209. package/dist/reindexSubfield6OccurenceNumbers.js.map +7 -1
  210. package/dist/reindexSubfield6OccurenceNumbers.test.js +44 -0
  211. package/dist/reindexSubfield6OccurenceNumbers.test.js.map +7 -0
  212. package/dist/removeDuplicateDataFields.js +102 -202
  213. package/dist/removeDuplicateDataFields.js.map +7 -1
  214. package/dist/removeDuplicateDataFields.test.js +44 -0
  215. package/dist/removeDuplicateDataFields.test.js.map +7 -0
  216. package/dist/removeInferiorDataFields.js +103 -227
  217. package/dist/removeInferiorDataFields.js.map +7 -1
  218. package/dist/removeInferiorDataFields.test.js +44 -0
  219. package/dist/removeInferiorDataFields.test.js.map +7 -0
  220. package/dist/resolvable-ext-references-melinda.js +25 -60
  221. package/dist/resolvable-ext-references-melinda.js.map +7 -1
  222. package/dist/resolvable-ext-references-melinda.test.js +160 -0
  223. package/dist/resolvable-ext-references-melinda.test.js.map +7 -0
  224. package/dist/resolveOrphanedSubfield6s.js +33 -64
  225. package/dist/resolveOrphanedSubfield6s.js.map +7 -1
  226. package/dist/resolveOrphanedSubfield6s.test.js +44 -0
  227. package/dist/resolveOrphanedSubfield6s.test.js.map +7 -0
  228. package/dist/sanitize-vocabulary-source-codes.js +27 -55
  229. package/dist/sanitize-vocabulary-source-codes.js.map +7 -1
  230. package/dist/sanitize-vocabulary-source-codes.test.js +45 -0
  231. package/dist/sanitize-vocabulary-source-codes.test.js.map +7 -0
  232. package/dist/sort-tags.js +13 -25
  233. package/dist/sort-tags.js.map +7 -1
  234. package/dist/sort-tags.test.js +261 -0
  235. package/dist/sort-tags.test.js.map +7 -0
  236. package/dist/sortFields.js +152 -222
  237. package/dist/sortFields.js.map +7 -1
  238. package/dist/sortFields.test.js +44 -0
  239. package/dist/sortFields.test.js.map +7 -0
  240. package/dist/sortRelatorTerms.js +30 -68
  241. package/dist/sortRelatorTerms.js.map +7 -1
  242. package/dist/sortRelatorTerms.test.js +44 -0
  243. package/dist/sortRelatorTerms.test.js.map +7 -0
  244. package/dist/sortSubfields.js +102 -255
  245. package/dist/sortSubfields.js.map +7 -1
  246. package/dist/sortSubfields.test.js +44 -0
  247. package/dist/sortSubfields.test.js.map +7 -0
  248. package/dist/stripPunctuation.js +13 -36
  249. package/dist/stripPunctuation.js.map +7 -1
  250. package/dist/stripPunctuation.test.js +44 -0
  251. package/dist/stripPunctuation.test.js.map +7 -0
  252. package/dist/subfield-exclusion.js +28 -75
  253. package/dist/subfield-exclusion.js.map +7 -1
  254. package/dist/subfield-exclusion.test.js +471 -0
  255. package/dist/subfield-exclusion.test.js.map +7 -0
  256. package/dist/subfield6Utils.js +107 -269
  257. package/dist/subfield6Utils.js.map +7 -1
  258. package/dist/subfield8Utils.js +26 -50
  259. package/dist/subfield8Utils.js.map +7 -1
  260. package/dist/subfieldValueNormalizations.js +40 -74
  261. package/dist/subfieldValueNormalizations.js.map +7 -1
  262. package/dist/subfieldValueNormalizations.test.js +45 -0
  263. package/dist/subfieldValueNormalizations.test.js.map +7 -0
  264. package/dist/sync-007-and-300.js +22 -53
  265. package/dist/sync-007-and-300.js.map +7 -1
  266. package/dist/sync-007-and-300.test.js +44 -0
  267. package/dist/sync-007-and-300.test.js.map +7 -0
  268. package/dist/translate-terms.js +67 -155
  269. package/dist/translate-terms.js.map +7 -1
  270. package/dist/translate-terms.test.js +44 -0
  271. package/dist/translate-terms.test.js.map +7 -0
  272. package/dist/typeOfDate-008.js +10 -25
  273. package/dist/typeOfDate-008.js.map +7 -1
  274. package/dist/typeOfDate-008.test.js +40 -0
  275. package/dist/typeOfDate-008.test.js.map +7 -0
  276. package/dist/unicode-decomposition.js +94 -107
  277. package/dist/unicode-decomposition.js.map +7 -1
  278. package/dist/unicode-decomposition.test.js +94 -0
  279. package/dist/unicode-decomposition.test.js.map +7 -0
  280. package/dist/update-field-540.js +30 -75
  281. package/dist/update-field-540.js.map +7 -1
  282. package/dist/update-field-540.test.js +44 -0
  283. package/dist/update-field-540.test.js.map +7 -0
  284. package/dist/urn.js +55 -128
  285. package/dist/urn.js.map +7 -1
  286. package/dist/urn.test.js +44 -0
  287. package/dist/urn.test.js.map +7 -0
  288. package/dist/utils.js +72 -126
  289. package/dist/utils.js.map +7 -1
  290. package/eslint.config.mjs +1 -2
  291. package/package.json +21 -93
  292. package/src/access-rights.js +1 -1
  293. package/src/{access-rights.spec.js → access-rights.test.js} +9 -10
  294. package/src/addMissingField041.js +1 -1
  295. package/src/{addMissingField336.spec.js → addMissingField041.test.js} +13 -14
  296. package/src/addMissingField336.js +3 -3
  297. package/src/{addMissingField041.spec.js → addMissingField336.test.js} +13 -14
  298. package/src/addMissingField337.js +2 -2
  299. package/src/{addMissingField337.spec.js → addMissingField337.test.js} +13 -14
  300. package/src/addMissingField338.js +2 -2
  301. package/src/{addMissingField338.spec.js → addMissingField338.test.js} +13 -14
  302. package/src/cyrillux-usemarcon-replacement.js +18 -18
  303. package/src/cyrillux-usemarcon-replacement.test.js +55 -0
  304. package/src/cyrillux.js +19 -12
  305. package/src/{cyrillux.spec.js → cyrillux.test.js} +13 -14
  306. package/src/disambiguateSeriesStatements.js +2 -2
  307. package/src/{disambiguateSeriesStatements.spec.js → disambiguateSeriesStatements.test.js} +12 -13
  308. package/src/double-commas.js +1 -1
  309. package/src/{double-commas.spec.js → double-commas.test.js} +9 -11
  310. package/src/duplicates-ind1.js +1 -1
  311. package/src/{duplicates-ind1.spec.js → duplicates-ind1.test.js} +12 -13
  312. package/src/{empty-fields.spec.js → empty-fields.test.js} +11 -13
  313. package/src/ending-punctuation.js +1 -1
  314. package/src/{ending-punctuation.spec.js → ending-punctuation.test.js} +172 -173
  315. package/src/{ending-whitespace.spec.js → ending-whitespace.test.js} +12 -13
  316. package/src/field-008-18-34-character-groups.js +2 -2
  317. package/src/{field-008-18-34-character-groups.spec.js → field-008-18-34-character-groups.test.js} +13 -13
  318. package/src/field-505-separators.js +3 -3
  319. package/src/{field-505-separators.spec.js → field-505-separators.test.js} +16 -14
  320. package/src/field-521-fix.js +2 -2
  321. package/src/{field-521-fix.spec.js → field-521-fix.test.js} +12 -13
  322. package/src/field-exclusion.js +1 -1
  323. package/src/{field-exclusion.spec.js → field-exclusion.test.js} +60 -57
  324. package/src/{field-structure.spec.js → field-structure.test.js} +29 -29
  325. package/src/{fields-present.spec.js → fields-present.test.js} +12 -15
  326. package/src/fix-33X.js +4 -4
  327. package/src/{fix-33X.spec.js → fix-33X.test.js} +13 -14
  328. package/src/fix-country-codes.js +1 -1
  329. package/src/{fix-country-codes.spec.js → fix-country-codes.test.js} +12 -13
  330. package/src/fix-language-codes.js +5 -5
  331. package/src/{fix-language-codes.spec.js → fix-language-codes.test.js} +12 -13
  332. package/src/fixRelatorTerms.js +5 -5
  333. package/src/{fixRelatorTerms.spec.js → fixRelatorTerms.test.js} +13 -13
  334. package/src/{fixed-fields.spec.js → fixed-fields.test.js} +11 -14
  335. package/src/identical-fields.js +1 -1
  336. package/src/{identical-fields.spec.js → identical-fields.test.js} +9 -11
  337. package/src/indicator-fixes.js +3 -3
  338. package/src/{indicator-fixes.spec.js → indicator-fixes.test.js} +9 -12
  339. package/src/isbn-issn.js +1 -1
  340. package/src/{isbn-issn.spec.js → isbn-issn.test.js} +20 -22
  341. package/src/{item-language.spec.js → item-language.test.js} +21 -22
  342. package/src/merge-fields/controlSubfields.js +1 -1
  343. package/src/merge-fields/counterpartField.js +8 -9
  344. package/src/merge-fields/index.js +1 -1
  345. package/src/merge-fields/mergableIndicator.js +1 -1
  346. package/src/merge-fields/mergeField.js +6 -6
  347. package/src/merge-fields/mergeIndicator.js +1 -1
  348. package/src/merge-fields/mergeOrAddPostprocess.js +4 -4
  349. package/src/merge-fields/mergeOrAddSubfield.js +2 -2
  350. package/src/merge-fields/mergeSubfield.js +4 -4
  351. package/src/merge-fields/removeDuplicateSubfields.js +2 -2
  352. package/src/{merge-fields.spec.js → merge-fields.test.js} +12 -13
  353. package/src/{mergeField500Lisapainokset.spec.js → mergeField500Lisapainokset.test.js} +12 -13
  354. package/src/mergeRelatorTermFields.js +5 -7
  355. package/src/{mergeRelatorTermFields.spec.js → mergeRelatorTermFields.test.js} +12 -13
  356. package/src/modernize-502.js +1 -1
  357. package/src/{modernize-502.spec.js → modernize-502.test.js} +12 -13
  358. package/src/multiple-subfield-0.js +3 -3
  359. package/src/{multiple-subfield-0.spec.js → multiple-subfield-0.test.js} +13 -13
  360. package/src/{non-breaking-space.spec.js → non-breaking-space.test.js} +12 -13
  361. package/src/normalize-dashes.js +2 -2
  362. package/src/{normalize-dashes.spec.js → normalize-dashes.test.js} +12 -13
  363. package/src/normalize-identifiers.js +1 -1
  364. package/src/{normalize-identifiers.spec.js → normalize-identifiers.test.js} +12 -13
  365. package/src/normalize-qualifying-information.js +2 -2
  366. package/src/{normalize-qualifying-information.spec.js → normalize-qualifying-information.test.js} +12 -13
  367. package/src/normalize-utf8-diacritics.js +2 -2
  368. package/src/{normalize-utf8-diacritics.spec.js → normalize-utf8-diacritics.test.js} +13 -13
  369. package/src/normalizeFieldForComparison.js +6 -6
  370. package/src/normalizeSubfieldValueForComparison.js +1 -1
  371. package/src/prepublicationUtils.js +4 -4
  372. package/src/punctuation/index.js +1 -1
  373. package/src/punctuation/rules/index.js +2 -2
  374. package/src/{punctuation.spec.js → punctuation.test.js} +12 -13
  375. package/src/punctuation2.js +4 -4
  376. package/src/{punctuation2.spec.js → punctuation2.test.js} +12 -13
  377. package/src/reindexSubfield6OccurenceNumbers.js +5 -7
  378. package/src/{reindexSubfield6OccurenceNumbers.spec.js → reindexSubfield6OccurenceNumbers.test.js} +12 -13
  379. package/src/removeDuplicateDataFields.js +11 -19
  380. package/src/{removeDuplicateDataFields.spec.js → removeDuplicateDataFields.test.js} +12 -13
  381. package/src/removeInferiorDataFields.js +11 -11
  382. package/src/{removeInferiorDataFields.spec.js → removeInferiorDataFields.test.js} +13 -13
  383. package/src/resolvable-ext-references-melinda.js +1 -1
  384. package/src/{resolvable-ext-references-melinda.spec.js → resolvable-ext-references-melinda.test.js} +42 -27
  385. package/src/resolveOrphanedSubfield6s.js +5 -5
  386. package/src/{resolveOrphanedSubfield6s.spec.js → resolveOrphanedSubfield6s.test.js} +13 -13
  387. package/src/sanitize-vocabulary-source-codes.js +4 -4
  388. package/src/{sanitize-vocabulary-source-codes.spec.js → sanitize-vocabulary-source-codes.test.js} +16 -14
  389. package/src/{sort-tags.spec.js → sort-tags.test.js} +9 -11
  390. package/src/sortFields.js +4 -4
  391. package/src/{sortFields.spec.js → sortFields.test.js} +12 -13
  392. package/src/sortRelatorTerms.js +3 -3
  393. package/src/{sortRelatorTerms.spec.js → sortRelatorTerms.test.js} +13 -13
  394. package/src/sortSubfields.js +1 -1
  395. package/src/{sortSubfields.spec.js → sortSubfields.test.js} +13 -13
  396. package/src/stripPunctuation.js +3 -3
  397. package/src/{stripPunctuation.spec.js → stripPunctuation.test.js} +13 -13
  398. package/src/subfield-exclusion.js +1 -1
  399. package/src/{subfield-exclusion.spec.js → subfield-exclusion.test.js} +45 -36
  400. package/src/subfield6Utils.js +6 -10
  401. package/src/subfield8Utils.js +4 -4
  402. package/src/subfieldValueNormalizations.js +3 -3
  403. package/src/{subfieldValueNormalizations.spec.js → subfieldValueNormalizations.test.js} +18 -14
  404. package/src/sync-007-and-300.js +2 -2
  405. package/src/{sync-007-and-300.spec.js → sync-007-and-300.test.js} +13 -13
  406. package/src/translate-terms.js +3 -3
  407. package/src/{translate-terms.spec.js → translate-terms.test.js} +13 -13
  408. package/src/{typeOfDate-008.spec.js → typeOfDate-008.test.js} +12 -13
  409. package/src/{unicode-decomposition.spec.js → unicode-decomposition.test.js} +10 -16
  410. package/src/update-field-540.js +2 -2
  411. package/src/{update-field-540.spec.js → update-field-540.test.js} +13 -10
  412. package/src/urn.js +2 -2
  413. package/src/{urn.spec.js → urn.test.js} +12 -13
  414. package/src/utils.js +3 -3
  415. package/test-fixtures/field-505-separators/03/expectedResult.json +3 -1
  416. package/test-fixtures/field-505-separators/03/record.json +3 -0
  417. package/test-fixtures/normalize-subfield-value/01/metadata.json +4 -1
  418. package/test-fixtures/normalize-subfield-value/01/record.json +3 -0
  419. package/test-fixtures/normalize-subfield-value/02/expectedResult.json +3 -1
  420. package/test-fixtures/normalize-subfield-value/02/metadata.json +2 -1
  421. package/test-fixtures/normalize-subfield-value/02/record.json +3 -0
  422. package/test-fixtures/sanitize-vocabulary-source-codes/f03/expectedResult.json +3 -1
  423. package/test-fixtures/sanitize-vocabulary-source-codes/f04/expectedResult.json +3 -1
  424. package/test-fixtures/sanitize-vocabulary-source-codes/v04/metadata.json +1 -4
  425. package/test-fixtures/sanitize-vocabulary-source-codes/v04/record.json +1 -1
  426. package/dist/access-rights.spec.js +0 -195
  427. package/dist/access-rights.spec.js.map +0 -1
  428. package/dist/addMissingField041.spec.js +0 -45
  429. package/dist/addMissingField041.spec.js.map +0 -1
  430. package/dist/addMissingField336.spec.js +0 -45
  431. package/dist/addMissingField336.spec.js.map +0 -1
  432. package/dist/addMissingField337.spec.js +0 -43
  433. package/dist/addMissingField337.spec.js.map +0 -1
  434. package/dist/addMissingField338.spec.js +0 -45
  435. package/dist/addMissingField338.spec.js.map +0 -1
  436. package/dist/cyrillux-usemarcon-replacement.spec.js +0 -45
  437. package/dist/cyrillux-usemarcon-replacement.spec.js.map +0 -1
  438. package/dist/cyrillux.spec.js +0 -46
  439. package/dist/cyrillux.spec.js.map +0 -1
  440. package/dist/disambiguateSeriesStatements.spec.js +0 -51
  441. package/dist/disambiguateSeriesStatements.spec.js.map +0 -1
  442. package/dist/double-commas.spec.js +0 -73
  443. package/dist/double-commas.spec.js.map +0 -1
  444. package/dist/duplicates-ind1.spec.js +0 -45
  445. package/dist/duplicates-ind1.spec.js.map +0 -1
  446. package/dist/empty-fields.spec.js +0 -118
  447. package/dist/empty-fields.spec.js.map +0 -1
  448. package/dist/ending-punctuation.spec.js +0 -2654
  449. package/dist/ending-punctuation.spec.js.map +0 -1
  450. package/dist/ending-whitespace.spec.js +0 -42
  451. package/dist/ending-whitespace.spec.js.map +0 -1
  452. package/dist/field-008-18-34-character-groups.spec.js +0 -51
  453. package/dist/field-008-18-34-character-groups.spec.js.map +0 -1
  454. package/dist/field-505-separators.spec.js +0 -51
  455. package/dist/field-505-separators.spec.js.map +0 -1
  456. package/dist/field-521-fix.spec.js +0 -51
  457. package/dist/field-521-fix.spec.js.map +0 -1
  458. package/dist/field-exclusion.spec.js +0 -1054
  459. package/dist/field-exclusion.spec.js.map +0 -1
  460. package/dist/field-structure.spec.js +0 -535
  461. package/dist/field-structure.spec.js.map +0 -1
  462. package/dist/fields-present.spec.js +0 -121
  463. package/dist/fields-present.spec.js.map +0 -1
  464. package/dist/fix-33X.spec.js +0 -45
  465. package/dist/fix-33X.spec.js.map +0 -1
  466. package/dist/fix-country-codes.spec.js +0 -51
  467. package/dist/fix-country-codes.spec.js.map +0 -1
  468. package/dist/fix-language-codes.spec.js +0 -44
  469. package/dist/fix-language-codes.spec.js.map +0 -1
  470. package/dist/fixRelatorTerms.spec.js +0 -51
  471. package/dist/fixRelatorTerms.spec.js.map +0 -1
  472. package/dist/fixed-fields.spec.js +0 -140
  473. package/dist/fixed-fields.spec.js.map +0 -1
  474. package/dist/identical-fields.spec.js +0 -99
  475. package/dist/identical-fields.spec.js.map +0 -1
  476. package/dist/indicator-fixes.spec.js +0 -51
  477. package/dist/indicator-fixes.spec.js.map +0 -1
  478. package/dist/isbn-issn.spec.js +0 -595
  479. package/dist/isbn-issn.spec.js.map +0 -1
  480. package/dist/item-language.spec.js +0 -306
  481. package/dist/item-language.spec.js.map +0 -1
  482. package/dist/melindaCustomMergeFields.json +0 -5120
  483. package/dist/merge-fields.spec.js +0 -51
  484. package/dist/merge-fields.spec.js.map +0 -1
  485. package/dist/mergeField500Lisapainokset.spec.js +0 -51
  486. package/dist/mergeField500Lisapainokset.spec.js.map +0 -1
  487. package/dist/mergeRelatorTermFields.spec.js +0 -51
  488. package/dist/mergeRelatorTermFields.spec.js.map +0 -1
  489. package/dist/modernize-502.spec.js +0 -49
  490. package/dist/modernize-502.spec.js.map +0 -1
  491. package/dist/multiple-subfield-0.spec.js +0 -51
  492. package/dist/multiple-subfield-0.spec.js.map +0 -1
  493. package/dist/non-breaking-space.spec.js +0 -42
  494. package/dist/non-breaking-space.spec.js.map +0 -1
  495. package/dist/normalize-dashes.spec.js +0 -51
  496. package/dist/normalize-dashes.spec.js.map +0 -1
  497. package/dist/normalize-identifiers.spec.js +0 -51
  498. package/dist/normalize-identifiers.spec.js.map +0 -1
  499. package/dist/normalize-qualifying-information.spec.js +0 -51
  500. package/dist/normalize-qualifying-information.spec.js.map +0 -1
  501. package/dist/normalize-utf8-diacritics.spec.js +0 -51
  502. package/dist/normalize-utf8-diacritics.spec.js.map +0 -1
  503. package/dist/punctuation.spec.js +0 -51
  504. package/dist/punctuation.spec.js.map +0 -1
  505. package/dist/punctuation2.spec.js +0 -51
  506. package/dist/punctuation2.spec.js.map +0 -1
  507. package/dist/reindexSubfield6OccurenceNumbers.spec.js +0 -51
  508. package/dist/reindexSubfield6OccurenceNumbers.spec.js.map +0 -1
  509. package/dist/removeDuplicateDataFields.spec.js +0 -51
  510. package/dist/removeDuplicateDataFields.spec.js.map +0 -1
  511. package/dist/removeInferiorDataFields.spec.js +0 -51
  512. package/dist/removeInferiorDataFields.spec.js.map +0 -1
  513. package/dist/resolvable-ext-references-melinda.spec.js +0 -166
  514. package/dist/resolvable-ext-references-melinda.spec.js.map +0 -1
  515. package/dist/resolveOrphanedSubfield6s.spec.js +0 -51
  516. package/dist/resolveOrphanedSubfield6s.spec.js.map +0 -1
  517. package/dist/sanitize-vocabulary-source-codes.spec.js +0 -51
  518. package/dist/sanitize-vocabulary-source-codes.spec.js.map +0 -1
  519. package/dist/sort-tags.spec.js +0 -207
  520. package/dist/sort-tags.spec.js.map +0 -1
  521. package/dist/sortFields.spec.js +0 -51
  522. package/dist/sortFields.spec.js.map +0 -1
  523. package/dist/sortRelatorTerms.spec.js +0 -51
  524. package/dist/sortRelatorTerms.spec.js.map +0 -1
  525. package/dist/sortSubfields.spec.js +0 -52
  526. package/dist/sortSubfields.spec.js.map +0 -1
  527. package/dist/stripPunctuation.spec.js +0 -51
  528. package/dist/stripPunctuation.spec.js.map +0 -1
  529. package/dist/subfield-exclusion.spec.js +0 -523
  530. package/dist/subfield-exclusion.spec.js.map +0 -1
  531. package/dist/subfieldValueNormalizations.spec.js +0 -51
  532. package/dist/subfieldValueNormalizations.spec.js.map +0 -1
  533. package/dist/sync-007-and-300.spec.js +0 -51
  534. package/dist/sync-007-and-300.spec.js.map +0 -1
  535. package/dist/translate-terms.spec.js +0 -51
  536. package/dist/translate-terms.spec.js.map +0 -1
  537. package/dist/typeOfDate-008.spec.js +0 -47
  538. package/dist/typeOfDate-008.spec.js.map +0 -1
  539. package/dist/unicode-decomposition.spec.js +0 -91
  540. package/dist/unicode-decomposition.spec.js.map +0 -1
  541. package/dist/update-field-540.spec.js +0 -51
  542. package/dist/update-field-540.spec.js.map +0 -1
  543. package/dist/urn.spec.js +0 -52
  544. package/dist/urn.spec.js.map +0 -1
  545. package/src/cyrillux-usemarcon-replacement.spec.js +0 -47
@@ -1,29 +1,16 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = _default;
7
- var _utils = require("./utils");
8
- var _field33XUtils = require("./field33XUtils");
9
- //import createDebugLogger from 'debug';
10
-
11
- // Based mostly on USEMARCON-RDA. However, many things have been rethought, modernized etc.
12
- const description = 'Add missing 338 field(s)';
13
- function _default() {
1
+ import { fieldHasSubfield, fieldToString, getCatalogingLanguage, nvdebug } from "./utils.js";
2
+ import { getFormOfItem, map338CodeToTerm } from "./field33XUtils.js";
3
+ const description = "Add missing 338 field(s)";
4
+ export default function() {
14
5
  return {
15
6
  description,
16
7
  validate,
17
8
  fix
18
9
  };
19
10
  function fix(record) {
20
- (0, _utils.nvdebug)(`FIX ${description}...`);
11
+ nvdebug(`FIX ${description}...`);
21
12
  const newField = getMissing338(record);
22
- const res = {
23
- message: [],
24
- fix: [],
25
- valid: true
26
- };
13
+ const res = { message: [], fix: [], valid: true };
27
14
  if (newField) {
28
15
  record.insertField(newField);
29
16
  return res;
@@ -31,394 +18,301 @@ function _default() {
31
18
  return res;
32
19
  }
33
20
  function validate(record) {
34
- (0, _utils.nvdebug)(`VALIDATE ${description}...`);
21
+ nvdebug(`VALIDATE ${description}...`);
35
22
  const newField = getMissing338(record);
36
23
  if (!newField) {
37
- return {
38
- message: [],
39
- valid: true
40
- };
41
- }
42
- const msg = `${description}: '${(0, _utils.fieldToString)(newField)}'`;
43
- return {
44
- message: [msg],
45
- valid: false
46
- };
24
+ return { message: [], valid: true };
25
+ }
26
+ const msg = `${description}: '${fieldToString(newField)}'`;
27
+ return { message: [msg], valid: false };
47
28
  }
48
29
  function trimExtent(value) {
49
- return value.replace(/\([^)]*\)/gu, '').replace(/\[[^\]*]\]/gu, '').replace(/[0-9]/gu, '').replace(/^ +/gu, '').replace(/[ :;+]+$/gu, '').replace(/ +/gu, ' ');
30
+ return value.replace(/\([^)]*\)/gu, "").replace(/\[[^\]*]\]/gu, "").replace(/[0-9]/gu, "").replace(/^ +/gu, "").replace(/[ :;+]+$/gu, "").replace(/ +/gu, " ");
50
31
  }
51
32
  function extractExtent(record) {
52
- const [f300] = record.get('300');
33
+ const [f300] = record.get("300");
53
34
  if (!f300) {
54
- return undefined;
35
+ return void 0;
55
36
  }
56
- const [a] = f300.subfields.filter(sf => sf.code === 'a');
37
+ const [a] = f300.subfields.filter((sf) => sf.code === "a");
57
38
  if (!a) {
58
- return undefined;
39
+ return void 0;
59
40
  }
60
41
  return trimExtent(a.value);
61
42
  }
62
43
  function extentToAudioCarrierType(record) {
63
- const extent = extractExtent(record); // trimmed 300$a
44
+ const extent = extractExtent(record);
64
45
  if (!extent) {
65
- return undefined;
46
+ return void 0;
66
47
  }
67
- (0, _utils.nvdebug)(`AUDIO EXTENT: '${extent}`);
48
+ nvdebug(`AUDIO EXTENT: '${extent}`);
68
49
  if (extent.match(/^(?:audio discs?|[^ ]*ljudskiva|[^ ]*ljudskivor|LP-levy|LP-levyä|LP-skiva|LP-skivor|[^ ]*äänilevy)$/iu)) {
69
- return 'sd';
50
+ return "sd";
70
51
  }
71
- // Boldly assuming here that any cassette is audio
72
52
  if (extent.match(/^(?:audiocasettes?|C-kas[^ ]*|DAT-as[^ ]*|kasettia?|kassett|kassetter|ljudkassett|ljudkassetter|äänikasettia?)$/ui)) {
73
- return 'ss';
53
+ return "ss";
74
54
  }
75
55
  const typeOfRecord = record.getTypeOfRecord();
76
- if (['i', 'j'].includes(typeOfRecord) || record.fields.some(f => f.tag === '007' && f.value[0] === 's')) {
56
+ if (["i", "j"].includes(typeOfRecord) || record.fields.some((f) => f.tag === "007" && f.value[0] === "s")) {
77
57
  if (extent.match(/^[^ ]*(?:levyä?|skiva|skivor)$/ui)) {
78
- return 'sd';
58
+ return "sd";
79
59
  }
80
60
  if (extent.match(/^[^ ]*(?:cassettes?|kasettia?|kassett|kassetter)$/ui)) {
81
- return 'ss';
61
+ return "ss";
82
62
  }
83
63
  }
84
- return undefined;
64
+ return void 0;
85
65
  }
86
- function extentToComputerCarrierType(record, formOfItem = '?') {
87
- const extent = extractExtent(record); // trimmed 300$a
66
+ function extentToComputerCarrierType(record, formOfItem = "?") {
67
+ const extent = extractExtent(record);
88
68
  if (extent) {
89
- // What about USB etc?!?
90
69
  if (extent.match(/^(?:computer chip cartridge|datorminnesmodul|piirikotelo)$/ui)) {
91
- return 'cb'; // eg. Nintendo Switch games?
70
+ return "cb";
92
71
  }
93
72
  if (extent.match(/^(?:CD-ROM[^ ]*|levyke|levykettä)$/ui)) {
94
- return 'cd';
73
+ return "cd";
95
74
  }
96
- // Might be a video as well, thus the formOfItem check:
97
- if (['q', 's'].includes(formOfItem) && extent.match(/^(?:CD-levy|optinen levy|optisk skiva|optiska skivor|optista levyä)$/ui)) {
98
- return 'cd';
75
+ if (["q", "s"].includes(formOfItem) && extent.match(/^(?:CD-levy|optinen levy|optisk skiva|optiska skivor|optista levyä)$/ui)) {
76
+ return "cd";
99
77
  }
100
78
  if (extent.match(/^(?:computer card|datorkort|minneskort|muistikortti)[^ ]*$/u)) {
101
- // Melinda only muistikortti
102
- return 'ck';
79
+ return "ck";
103
80
  }
104
81
  if (extent.match(/^(?:online resource|onlineresurs|verkkoaineisto)$/ui)) {
105
- return 'cr';
82
+ return "cr";
106
83
  }
107
84
  }
108
- return undefined;
85
+ return void 0;
109
86
  }
110
87
  function extentToMicroformCarrierType(record) {
111
- const extent = extractExtent(record); // trimmed 300$a
88
+ const extent = extractExtent(record);
112
89
  if (!extent) {
113
- return undefined;
90
+ return void 0;
114
91
  }
115
- // No instances in Melinda map to 'ha', 'hb', 'hc'
116
-
117
92
  if (extent.match(/^(?:filmikorttia?|microfiches?|mikrokorttia?)$/ui)) {
118
- // May be 'hg' as well? ("mikrokortti" vs "mikrokortti (läpinäkymätön)")
119
- if ((0, _field33XUtils.getFormOfItem)(record) === 'c') {
120
- return 'hg'; // Mikrokortti (läpinäkymätön)
93
+ if (getFormOfItem(record) === "c") {
94
+ return "hg";
121
95
  }
122
- return 'he';
96
+ return "he";
123
97
  }
124
98
  if (extent.match(/^(?:microfilm rolls?|mikrofilmirullaa?(?: kelalla)?|mikrofilmsrullar|mikrofilmsrulle)$/ui)) {
125
- return 'hj';
99
+ return "hj";
126
100
  }
127
- return undefined;
101
+ return void 0;
128
102
  }
129
-
130
- // extentToMicroscopicCarrierType not really needed
131
-
132
103
  function extentToProjectedImageCarrierType(record) {
133
- const extent = extractExtent(record); // trimmed 300$a
104
+ const extent = extractExtent(record);
134
105
  if (!extent) {
135
- return undefined;
106
+ return void 0;
136
107
  }
137
108
  if (extent.match(/^(?:diaa?|diabild|diabilder|slides?)$/ui)) {
138
- return 'gs';
109
+ return "gs";
139
110
  }
140
111
  if (extent.match(/^(?:overhead transparencies|overhead transparency|piirtoheitinkalvoa?|transparang|transparanger)$/ui)) {
141
- return 'gt';
112
+ return "gt";
142
113
  }
143
114
  if (extent.match(/^(?:film rolls?|filmirullaa?|filmrullar|filmrulle)$/ui)) {
144
- return 'mo';
115
+ return "mo";
145
116
  }
146
- return undefined;
117
+ return void 0;
147
118
  }
148
-
149
- // StereographicCarrierType not needed
150
-
151
119
  function extentToUnmediatedCarrierType(record) {
152
- const extent = extractExtent(record); // trimmed 300$a
120
+ const extent = extractExtent(record);
153
121
  if (!extent) {
154
- return undefined;
122
+ return void 0;
155
123
  }
156
- return undefined;
124
+ return void 0;
157
125
  }
158
126
  function extentToVideoCarrierType(record) {
159
- const extent = extractExtent(record); // trimmed 300$a
127
+ const extent = extractExtent(record);
160
128
  if (!extent) {
161
- return undefined;
129
+ return void 0;
162
130
  }
163
- // DVD-videoskivor etc
164
131
  if (extent.match(/^[^ ]*(?:videodiscs?|videolevyä?|videoskiva|videoskivor)$/ui)) {
165
- return 'vd';
132
+ return "vd";
166
133
  }
167
134
  if (extent.match(/^(?:videocassettes?|videokassett|videokassetter|videokasettia?)$/ui) || extent.match(/^(?:VHS)/ui)) {
168
- return 'vf';
135
+ return "vf";
169
136
  }
170
- return undefined;
137
+ return void 0;
171
138
  }
172
139
  function extentToCarrierType(record) {
173
- (0, _utils.nvdebug)(`EXTENT2CARRIERTYPE`);
174
- return extentToAudioCarrierType(record) || extentToComputerCarrierType(record) || extentToMicroformCarrierType(record) ||
175
- // Microscopic carriers don't really exist in our data
176
- extentToProjectedImageCarrierType(record) ||
177
- // Stereographic carriers don't really exist in our data
140
+ nvdebug(`EXTENT2CARRIERTYPE`);
141
+ return extentToAudioCarrierType(record) || extentToComputerCarrierType(record) || extentToMicroformCarrierType(record) || // Microscopic carriers don't really exist in our data
142
+ extentToProjectedImageCarrierType(record) || // Stereographic carriers don't really exist in our data
178
143
  extentToUnmediatedCarrierType(record) || extentToVideoCarrierType(record);
179
144
  }
180
145
  function getComputerCarrierType(record) {
181
- const formOfItem = (0, _field33XUtils.getFormOfItem)(record);
182
- if (formOfItem === 'o') {
183
- // Online resource
184
- return 'cr';
146
+ const formOfItem = getFormOfItem(record);
147
+ if (formOfItem === "o") {
148
+ return "cr";
185
149
  }
186
150
  const typeOfRecord = record.getTypeOfRecord();
187
- if (typeOfRecord !== 'm') {
188
- if (!['o', 'q', 's'].includes(formOfItem)) {
189
- // (Actually 'o' was already handled.) Probably not a computer carrier type
190
- return undefined;
191
- }
192
- }
193
-
194
- /* After re-reading, this seems illegal
195
- if (typeOfRecord === 'm') {
196
- const f007 = record.get('007');
197
- if (f007.length === 1) {
198
- // ca: none, cb: 10 or so, probably errors (typically USB)
199
- if (f007[0].value[0] === 'c' && f007[0].value[1] === 'o') {
200
- return 'cd';
201
- }
151
+ if (typeOfRecord !== "m") {
152
+ if (!["o", "q", "s"].includes(formOfItem)) {
153
+ return void 0;
202
154
  }
203
155
  }
204
- */
205
-
206
- // Check fields 300$a (extent), 256$a (computer file characteristics), 516$a (type of computer file or data note), and possible 245$h (medium)
207
- const formOfItem2 = typeOfRecord === 'm' && formOfItem === '|' ? 's' : formOfItem; // handle '|'
156
+ const formOfItem2 = typeOfRecord === "m" && formOfItem === "|" ? "s" : formOfItem;
208
157
  const cand = extentToComputerCarrierType(record, formOfItem2);
209
158
  if (cand) {
210
159
  return cand;
211
160
  }
212
- return undefined;
161
+ return void 0;
213
162
  }
214
163
  function getMicroformCarrierType(record) {
215
- const f007 = record.get('007');
216
- if (f007.length === 1 && f007[0].value[0] === 'h') {
164
+ const f007 = record.get("007");
165
+ if (f007.length === 1 && f007[0].value[0] === "h") {
217
166
  const materialDesignation = f007[0].value.charAt(1);
218
- // 007/00-01 does not seem exactly trustworthy, but can't blame us for crappy metadata...
219
- if (['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j'].includes(materialDesignation)) {
167
+ if (["a", "b", "c", "d", "e", "f", "g", "h", "j"].includes(materialDesignation)) {
220
168
  return `h${materialDesignation}`;
221
169
  }
222
170
  }
223
- const formOfItem = (0, _field33XUtils.getFormOfItem)(record);
171
+ const formOfItem = getFormOfItem(record);
224
172
  const cand = extentToMicroformCarrierType(record, formOfItem);
225
173
  if (cand) {
226
174
  return cand;
227
175
  }
228
- return undefined;
176
+ return void 0;
229
177
  }
230
178
  function isUnmediatedVolume(record) {
231
- // Volume/Nide
232
179
  const typeOfRecord = record.getTypeOfRecord();
233
- if (!['a', 'c', 'e', 't'].includes(typeOfRecord)) {
180
+ if (!["a", "c", "e", "t"].includes(typeOfRecord)) {
234
181
  return false;
235
182
  }
236
- const fields337 = record.get('337');
237
- if (!fields337 || !fields337.some(f => (0, _utils.fieldHasSubfield)(f, 'b', 'n'))) {
183
+ const fields337 = record.get("337");
184
+ if (!fields337 || !fields337.some((f) => fieldHasSubfield(f, "b", "n"))) {
238
185
  return false;
239
186
  }
240
- const fields336 = record.get('336');
241
- if (fields336 && fields336.some(f => f.subfields.some(sf => sf.code === 'b' && ['txt', 'cri'].includes(sf.value)))) {
242
- return 'nc'; // HANDLE ARKKI! ETC...
187
+ const fields336 = record.get("336");
188
+ if (fields336 && fields336.some((f) => f.subfields.some((sf) => sf.code === "b" && ["txt", "cri"].includes(sf.value)))) {
189
+ return "nc";
243
190
  }
244
- // Add 300$a value-based guesses?
245
191
  return false;
246
192
  }
247
193
  function formOfItemToField338(record) {
248
- const formOfItem = (0, _field33XUtils.getFormOfItem)(record);
249
- if (formOfItem === 'a') {
250
- // The only notable exception found in Melinda's tag=300 fields:
251
- if (record.get('300').some(f => f.subfields.some(sf => sf.code === 'a' && sf.value.match(/mikrofilmikela/iu)))) {
252
- return 'hd';
194
+ const formOfItem = getFormOfItem(record);
195
+ if (formOfItem === "a") {
196
+ if (record.get("300").some((f) => f.subfields.some((sf) => sf.code === "a" && sf.value.match(/mikrofilmikela/iu)))) {
197
+ return "hd";
253
198
  }
254
- // Empically observed default in Melinda:
255
- return 'hj'; // mikrofilmirulla
256
- }
257
- if (formOfItem === 'b') {
258
- // mikrokortti
259
- return 'he';
260
- }
261
- if (formOfItem === 'c') {
262
- // Deviates from usemarcon-bookwhere-rda. Fix it? Check data?
263
- return 'hg'; // Mikrokortti (läpinäkymätön). We have none in Melinda it seems... Add test?
264
- }
265
- // 'd' isoteksti
266
- // 'e' sanomalehti (for CR only)
267
- // 'f' pistekirjoitus
268
- if (formOfItem === 'o') {
269
- // online resource
270
- return 'cr'; // already handled elsewhere, but keep this here as well
271
- }
272
- // 'q' local electronic stuff, use 300 et al to guess. Implemented elsewhere.
273
- // 'r' painojäljenne, arkki vs nide?
274
- // 's' electronic (might be local or online). Implemented elsewhere.
275
- return undefined;
199
+ return "hj";
200
+ }
201
+ if (formOfItem === "b") {
202
+ return "he";
203
+ }
204
+ if (formOfItem === "c") {
205
+ return "hg";
206
+ }
207
+ if (formOfItem === "o") {
208
+ return "cr";
209
+ }
210
+ return void 0;
276
211
  }
277
212
  function audioToField338(record) {
278
- (0, _utils.nvdebug)('AUDIO-TO-338');
213
+ nvdebug("AUDIO-TO-338");
279
214
  const typeOfRecord = record.getTypeOfRecord(record);
280
- if (typeOfRecord !== 'i' && typeOfRecord !== 'j') {
281
- return undefined;
215
+ if (typeOfRecord !== "i" && typeOfRecord !== "j") {
216
+ return void 0;
282
217
  }
283
- const f007 = record.get('007');
284
- if (f007.length === 1 && f007[0].value[0] === 's') {
218
+ const f007 = record.get("007");
219
+ if (f007.length === 1 && f007[0].value[0] === "s") {
285
220
  const materialDesignation = f007[0].value.charAt(1);
286
- if (['d', 'e', 's', 't'].includes(materialDesignation)) {
221
+ if (["d", "e", "s", "t"].includes(materialDesignation)) {
287
222
  return `s${materialDesignation}`;
288
223
  }
289
- // 007/00-01 sr implies online resource, but we'll probably figure it out anyways
290
224
  }
291
- const extentToCode = extentToAudioCarrierType(record); // field 300
225
+ const extentToCode = extentToAudioCarrierType(record);
292
226
  if (extentToCode) {
293
227
  return extentToCode;
294
228
  }
295
- return undefined;
229
+ return void 0;
296
230
  }
297
231
  function projectedToField338(record) {
298
232
  const typeOfRecord = record.getTypeOfRecord(record);
299
- if (typeOfRecord !== 'g') {
300
- // must be "projected"
301
- return undefined;
233
+ if (typeOfRecord !== "g") {
234
+ return void 0;
302
235
  }
303
- const f007 = record.get('007');
236
+ const f007 = record.get("007");
304
237
  if (f007.length === 1) {
305
- if (f007[0].value[0] === 'g') {
238
+ if (f007[0].value[0] === "g") {
306
239
  const materialDesignation = f007[0].value.charAt(1);
307
- if (['c', 'd', 'f', 's', 't'].includes(materialDesignation)) {
240
+ if (["c", "d", "f", "s", "t"].includes(materialDesignation)) {
308
241
  return `g${materialDesignation}`;
309
242
  }
310
- if (materialDesignation === 'o') {
311
- return 'gf';
243
+ if (materialDesignation === "o") {
244
+ return "gf";
312
245
  }
313
246
  }
314
- if (f007[0].value[0] === 'v') {
247
+ if (f007[0].value[0] === "v") {
315
248
  const materialDesignation = f007[0].value.charAt(1);
316
- if (['c', 'd', 'f', 'r'].includes(materialDesignation)) {
249
+ if (["c", "d", "f", "r"].includes(materialDesignation)) {
317
250
  return `v${materialDesignation}`;
318
251
  }
319
252
  }
320
253
  }
321
- const extentToCode = extentToVideoCarrierType(record) || extentToProjectedImageCarrierType(record); // field 300
254
+ const extentToCode = extentToVideoCarrierType(record) || extentToProjectedImageCarrierType(record);
322
255
  if (extentToCode) {
323
256
  return extentToCode;
324
257
  }
325
- return undefined;
258
+ return void 0;
326
259
  }
327
260
  function objectToField338(record) {
328
261
  const typeOfRecord = record.getTypeOfRecord(record);
329
- if (typeOfRecord === 'r') {
330
- // The only subdivision might be card/no. Marginal, so I'm not checking that now.
331
- return 'nr';
262
+ if (typeOfRecord === "r") {
263
+ return "nr";
332
264
  }
333
- return undefined;
265
+ return void 0;
334
266
  }
335
267
  function educatedGuessIsOnlineResource(record) {
336
- const fields856 = record.get('856');
337
- if (fields856.some(f => f.ind1 === '4' && f.ind2 === '0')) {
338
- return 'cr';
268
+ const fields856 = record.get("856");
269
+ if (fields856.some((f) => f.ind1 === "4" && f.ind2 === "0")) {
270
+ return "cr";
339
271
  }
340
- return undefined;
272
+ return void 0;
341
273
  }
342
274
  function checkQualifyingInformation(record) {
343
- const identifierFields = record.get('(?:015|020|024|028)').filter(f => f.subfields.some(sf => sf.code === 'q'));
344
- if (identifierFields.some(f => f.subfields.some(sf => sf.code === 'q' && sf.value.match(/\b(?:hard-?cover|kierre|nid|sid|kovakant|pehmeäkant|pärmar)/iu)))) {
345
- return 'nc';
275
+ const identifierFields = record.get("(?:015|020|024|028)").filter((f) => f.subfields.some((sf) => sf.code === "q"));
276
+ if (identifierFields.some((f) => f.subfields.some((sf) => sf.code === "q" && sf.value.match(/\b(?:hard-?cover|kierre|nid|sid|kovakant|pehmeäkant|pärmar)/iu)))) {
277
+ return "nc";
346
278
  }
347
- return undefined;
279
+ return void 0;
348
280
  }
349
281
  function educatedGuessToCarrierType(record) {
350
282
  return checkQualifyingInformation(record) || educatedGuessIsOnlineResource(record) || finalFallback();
351
283
  function finalFallback() {
352
- const [f337] = record.get('337');
284
+ const [f337] = record.get("337");
353
285
  if (f337) {
354
- if (f337.subfields.some(sf => sf.code === 'b' && sf.value === 'n')) {
355
- // unmediated
356
- // As we are a library, most of the stuff are books
357
- return 'nc';
286
+ if (f337.subfields.some((sf) => sf.code === "b" && sf.value === "n")) {
287
+ return "nc";
358
288
  }
359
289
  }
360
- return undefined;
290
+ return void 0;
361
291
  }
362
292
  }
363
293
  function guessMissing338B(record) {
364
- // Data sources (which should be trusted most?)
365
- // LDR/06
366
- // 007
367
- // 008/form of item
368
- // 300
369
- // 256
370
- // 516
371
- // 245$h...
372
- // First use form of item?
373
- return getComputerCarrierType(record) ||
374
- // LDR/06=m (and 007 and 300)
375
- objectToField338(record) ||
376
- // LDR/06=r
377
- audioToField338(record) ||
378
- // LDR/06=i/j (and 007 and 300)
379
- projectedToField338(record) ||
380
- // ...
381
- formOfItemToField338(record) ||
382
- // 'a' 'b', 'c', 'o'
383
- getMicroformCarrierType(record) || isUnmediatedVolume(record) || extentToCarrierType(record) ||
384
- // fallback: field 300-based guess
385
- educatedGuessToCarrierType(record); // 337$b='n' (käytettävissä ilman laitetta) -> nc
386
-
387
- /*
388
- const firstFunction = guessFunctions.find(f => f(record));
389
- if (firstFunction) {
390
- return firstFunction(record);
391
- }
392
- return undefined;
393
- */
294
+ return getComputerCarrierType(record) || // LDR/06=m (and 007 and 300)
295
+ objectToField338(record) || // LDR/06=r
296
+ audioToField338(record) || // LDR/06=i/j (and 007 and 300)
297
+ projectedToField338(record) || // ...
298
+ formOfItemToField338(record) || // 'a' 'b', 'c', 'o'
299
+ getMicroformCarrierType(record) || isUnmediatedVolume(record) || extentToCarrierType(record) || // fallback: field 300-based guess
300
+ educatedGuessToCarrierType(record);
394
301
  }
395
302
  function getMissing338(record) {
396
- // Field 773 and 973 means that the record is a component record, and doesn't need field 338.
397
- // This will return only a single value. Multivalues must be handled before this...
398
- if (record.fields.some(f => ['338', '773', '973'].includes(f.tag))) {
399
- return undefined;
400
- }
401
- const b = guessMissing338B(record) || 'zu';
402
- const catLang = (0, _utils.getCatalogingLanguage)(record) || 'fin';
403
- const a = (0, _field33XUtils.map338CodeToTerm)(b, catLang);
404
- const a2 = a ? a : 'z'; // unspecified
405
-
406
- const data = {
407
- tag: '338',
408
- ind1: ' ',
409
- ind2: ' ',
410
- subfields: [{
411
- code: 'a',
412
- value: a2
413
- }, {
414
- code: 'b',
415
- value: b
416
- }, {
417
- code: '2',
418
- value: 'rdacarrier'
419
- }]
420
- };
303
+ if (record.fields.some((f) => ["338", "773", "973"].includes(f.tag))) {
304
+ return void 0;
305
+ }
306
+ const b = guessMissing338B(record) || "zu";
307
+ const catLang = getCatalogingLanguage(record) || "fin";
308
+ const a = map338CodeToTerm(b, catLang);
309
+ const a2 = a ? a : "z";
310
+ const data = { tag: "338", ind1: " ", ind2: " ", subfields: [
311
+ { code: "a", value: a2 },
312
+ { code: "b", value: b },
313
+ { code: "2", value: "rdacarrier" }
314
+ ] };
421
315
  return data;
422
316
  }
423
317
  }
424
- //# sourceMappingURL=addMissingField338.js.map
318
+ //# sourceMappingURL=addMissingField338.js.map