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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (546) hide show
  1. package/.github/workflows/melinda-node-tests.yml +1 -1
  2. package/dist/access-rights.js +63 -91
  3. package/dist/access-rights.js.map +7 -1
  4. package/dist/access-rights.test.js +137 -0
  5. package/dist/access-rights.test.js.map +7 -0
  6. package/dist/addMissingField041.js +21 -53
  7. package/dist/addMissingField041.js.map +7 -1
  8. package/dist/addMissingField041.test.js +39 -0
  9. package/dist/addMissingField041.test.js.map +7 -0
  10. package/dist/addMissingField336.js +99 -191
  11. package/dist/addMissingField336.js.map +7 -1
  12. package/dist/addMissingField336.test.js +39 -0
  13. package/dist/addMissingField336.test.js.map +7 -0
  14. package/dist/addMissingField337.js +63 -132
  15. package/dist/addMissingField337.js.map +7 -1
  16. package/dist/addMissingField337.test.js +39 -0
  17. package/dist/addMissingField337.test.js.map +7 -0
  18. package/dist/addMissingField338.js +147 -253
  19. package/dist/addMissingField338.js.map +7 -1
  20. package/dist/addMissingField338.test.js +39 -0
  21. package/dist/addMissingField338.test.js.map +7 -0
  22. package/dist/cyrillux-usemarcon-replacement.js +119 -272
  23. package/dist/cyrillux-usemarcon-replacement.js.map +7 -1
  24. package/dist/cyrillux-usemarcon-replacement.test.js +46 -0
  25. package/dist/cyrillux-usemarcon-replacement.test.js.map +7 -0
  26. package/dist/cyrillux.js +119 -223
  27. package/dist/cyrillux.js.map +7 -1
  28. package/dist/cyrillux.test.js +39 -0
  29. package/dist/cyrillux.test.js.map +7 -0
  30. package/dist/disambiguateSeriesStatements.js +40 -81
  31. package/dist/disambiguateSeriesStatements.js.map +7 -1
  32. package/dist/disambiguateSeriesStatements.test.js +44 -0
  33. package/dist/disambiguateSeriesStatements.test.js.map +7 -0
  34. package/dist/double-commas.js +7 -14
  35. package/dist/double-commas.js.map +7 -1
  36. package/dist/double-commas.test.js +48 -0
  37. package/dist/double-commas.test.js.map +7 -0
  38. package/dist/duplicates-ind1.js +10 -31
  39. package/dist/duplicates-ind1.js.map +7 -1
  40. package/dist/duplicates-ind1.test.js +40 -0
  41. package/dist/duplicates-ind1.test.js.map +7 -0
  42. package/dist/empty-fields.js +10 -22
  43. package/dist/empty-fields.js.map +7 -1
  44. package/dist/empty-fields.test.js +129 -0
  45. package/dist/empty-fields.test.js.map +7 -0
  46. package/dist/ending-punctuation-conf.js +871 -769
  47. package/dist/ending-punctuation-conf.js.map +7 -1
  48. package/dist/ending-punctuation.js +84 -167
  49. package/dist/ending-punctuation.js.map +7 -1
  50. package/dist/ending-punctuation.test.js +2290 -0
  51. package/dist/ending-punctuation.test.js.map +7 -0
  52. package/dist/ending-whitespace.js +10 -35
  53. package/dist/ending-whitespace.js.map +7 -1
  54. package/dist/ending-whitespace.test.js +38 -0
  55. package/dist/ending-whitespace.test.js.map +7 -0
  56. package/dist/field-008-18-34-character-groups.js +40 -125
  57. package/dist/field-008-18-34-character-groups.js.map +7 -1
  58. package/dist/field-008-18-34-character-groups.test.js +45 -0
  59. package/dist/field-008-18-34-character-groups.test.js.map +7 -0
  60. package/dist/field-505-separators.js +19 -39
  61. package/dist/field-505-separators.js.map +7 -1
  62. package/dist/field-505-separators.test.js +45 -0
  63. package/dist/field-505-separators.test.js.map +7 -0
  64. package/dist/field-521-fix.js +19 -47
  65. package/dist/field-521-fix.js.map +7 -1
  66. package/dist/field-521-fix.test.js +44 -0
  67. package/dist/field-521-fix.test.js.map +7 -0
  68. package/dist/field-exclusion.js +37 -91
  69. package/dist/field-exclusion.js.map +7 -1
  70. package/dist/field-exclusion.test.js +821 -0
  71. package/dist/field-exclusion.test.js.map +7 -0
  72. package/dist/field-structure.js +52 -104
  73. package/dist/field-structure.js.map +7 -1
  74. package/dist/field-structure.test.js +587 -0
  75. package/dist/field-structure.test.js.map +7 -0
  76. package/dist/field33XUtils.js +119 -503
  77. package/dist/field33XUtils.js.map +7 -1
  78. package/dist/fields-present.js +11 -23
  79. package/dist/fields-present.js.map +7 -1
  80. package/dist/fields-present.test.js +95 -0
  81. package/dist/fields-present.test.js.map +7 -0
  82. package/dist/fix-33X.js +393 -431
  83. package/dist/fix-33X.js.map +7 -1
  84. package/dist/fix-33X.test.js +39 -0
  85. package/dist/fix-33X.test.js.map +7 -0
  86. package/dist/fix-country-codes.js +20 -50
  87. package/dist/fix-country-codes.js.map +7 -1
  88. package/dist/fix-country-codes.test.js +44 -0
  89. package/dist/fix-country-codes.test.js.map +7 -0
  90. package/dist/fix-language-codes.js +23 -53
  91. package/dist/fix-language-codes.js.map +7 -1
  92. package/dist/fix-language-codes.test.js +38 -0
  93. package/dist/fix-language-codes.test.js.map +7 -0
  94. package/dist/fixRelatorTerms.js +82 -209
  95. package/dist/fixRelatorTerms.js.map +7 -1
  96. package/dist/fixRelatorTerms.test.js +44 -0
  97. package/dist/fixRelatorTerms.test.js.map +7 -0
  98. package/dist/fixed-fields.js +21 -30
  99. package/dist/fixed-fields.js.map +7 -1
  100. package/dist/fixed-fields.test.js +87 -0
  101. package/dist/fixed-fields.test.js.map +7 -0
  102. package/dist/identical-fields.js +8 -24
  103. package/dist/identical-fields.js.map +7 -1
  104. package/dist/identical-fields.test.js +119 -0
  105. package/dist/identical-fields.test.js.map +7 -0
  106. package/dist/index.js +119 -413
  107. package/dist/index.js.map +7 -1
  108. package/dist/indicator-fixes.js +57 -95
  109. package/dist/indicator-fixes.js.map +7 -1
  110. package/dist/indicator-fixes.test.js +42 -0
  111. package/dist/indicator-fixes.test.js.map +7 -0
  112. package/dist/isbn-issn.js +66 -126
  113. package/dist/isbn-issn.js.map +7 -1
  114. package/dist/isbn-issn.test.js +398 -0
  115. package/dist/isbn-issn.test.js.map +7 -0
  116. package/dist/item-language.js +32 -65
  117. package/dist/item-language.js.map +7 -1
  118. package/dist/item-language.test.js +322 -0
  119. package/dist/item-language.test.js.map +7 -0
  120. package/dist/melindaCustomMergeFields.js +5182 -11233
  121. package/dist/melindaCustomMergeFields.js.map +7 -1
  122. package/dist/merge-fields/controlSubfields.js +75 -142
  123. package/dist/merge-fields/controlSubfields.js.map +7 -1
  124. package/dist/merge-fields/counterpartField.js +182 -379
  125. package/dist/merge-fields/counterpartField.js.map +7 -1
  126. package/dist/merge-fields/index.js +15 -49
  127. package/dist/merge-fields/index.js.map +7 -1
  128. package/dist/merge-fields/mergableIndicator.js +18 -51
  129. package/dist/merge-fields/mergableIndicator.js.map +7 -1
  130. package/dist/merge-fields/mergableTag.js +78 -30
  131. package/dist/merge-fields/mergableTag.js.map +7 -1
  132. package/dist/merge-fields/mergeConfig.js +66 -171
  133. package/dist/merge-fields/mergeConfig.js.map +7 -1
  134. package/dist/merge-fields/mergeConstraints.js +323 -1214
  135. package/dist/merge-fields/mergeConstraints.js.map +7 -1
  136. package/dist/merge-fields/mergeField.js +47 -111
  137. package/dist/merge-fields/mergeField.js.map +7 -1
  138. package/dist/merge-fields/mergeIndicator.js +64 -118
  139. package/dist/merge-fields/mergeIndicator.js.map +7 -1
  140. package/dist/merge-fields/mergeOrAddPostprocess.js +14 -38
  141. package/dist/merge-fields/mergeOrAddPostprocess.js.map +7 -1
  142. package/dist/merge-fields/mergeOrAddSubfield.js +62 -104
  143. package/dist/merge-fields/mergeOrAddSubfield.js.map +7 -1
  144. package/dist/merge-fields/mergeSubfield.js +47 -95
  145. package/dist/merge-fields/mergeSubfield.js.map +7 -1
  146. package/dist/merge-fields/removeDuplicateSubfields.js +18 -31
  147. package/dist/merge-fields/removeDuplicateSubfields.js.map +7 -1
  148. package/dist/merge-fields/worldKnowledge.js +15 -40
  149. package/dist/merge-fields/worldKnowledge.js.map +7 -1
  150. package/dist/merge-fields.test.js +44 -0
  151. package/dist/merge-fields.test.js.map +7 -0
  152. package/dist/mergeField500Lisapainokset.js +28 -57
  153. package/dist/mergeField500Lisapainokset.js.map +7 -1
  154. package/dist/mergeField500Lisapainokset.test.js +44 -0
  155. package/dist/mergeField500Lisapainokset.test.js.map +7 -0
  156. package/dist/mergeRelatorTermFields.js +33 -69
  157. package/dist/mergeRelatorTermFields.js.map +7 -1
  158. package/dist/mergeRelatorTermFields.test.js +44 -0
  159. package/dist/mergeRelatorTermFields.test.js.map +7 -0
  160. package/dist/modernize-502.js +23 -55
  161. package/dist/modernize-502.js.map +7 -1
  162. package/dist/modernize-502.test.js +38 -0
  163. package/dist/modernize-502.test.js.map +7 -0
  164. package/dist/multiple-subfield-0.js +23 -48
  165. package/dist/multiple-subfield-0.js.map +7 -1
  166. package/dist/multiple-subfield-0.test.js +44 -0
  167. package/dist/multiple-subfield-0.test.js.map +7 -0
  168. package/dist/non-breaking-space.js +11 -32
  169. package/dist/non-breaking-space.js.map +7 -1
  170. package/dist/non-breaking-space.test.js +38 -0
  171. package/dist/non-breaking-space.test.js.map +7 -0
  172. package/dist/normalize-dashes.js +18 -37
  173. package/dist/normalize-dashes.js.map +7 -1
  174. package/dist/normalize-dashes.test.js +44 -0
  175. package/dist/normalize-dashes.test.js.map +7 -0
  176. package/dist/normalize-identifiers.js +54 -140
  177. package/dist/normalize-identifiers.js.map +7 -1
  178. package/dist/normalize-identifiers.test.js +44 -0
  179. package/dist/normalize-identifiers.test.js.map +7 -0
  180. package/dist/normalize-qualifying-information.js +23 -48
  181. package/dist/normalize-qualifying-information.js.map +7 -1
  182. package/dist/normalize-qualifying-information.test.js +44 -0
  183. package/dist/normalize-qualifying-information.test.js.map +7 -0
  184. package/dist/normalize-utf8-diacritics.js +19 -105
  185. package/dist/normalize-utf8-diacritics.js.map +7 -1
  186. package/dist/normalize-utf8-diacritics.test.js +44 -0
  187. package/dist/normalize-utf8-diacritics.test.js.map +7 -0
  188. package/dist/normalizeFieldForComparison.js +67 -158
  189. package/dist/normalizeFieldForComparison.js.map +7 -1
  190. package/dist/normalizeSubfieldValueForComparison.js +37 -77
  191. package/dist/normalizeSubfieldValueForComparison.js.map +7 -1
  192. package/dist/prepublicationUtils.js +58 -111
  193. package/dist/prepublicationUtils.js.map +7 -1
  194. package/dist/punctuation/index.js +56 -72
  195. package/dist/punctuation/index.js.map +7 -1
  196. package/dist/punctuation/rules/aut.js +372 -331
  197. package/dist/punctuation/rules/aut.js.map +7 -1
  198. package/dist/punctuation/rules/bib.js +420 -373
  199. package/dist/punctuation/rules/bib.js.map +7 -1
  200. package/dist/punctuation/rules/index.js +7 -21
  201. package/dist/punctuation/rules/index.js.map +7 -1
  202. package/dist/punctuation.test.js +44 -0
  203. package/dist/punctuation.test.js.map +7 -0
  204. package/dist/punctuation2.js +251 -800
  205. package/dist/punctuation2.js.map +7 -1
  206. package/dist/punctuation2.test.js +44 -0
  207. package/dist/punctuation2.test.js.map +7 -0
  208. package/dist/reindexSubfield6OccurenceNumbers.js +61 -96
  209. package/dist/reindexSubfield6OccurenceNumbers.js.map +7 -1
  210. package/dist/reindexSubfield6OccurenceNumbers.test.js +44 -0
  211. package/dist/reindexSubfield6OccurenceNumbers.test.js.map +7 -0
  212. package/dist/removeDuplicateDataFields.js +102 -202
  213. package/dist/removeDuplicateDataFields.js.map +7 -1
  214. package/dist/removeDuplicateDataFields.test.js +44 -0
  215. package/dist/removeDuplicateDataFields.test.js.map +7 -0
  216. package/dist/removeInferiorDataFields.js +103 -227
  217. package/dist/removeInferiorDataFields.js.map +7 -1
  218. package/dist/removeInferiorDataFields.test.js +44 -0
  219. package/dist/removeInferiorDataFields.test.js.map +7 -0
  220. package/dist/resolvable-ext-references-melinda.js +25 -60
  221. package/dist/resolvable-ext-references-melinda.js.map +7 -1
  222. package/dist/resolvable-ext-references-melinda.test.js +160 -0
  223. package/dist/resolvable-ext-references-melinda.test.js.map +7 -0
  224. package/dist/resolveOrphanedSubfield6s.js +33 -64
  225. package/dist/resolveOrphanedSubfield6s.js.map +7 -1
  226. package/dist/resolveOrphanedSubfield6s.test.js +44 -0
  227. package/dist/resolveOrphanedSubfield6s.test.js.map +7 -0
  228. package/dist/sanitize-vocabulary-source-codes.js +27 -55
  229. package/dist/sanitize-vocabulary-source-codes.js.map +7 -1
  230. package/dist/sanitize-vocabulary-source-codes.test.js +45 -0
  231. package/dist/sanitize-vocabulary-source-codes.test.js.map +7 -0
  232. package/dist/sort-tags.js +13 -25
  233. package/dist/sort-tags.js.map +7 -1
  234. package/dist/sort-tags.test.js +261 -0
  235. package/dist/sort-tags.test.js.map +7 -0
  236. package/dist/sortFields.js +152 -222
  237. package/dist/sortFields.js.map +7 -1
  238. package/dist/sortFields.test.js +44 -0
  239. package/dist/sortFields.test.js.map +7 -0
  240. package/dist/sortRelatorTerms.js +30 -68
  241. package/dist/sortRelatorTerms.js.map +7 -1
  242. package/dist/sortRelatorTerms.test.js +44 -0
  243. package/dist/sortRelatorTerms.test.js.map +7 -0
  244. package/dist/sortSubfields.js +102 -255
  245. package/dist/sortSubfields.js.map +7 -1
  246. package/dist/sortSubfields.test.js +44 -0
  247. package/dist/sortSubfields.test.js.map +7 -0
  248. package/dist/stripPunctuation.js +13 -36
  249. package/dist/stripPunctuation.js.map +7 -1
  250. package/dist/stripPunctuation.test.js +44 -0
  251. package/dist/stripPunctuation.test.js.map +7 -0
  252. package/dist/subfield-exclusion.js +28 -75
  253. package/dist/subfield-exclusion.js.map +7 -1
  254. package/dist/subfield-exclusion.test.js +471 -0
  255. package/dist/subfield-exclusion.test.js.map +7 -0
  256. package/dist/subfield6Utils.js +107 -269
  257. package/dist/subfield6Utils.js.map +7 -1
  258. package/dist/subfield8Utils.js +26 -50
  259. package/dist/subfield8Utils.js.map +7 -1
  260. package/dist/subfieldValueNormalizations.js +40 -74
  261. package/dist/subfieldValueNormalizations.js.map +7 -1
  262. package/dist/subfieldValueNormalizations.test.js +45 -0
  263. package/dist/subfieldValueNormalizations.test.js.map +7 -0
  264. package/dist/sync-007-and-300.js +22 -53
  265. package/dist/sync-007-and-300.js.map +7 -1
  266. package/dist/sync-007-and-300.test.js +44 -0
  267. package/dist/sync-007-and-300.test.js.map +7 -0
  268. package/dist/translate-terms.js +67 -155
  269. package/dist/translate-terms.js.map +7 -1
  270. package/dist/translate-terms.test.js +44 -0
  271. package/dist/translate-terms.test.js.map +7 -0
  272. package/dist/typeOfDate-008.js +10 -25
  273. package/dist/typeOfDate-008.js.map +7 -1
  274. package/dist/typeOfDate-008.test.js +40 -0
  275. package/dist/typeOfDate-008.test.js.map +7 -0
  276. package/dist/unicode-decomposition.js +94 -107
  277. package/dist/unicode-decomposition.js.map +7 -1
  278. package/dist/unicode-decomposition.test.js +94 -0
  279. package/dist/unicode-decomposition.test.js.map +7 -0
  280. package/dist/update-field-540.js +30 -75
  281. package/dist/update-field-540.js.map +7 -1
  282. package/dist/update-field-540.test.js +44 -0
  283. package/dist/update-field-540.test.js.map +7 -0
  284. package/dist/urn.js +55 -128
  285. package/dist/urn.js.map +7 -1
  286. package/dist/urn.test.js +44 -0
  287. package/dist/urn.test.js.map +7 -0
  288. package/dist/utils.js +72 -126
  289. package/dist/utils.js.map +7 -1
  290. package/eslint.config.mjs +1 -2
  291. package/package.json +21 -93
  292. package/src/access-rights.js +1 -1
  293. package/src/{access-rights.spec.js → access-rights.test.js} +9 -10
  294. package/src/addMissingField041.js +1 -1
  295. package/src/{addMissingField336.spec.js → addMissingField041.test.js} +13 -14
  296. package/src/addMissingField336.js +3 -3
  297. package/src/{addMissingField041.spec.js → addMissingField336.test.js} +13 -14
  298. package/src/addMissingField337.js +2 -2
  299. package/src/{addMissingField337.spec.js → addMissingField337.test.js} +13 -14
  300. package/src/addMissingField338.js +2 -2
  301. package/src/{addMissingField338.spec.js → addMissingField338.test.js} +13 -14
  302. package/src/cyrillux-usemarcon-replacement.js +18 -18
  303. package/src/cyrillux-usemarcon-replacement.test.js +55 -0
  304. package/src/cyrillux.js +19 -12
  305. package/src/{cyrillux.spec.js → cyrillux.test.js} +13 -14
  306. package/src/disambiguateSeriesStatements.js +2 -2
  307. package/src/{disambiguateSeriesStatements.spec.js → disambiguateSeriesStatements.test.js} +12 -13
  308. package/src/double-commas.js +1 -1
  309. package/src/{double-commas.spec.js → double-commas.test.js} +9 -11
  310. package/src/duplicates-ind1.js +1 -1
  311. package/src/{duplicates-ind1.spec.js → duplicates-ind1.test.js} +12 -13
  312. package/src/{empty-fields.spec.js → empty-fields.test.js} +11 -13
  313. package/src/ending-punctuation.js +1 -1
  314. package/src/{ending-punctuation.spec.js → ending-punctuation.test.js} +172 -173
  315. package/src/{ending-whitespace.spec.js → ending-whitespace.test.js} +12 -13
  316. package/src/field-008-18-34-character-groups.js +2 -2
  317. package/src/{field-008-18-34-character-groups.spec.js → field-008-18-34-character-groups.test.js} +13 -13
  318. package/src/field-505-separators.js +3 -3
  319. package/src/{field-505-separators.spec.js → field-505-separators.test.js} +16 -14
  320. package/src/field-521-fix.js +2 -2
  321. package/src/{field-521-fix.spec.js → field-521-fix.test.js} +12 -13
  322. package/src/field-exclusion.js +1 -1
  323. package/src/{field-exclusion.spec.js → field-exclusion.test.js} +60 -57
  324. package/src/{field-structure.spec.js → field-structure.test.js} +29 -29
  325. package/src/{fields-present.spec.js → fields-present.test.js} +12 -15
  326. package/src/fix-33X.js +4 -4
  327. package/src/{fix-33X.spec.js → fix-33X.test.js} +13 -14
  328. package/src/fix-country-codes.js +1 -1
  329. package/src/{fix-country-codes.spec.js → fix-country-codes.test.js} +12 -13
  330. package/src/fix-language-codes.js +5 -5
  331. package/src/{fix-language-codes.spec.js → fix-language-codes.test.js} +12 -13
  332. package/src/fixRelatorTerms.js +5 -5
  333. package/src/{fixRelatorTerms.spec.js → fixRelatorTerms.test.js} +13 -13
  334. package/src/{fixed-fields.spec.js → fixed-fields.test.js} +11 -14
  335. package/src/identical-fields.js +1 -1
  336. package/src/{identical-fields.spec.js → identical-fields.test.js} +9 -11
  337. package/src/index.js +58 -58
  338. package/src/indicator-fixes.js +3 -3
  339. package/src/{indicator-fixes.spec.js → indicator-fixes.test.js} +9 -12
  340. package/src/isbn-issn.js +1 -1
  341. package/src/{isbn-issn.spec.js → isbn-issn.test.js} +20 -22
  342. package/src/{item-language.spec.js → item-language.test.js} +21 -22
  343. package/src/merge-fields/controlSubfields.js +1 -1
  344. package/src/merge-fields/counterpartField.js +8 -9
  345. package/src/merge-fields/index.js +1 -1
  346. package/src/merge-fields/mergableIndicator.js +1 -1
  347. package/src/merge-fields/mergeField.js +6 -6
  348. package/src/merge-fields/mergeIndicator.js +1 -1
  349. package/src/merge-fields/mergeOrAddPostprocess.js +4 -4
  350. package/src/merge-fields/mergeOrAddSubfield.js +2 -2
  351. package/src/merge-fields/mergeSubfield.js +4 -4
  352. package/src/merge-fields/removeDuplicateSubfields.js +2 -2
  353. package/src/{merge-fields.spec.js → merge-fields.test.js} +12 -13
  354. package/src/{mergeField500Lisapainokset.spec.js → mergeField500Lisapainokset.test.js} +12 -13
  355. package/src/mergeRelatorTermFields.js +5 -7
  356. package/src/{mergeRelatorTermFields.spec.js → mergeRelatorTermFields.test.js} +12 -13
  357. package/src/modernize-502.js +1 -1
  358. package/src/{modernize-502.spec.js → modernize-502.test.js} +12 -13
  359. package/src/multiple-subfield-0.js +3 -3
  360. package/src/{multiple-subfield-0.spec.js → multiple-subfield-0.test.js} +13 -13
  361. package/src/{non-breaking-space.spec.js → non-breaking-space.test.js} +12 -13
  362. package/src/normalize-dashes.js +2 -2
  363. package/src/{normalize-dashes.spec.js → normalize-dashes.test.js} +12 -13
  364. package/src/normalize-identifiers.js +1 -1
  365. package/src/{normalize-identifiers.spec.js → normalize-identifiers.test.js} +12 -13
  366. package/src/normalize-qualifying-information.js +2 -2
  367. package/src/{normalize-qualifying-information.spec.js → normalize-qualifying-information.test.js} +12 -13
  368. package/src/normalize-utf8-diacritics.js +2 -2
  369. package/src/{normalize-utf8-diacritics.spec.js → normalize-utf8-diacritics.test.js} +13 -13
  370. package/src/normalizeFieldForComparison.js +6 -6
  371. package/src/normalizeSubfieldValueForComparison.js +1 -1
  372. package/src/prepublicationUtils.js +4 -4
  373. package/src/punctuation/index.js +1 -1
  374. package/src/punctuation/rules/index.js +2 -2
  375. package/src/{punctuation.spec.js → punctuation.test.js} +12 -13
  376. package/src/punctuation2.js +4 -4
  377. package/src/{punctuation2.spec.js → punctuation2.test.js} +12 -13
  378. package/src/reindexSubfield6OccurenceNumbers.js +5 -7
  379. package/src/{reindexSubfield6OccurenceNumbers.spec.js → reindexSubfield6OccurenceNumbers.test.js} +12 -13
  380. package/src/removeDuplicateDataFields.js +11 -19
  381. package/src/{removeDuplicateDataFields.spec.js → removeDuplicateDataFields.test.js} +12 -13
  382. package/src/removeInferiorDataFields.js +11 -11
  383. package/src/{removeInferiorDataFields.spec.js → removeInferiorDataFields.test.js} +13 -13
  384. package/src/resolvable-ext-references-melinda.js +1 -1
  385. package/src/{resolvable-ext-references-melinda.spec.js → resolvable-ext-references-melinda.test.js} +42 -27
  386. package/src/resolveOrphanedSubfield6s.js +5 -5
  387. package/src/{resolveOrphanedSubfield6s.spec.js → resolveOrphanedSubfield6s.test.js} +13 -13
  388. package/src/sanitize-vocabulary-source-codes.js +4 -4
  389. package/src/{sanitize-vocabulary-source-codes.spec.js → sanitize-vocabulary-source-codes.test.js} +16 -14
  390. package/src/{sort-tags.spec.js → sort-tags.test.js} +9 -11
  391. package/src/sortFields.js +4 -4
  392. package/src/{sortFields.spec.js → sortFields.test.js} +12 -13
  393. package/src/sortRelatorTerms.js +3 -3
  394. package/src/{sortRelatorTerms.spec.js → sortRelatorTerms.test.js} +13 -13
  395. package/src/sortSubfields.js +1 -1
  396. package/src/{sortSubfields.spec.js → sortSubfields.test.js} +13 -13
  397. package/src/stripPunctuation.js +3 -3
  398. package/src/{stripPunctuation.spec.js → stripPunctuation.test.js} +13 -13
  399. package/src/subfield-exclusion.js +1 -1
  400. package/src/{subfield-exclusion.spec.js → subfield-exclusion.test.js} +45 -36
  401. package/src/subfield6Utils.js +6 -10
  402. package/src/subfield8Utils.js +4 -4
  403. package/src/subfieldValueNormalizations.js +3 -3
  404. package/src/{subfieldValueNormalizations.spec.js → subfieldValueNormalizations.test.js} +18 -14
  405. package/src/sync-007-and-300.js +2 -2
  406. package/src/{sync-007-and-300.spec.js → sync-007-and-300.test.js} +13 -13
  407. package/src/translate-terms.js +3 -3
  408. package/src/{translate-terms.spec.js → translate-terms.test.js} +13 -13
  409. package/src/{typeOfDate-008.spec.js → typeOfDate-008.test.js} +12 -13
  410. package/src/{unicode-decomposition.spec.js → unicode-decomposition.test.js} +10 -16
  411. package/src/update-field-540.js +2 -2
  412. package/src/{update-field-540.spec.js → update-field-540.test.js} +13 -10
  413. package/src/urn.js +2 -2
  414. package/src/{urn.spec.js → urn.test.js} +12 -13
  415. package/src/utils.js +3 -3
  416. package/test-fixtures/field-505-separators/03/expectedResult.json +3 -1
  417. package/test-fixtures/field-505-separators/03/record.json +3 -0
  418. package/test-fixtures/normalize-subfield-value/01/metadata.json +4 -1
  419. package/test-fixtures/normalize-subfield-value/01/record.json +3 -0
  420. package/test-fixtures/normalize-subfield-value/02/expectedResult.json +3 -1
  421. package/test-fixtures/normalize-subfield-value/02/metadata.json +2 -1
  422. package/test-fixtures/normalize-subfield-value/02/record.json +3 -0
  423. package/test-fixtures/sanitize-vocabulary-source-codes/f03/expectedResult.json +3 -1
  424. package/test-fixtures/sanitize-vocabulary-source-codes/f04/expectedResult.json +3 -1
  425. package/test-fixtures/sanitize-vocabulary-source-codes/v04/metadata.json +1 -4
  426. package/test-fixtures/sanitize-vocabulary-source-codes/v04/record.json +1 -1
  427. package/dist/access-rights.spec.js +0 -195
  428. package/dist/access-rights.spec.js.map +0 -1
  429. package/dist/addMissingField041.spec.js +0 -45
  430. package/dist/addMissingField041.spec.js.map +0 -1
  431. package/dist/addMissingField336.spec.js +0 -45
  432. package/dist/addMissingField336.spec.js.map +0 -1
  433. package/dist/addMissingField337.spec.js +0 -43
  434. package/dist/addMissingField337.spec.js.map +0 -1
  435. package/dist/addMissingField338.spec.js +0 -45
  436. package/dist/addMissingField338.spec.js.map +0 -1
  437. package/dist/cyrillux-usemarcon-replacement.spec.js +0 -45
  438. package/dist/cyrillux-usemarcon-replacement.spec.js.map +0 -1
  439. package/dist/cyrillux.spec.js +0 -46
  440. package/dist/cyrillux.spec.js.map +0 -1
  441. package/dist/disambiguateSeriesStatements.spec.js +0 -51
  442. package/dist/disambiguateSeriesStatements.spec.js.map +0 -1
  443. package/dist/double-commas.spec.js +0 -73
  444. package/dist/double-commas.spec.js.map +0 -1
  445. package/dist/duplicates-ind1.spec.js +0 -45
  446. package/dist/duplicates-ind1.spec.js.map +0 -1
  447. package/dist/empty-fields.spec.js +0 -118
  448. package/dist/empty-fields.spec.js.map +0 -1
  449. package/dist/ending-punctuation.spec.js +0 -2654
  450. package/dist/ending-punctuation.spec.js.map +0 -1
  451. package/dist/ending-whitespace.spec.js +0 -42
  452. package/dist/ending-whitespace.spec.js.map +0 -1
  453. package/dist/field-008-18-34-character-groups.spec.js +0 -51
  454. package/dist/field-008-18-34-character-groups.spec.js.map +0 -1
  455. package/dist/field-505-separators.spec.js +0 -51
  456. package/dist/field-505-separators.spec.js.map +0 -1
  457. package/dist/field-521-fix.spec.js +0 -51
  458. package/dist/field-521-fix.spec.js.map +0 -1
  459. package/dist/field-exclusion.spec.js +0 -1054
  460. package/dist/field-exclusion.spec.js.map +0 -1
  461. package/dist/field-structure.spec.js +0 -535
  462. package/dist/field-structure.spec.js.map +0 -1
  463. package/dist/fields-present.spec.js +0 -121
  464. package/dist/fields-present.spec.js.map +0 -1
  465. package/dist/fix-33X.spec.js +0 -45
  466. package/dist/fix-33X.spec.js.map +0 -1
  467. package/dist/fix-country-codes.spec.js +0 -51
  468. package/dist/fix-country-codes.spec.js.map +0 -1
  469. package/dist/fix-language-codes.spec.js +0 -44
  470. package/dist/fix-language-codes.spec.js.map +0 -1
  471. package/dist/fixRelatorTerms.spec.js +0 -51
  472. package/dist/fixRelatorTerms.spec.js.map +0 -1
  473. package/dist/fixed-fields.spec.js +0 -140
  474. package/dist/fixed-fields.spec.js.map +0 -1
  475. package/dist/identical-fields.spec.js +0 -99
  476. package/dist/identical-fields.spec.js.map +0 -1
  477. package/dist/indicator-fixes.spec.js +0 -51
  478. package/dist/indicator-fixes.spec.js.map +0 -1
  479. package/dist/isbn-issn.spec.js +0 -595
  480. package/dist/isbn-issn.spec.js.map +0 -1
  481. package/dist/item-language.spec.js +0 -306
  482. package/dist/item-language.spec.js.map +0 -1
  483. package/dist/melindaCustomMergeFields.json +0 -5120
  484. package/dist/merge-fields.spec.js +0 -51
  485. package/dist/merge-fields.spec.js.map +0 -1
  486. package/dist/mergeField500Lisapainokset.spec.js +0 -51
  487. package/dist/mergeField500Lisapainokset.spec.js.map +0 -1
  488. package/dist/mergeRelatorTermFields.spec.js +0 -51
  489. package/dist/mergeRelatorTermFields.spec.js.map +0 -1
  490. package/dist/modernize-502.spec.js +0 -49
  491. package/dist/modernize-502.spec.js.map +0 -1
  492. package/dist/multiple-subfield-0.spec.js +0 -51
  493. package/dist/multiple-subfield-0.spec.js.map +0 -1
  494. package/dist/non-breaking-space.spec.js +0 -42
  495. package/dist/non-breaking-space.spec.js.map +0 -1
  496. package/dist/normalize-dashes.spec.js +0 -51
  497. package/dist/normalize-dashes.spec.js.map +0 -1
  498. package/dist/normalize-identifiers.spec.js +0 -51
  499. package/dist/normalize-identifiers.spec.js.map +0 -1
  500. package/dist/normalize-qualifying-information.spec.js +0 -51
  501. package/dist/normalize-qualifying-information.spec.js.map +0 -1
  502. package/dist/normalize-utf8-diacritics.spec.js +0 -51
  503. package/dist/normalize-utf8-diacritics.spec.js.map +0 -1
  504. package/dist/punctuation.spec.js +0 -51
  505. package/dist/punctuation.spec.js.map +0 -1
  506. package/dist/punctuation2.spec.js +0 -51
  507. package/dist/punctuation2.spec.js.map +0 -1
  508. package/dist/reindexSubfield6OccurenceNumbers.spec.js +0 -51
  509. package/dist/reindexSubfield6OccurenceNumbers.spec.js.map +0 -1
  510. package/dist/removeDuplicateDataFields.spec.js +0 -51
  511. package/dist/removeDuplicateDataFields.spec.js.map +0 -1
  512. package/dist/removeInferiorDataFields.spec.js +0 -51
  513. package/dist/removeInferiorDataFields.spec.js.map +0 -1
  514. package/dist/resolvable-ext-references-melinda.spec.js +0 -166
  515. package/dist/resolvable-ext-references-melinda.spec.js.map +0 -1
  516. package/dist/resolveOrphanedSubfield6s.spec.js +0 -51
  517. package/dist/resolveOrphanedSubfield6s.spec.js.map +0 -1
  518. package/dist/sanitize-vocabulary-source-codes.spec.js +0 -51
  519. package/dist/sanitize-vocabulary-source-codes.spec.js.map +0 -1
  520. package/dist/sort-tags.spec.js +0 -207
  521. package/dist/sort-tags.spec.js.map +0 -1
  522. package/dist/sortFields.spec.js +0 -51
  523. package/dist/sortFields.spec.js.map +0 -1
  524. package/dist/sortRelatorTerms.spec.js +0 -51
  525. package/dist/sortRelatorTerms.spec.js.map +0 -1
  526. package/dist/sortSubfields.spec.js +0 -52
  527. package/dist/sortSubfields.spec.js.map +0 -1
  528. package/dist/stripPunctuation.spec.js +0 -51
  529. package/dist/stripPunctuation.spec.js.map +0 -1
  530. package/dist/subfield-exclusion.spec.js +0 -523
  531. package/dist/subfield-exclusion.spec.js.map +0 -1
  532. package/dist/subfieldValueNormalizations.spec.js +0 -51
  533. package/dist/subfieldValueNormalizations.spec.js.map +0 -1
  534. package/dist/sync-007-and-300.spec.js +0 -51
  535. package/dist/sync-007-and-300.spec.js.map +0 -1
  536. package/dist/translate-terms.spec.js +0 -51
  537. package/dist/translate-terms.spec.js.map +0 -1
  538. package/dist/typeOfDate-008.spec.js +0 -47
  539. package/dist/typeOfDate-008.spec.js.map +0 -1
  540. package/dist/unicode-decomposition.spec.js +0 -91
  541. package/dist/unicode-decomposition.spec.js.map +0 -1
  542. package/dist/update-field-540.spec.js +0 -51
  543. package/dist/update-field-540.spec.js.map +0 -1
  544. package/dist/urn.spec.js +0 -52
  545. package/dist/urn.spec.js.map +0 -1
  546. package/src/cyrillux-usemarcon-replacement.spec.js +0 -47
@@ -1,595 +0,0 @@
1
- "use strict";
2
-
3
- var _chai = require("chai");
4
- var _marcRecord = require("@natlibfi/marc-record");
5
- var _isbnIssn = _interopRequireDefault(require("../src/isbn-issn"));
6
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
7
- describe('isbn-issn', () => {
8
- it('Creates a validator', async () => {
9
- const validator = await (0, _isbnIssn.default)();
10
- (0, _chai.expect)(validator).to.be.an('object').that.has.any.keys('description', 'validate');
11
- (0, _chai.expect)(validator.description).to.be.a('string');
12
- (0, _chai.expect)(validator.validate).to.be.a('function');
13
- });
14
- describe('#validate', () => {
15
- it('Finds the record valid', async () => {
16
- const validator = await (0, _isbnIssn.default)({
17
- hyphenateISBN: true
18
- });
19
- const record = new _marcRecord.MarcRecord({
20
- fields: [{
21
- tag: '020',
22
- ind1: ' ',
23
- ind2: ' ',
24
- subfields: [{
25
- code: 'a',
26
- value: '978-600-377-017-1'
27
- }]
28
- }, {
29
- tag: '020',
30
- ind1: ' ',
31
- ind2: ' ',
32
- subfields: [{
33
- code: 'a',
34
- value: '90-6831-372-X'
35
- }]
36
- }, {
37
- tag: '020',
38
- ind1: ' ',
39
- ind2: ' ',
40
- subfields: [{
41
- code: 'z',
42
- value: '978-600-377-017-1'
43
- }]
44
- }, {
45
- tag: '022',
46
- ind1: ' ',
47
- ind2: ' ',
48
- subfields: [{
49
- code: 'a',
50
- value: '0355-0893'
51
- }]
52
- }]
53
- });
54
- const result = await validator.validate(record);
55
- (0, _chai.expect)(result).to.eql({
56
- valid: true
57
- });
58
- });
59
- it('Finds the record invalid', async () => {
60
- const validator = await (0, _isbnIssn.default)();
61
- const record = new _marcRecord.MarcRecord({
62
- fields: [{
63
- tag: '020',
64
- ind1: ' ',
65
- ind2: ' ',
66
- subfields: [{
67
- code: 'a',
68
- value: 'foo'
69
- }]
70
- }, {
71
- tag: '020',
72
- ind1: ' ',
73
- ind2: ' ',
74
- subfields: [{
75
- code: 'a',
76
- value: '90-68-31-372-X'
77
- }] // contains an extra hyphen
78
- }, {
79
- tag: '022',
80
- ind1: ' ',
81
- ind2: ' ',
82
- subfields: [{
83
- code: 'a',
84
- value: 'bar'
85
- }]
86
- }]
87
- });
88
- const result = await validator.validate(record);
89
- (0, _chai.expect)(result).to.eql({
90
- valid: false,
91
- messages: ['ISBN (foo) is not valid', 'ISSN (bar) is not valid']
92
- });
93
- });
94
- it('020 field without $a and $z is ok in this context (= no invalid ISBNs)', async () => {
95
- const validator = await (0, _isbnIssn.default)();
96
- const record = new _marcRecord.MarcRecord({
97
- fields: [{
98
- tag: '020',
99
- ind1: ' ',
100
- ind2: ' ',
101
- subfields: [{
102
- code: 'q',
103
- value: 'nidottu'
104
- }]
105
- }]
106
- });
107
- const result = await validator.validate(record);
108
- (0, _chai.expect)(result).to.eql({
109
- valid: true
110
- });
111
- });
112
- it('Finds the invalid 022 field', async () => {
113
- const validator = await (0, _isbnIssn.default)();
114
- const record = new _marcRecord.MarcRecord({
115
- fields: [{
116
- tag: '022',
117
- ind1: ' ',
118
- ind2: ' ',
119
- subfields: [{
120
- code: 'z',
121
- value: '0000-0000'
122
- }]
123
- }]
124
- });
125
- const result = await validator.validate(record);
126
- (0, _chai.expect)(result).to.eql({
127
- valid: false,
128
- messages: ['ISSN (undefined) is not valid']
129
- });
130
- });
131
- it('Finds the record invalid (reason: multiword)', async () => {
132
- const validator = await (0, _isbnIssn.default)();
133
- const record = new _marcRecord.MarcRecord({
134
- fields: [{
135
- tag: '020',
136
- ind1: ' ',
137
- ind2: ' ',
138
- subfields: [{
139
- code: 'a',
140
- value: '978-600-377-017-1 (nid.)'
141
- }]
142
- }]
143
- });
144
- const result = await validator.validate(record);
145
- (0, _chai.expect)(result).to.eql({
146
- valid: false,
147
- messages: ['ISBN (978-600-377-017-1 (nid.)) is not valid']
148
- });
149
- });
150
- it('Finds the record invalid (ISSN in \'l\'-subfield)', async () => {
151
- const validator = await (0, _isbnIssn.default)();
152
- const record = new _marcRecord.MarcRecord({
153
- fields: [{
154
- tag: '020',
155
- ind1: ' ',
156
- ind2: ' ',
157
- subfields: [{
158
- code: 'a',
159
- value: 'foo'
160
- }]
161
- }, {
162
- tag: '022',
163
- ind1: ' ',
164
- ind2: ' ',
165
- subfields: [{
166
- code: 'l',
167
- value: 'bar'
168
- }]
169
- }]
170
- });
171
- const result = await validator.validate(record);
172
- (0, _chai.expect)(result).to.eql({
173
- valid: false,
174
- messages: ['ISBN (foo) is not valid', 'ISSN (bar) is not valid']
175
- });
176
- });
177
- it('Finds the record invalid (valid ISBN without hyphens)', async () => {
178
- const validator = await (0, _isbnIssn.default)({
179
- hyphenateISBN: true
180
- });
181
- const record = new _marcRecord.MarcRecord({
182
- fields: [{
183
- tag: '020',
184
- ind1: ' ',
185
- ind2: ' ',
186
- subfields: [{
187
- code: 'a',
188
- value: '9789519155470'
189
- }]
190
- }, {
191
- tag: '020',
192
- ind1: ' ',
193
- ind2: ' ',
194
- subfields: [{
195
- code: 'a',
196
- value: '9068-31-372-X'
197
- }] // legal digits, but bad hyphenation
198
- }, {
199
- tag: '020',
200
- ind1: ' ',
201
- ind2: ' ',
202
- subfields: [{
203
- code: 'a',
204
- value: '386006004X'
205
- }]
206
- }]
207
- });
208
- const result = await validator.validate(record);
209
- (0, _chai.expect)(result).to.eql({
210
- valid: false,
211
- messages: ['ISBN (9789519155470) is not valid', 'ISBN (9068-31-372-X) is not valid', 'ISBN (386006004X) is not valid']
212
- });
213
- });
214
- it.skip('Finds the record invalid (Missing ISBN)');
215
- it.skip('Finds the record invalid (Missing ISSN)');
216
- });
217
- describe('#fix', () => {
218
- it('Moves invalid ISBN to z-subfield', async () => {
219
- const validator = await (0, _isbnIssn.default)({
220
- handleInvalid: true
221
- });
222
- const record = new _marcRecord.MarcRecord({
223
- fields: [{
224
- tag: '020',
225
- ind1: ' ',
226
- ind2: ' ',
227
- subfields: [{
228
- code: 'a',
229
- value: 'foo'
230
- }]
231
- }, {
232
- tag: '020',
233
- ind1: ' ',
234
- ind2: ' ',
235
- subfields: [{
236
- code: 'a',
237
- value: 'crappy val'
238
- }]
239
- }, {
240
- tag: '020',
241
- ind1: ' ',
242
- ind2: ' ',
243
- subfields: [{
244
- code: 'a',
245
- value: '97895234216609'
246
- }]
247
- },
248
- // Just a sanity check due to earlier issues:
249
- {
250
- tag: '020',
251
- ind1: ' ',
252
- ind2: ' ',
253
- subfields: [{
254
- code: 'z',
255
- value: '97895234216609'
256
- }]
257
- }]
258
- });
259
- await validator.fix(record);
260
- (0, _chai.expect)(record.fields).to.eql([{
261
- tag: '020',
262
- ind1: ' ',
263
- ind2: ' ',
264
- subfields: [{
265
- code: 'z',
266
- value: 'foo'
267
- }]
268
- }, {
269
- tag: '020',
270
- ind1: ' ',
271
- ind2: ' ',
272
- subfields: [{
273
- code: 'z',
274
- value: 'crappy val'
275
- }]
276
- }, {
277
- tag: '020',
278
- ind1: ' ',
279
- ind2: ' ',
280
- subfields: [{
281
- code: 'z',
282
- value: '97895234216609'
283
- }]
284
- }, {
285
- tag: '020',
286
- ind1: ' ',
287
- ind2: ' ',
288
- subfields: [{
289
- code: 'z',
290
- value: '97895234216609'
291
- }]
292
- }]);
293
- });
294
- it('Moves invalid ISSN to y-subfield', async () => {
295
- const validator = await (0, _isbnIssn.default)({
296
- handleInvalid: true
297
- });
298
- const record = new _marcRecord.MarcRecord({
299
- fields: [{
300
- tag: '022',
301
- ind1: ' ',
302
- ind2: ' ',
303
- subfields: [{
304
- code: 'a',
305
- value: 'foo'
306
- }]
307
- }]
308
- });
309
- await validator.fix(record);
310
- (0, _chai.expect)(record.fields).to.eql([{
311
- tag: '022',
312
- ind1: ' ',
313
- ind2: ' ',
314
- subfields: [{
315
- code: 'y',
316
- value: 'foo'
317
- }]
318
- }]);
319
- });
320
- it('Moves invalid ISSN to y-subfield (Origin l-subfield)', async () => {
321
- const validator = await (0, _isbnIssn.default)({
322
- handleInvalid: true
323
- });
324
- const record = new _marcRecord.MarcRecord({
325
- fields: [{
326
- tag: '022',
327
- ind1: ' ',
328
- ind2: ' ',
329
- subfields: [{
330
- code: 'l',
331
- value: 'foo'
332
- }]
333
- }]
334
- });
335
- await validator.fix(record);
336
- (0, _chai.expect)(record.fields).to.eql([{
337
- tag: '022',
338
- ind1: ' ',
339
- ind2: ' ',
340
- subfields: [{
341
- code: 'y',
342
- value: 'foo'
343
- }]
344
- }]);
345
- });
346
- it('Trims spaces from value (No hyphenate)', async () => {
347
- const validator = await (0, _isbnIssn.default)();
348
- const record = new _marcRecord.MarcRecord({
349
- fields: [{
350
- tag: '020',
351
- ind1: ' ',
352
- ind2: ' ',
353
- subfields: [{
354
- code: 'a',
355
- value: ' 9786003770171'
356
- }]
357
- }, {
358
- tag: '020',
359
- ind1: ' ',
360
- ind2: ' ',
361
- subfields: [{
362
- code: 'a',
363
- value: '9786003770171 (nidottu)'
364
- }]
365
- }]
366
- });
367
- await validator.fix(record);
368
- (0, _chai.expect)(record.fields).to.eql([
369
- // NB! Initial space does not need to be removed. It's crap, but not this fixer's crap.
370
- {
371
- tag: '020',
372
- ind1: ' ',
373
- ind2: ' ',
374
- subfields: [{
375
- code: 'a',
376
- value: ' 9786003770171'
377
- }]
378
- }, {
379
- tag: '020',
380
- ind1: ' ',
381
- ind2: ' ',
382
- subfields: [{
383
- code: 'a',
384
- value: '9786003770171'
385
- }, {
386
- code: 'q',
387
- value: '(nidottu)'
388
- }]
389
- }]);
390
- });
391
- it('Trims spaces and hyphenates value', async () => {
392
- const validator = await (0, _isbnIssn.default)({
393
- hyphenateISBN: true
394
- });
395
- const record = new _marcRecord.MarcRecord({
396
- fields: [{
397
- tag: '020',
398
- ind1: ' ',
399
- ind2: ' ',
400
- subfields: [{
401
- code: 'a',
402
- value: '9786003770171 (nid.)'
403
- }, {
404
- code: 'z',
405
- value: '9786003770171 (nid.)'
406
- }, {
407
- code: 'z',
408
- value: 'foo bar'
409
- }]
410
- }]
411
- });
412
- await validator.fix(record);
413
- (0, _chai.expect)(record.fields).to.eql([{
414
- tag: '020',
415
- ind1: ' ',
416
- ind2: ' ',
417
- subfields: [{
418
- code: 'a',
419
- value: '978-600-377-017-1'
420
- }, {
421
- code: 'z',
422
- value: '978-600-377-017-1'
423
- }, {
424
- code: 'z',
425
- value: 'foo bar'
426
- },
427
- // NB! Technically $q should come before $z subfields, but this is good enough.
428
- {
429
- code: 'q',
430
- value: '(nid.)'
431
- }]
432
- }]);
433
- });
434
- it('No relevant data', async () => {
435
- const validator = await (0, _isbnIssn.default)({
436
- hyphenateISBN: true
437
- });
438
- const record = new _marcRecord.MarcRecord({
439
- fields: [{
440
- tag: '005',
441
- value: 'whatever'
442
- }, {
443
- tag: '020',
444
- ind1: ' ',
445
- ind2: ' ',
446
- subfields: [{
447
- code: 'q',
448
- value: 'sidottu'
449
- }]
450
- }, {
451
- tag: '024',
452
- ind1: ' ',
453
- ind2: ' ',
454
- subfields: [{
455
- code: 'a',
456
- value: ' 9786003770171'
457
- }]
458
- }]
459
- });
460
- await validator.fix(record);
461
- (0, _chai.expect)(record.fields).to.eql([{
462
- tag: '005',
463
- value: 'whatever'
464
- }, {
465
- tag: '020',
466
- ind1: ' ',
467
- ind2: ' ',
468
- subfields: [{
469
- code: 'q',
470
- value: 'sidottu'
471
- }]
472
- }, {
473
- tag: '024',
474
- ind1: ' ',
475
- ind2: ' ',
476
- subfields: [{
477
- code: 'a',
478
- value: ' 9786003770171'
479
- }]
480
- }]);
481
- });
482
- it('Add hyphens to ISBN', async () => {
483
- const validator = await (0, _isbnIssn.default)({
484
- hyphenateISBN: true
485
- });
486
- const record = new _marcRecord.MarcRecord({
487
- fields: [{
488
- tag: '020',
489
- ind1: ' ',
490
- ind2: ' ',
491
- subfields: [{
492
- code: 'a',
493
- value: '9789916605325'
494
- }]
495
- }, {
496
- tag: '020',
497
- ind1: ' ',
498
- ind2: ' ',
499
- subfields: [{
500
- code: 'a',
501
- value: '917153086X'
502
- }]
503
- }, {
504
- tag: '020',
505
- ind1: ' ',
506
- ind2: ' ',
507
- subfields: [{
508
- code: 'a',
509
- value: '9068-31-372-X'
510
- }] // legal digits, but bad hyphenation
511
- }, {
512
- tag: '020',
513
- ind1: ' ',
514
- ind2: ' ',
515
- subfields: [{
516
- code: 'a',
517
- value: '386006004X (nid.)'
518
- }]
519
- }, {
520
- tag: '020',
521
- ind1: ' ',
522
- ind2: ' ',
523
- subfields: [{
524
- code: 'z',
525
- value: '9789916605325'
526
- }]
527
- }, {
528
- tag: '020',
529
- ind1: ' ',
530
- ind2: ' ',
531
- subfields: [{
532
- code: 'z',
533
- value: '9789916605325 (sid.)'
534
- }]
535
- }]
536
- });
537
- await validator.fix(record);
538
- (0, _chai.expect)(record.fields).to.eql([{
539
- tag: '020',
540
- ind1: ' ',
541
- ind2: ' ',
542
- subfields: [{
543
- code: 'a',
544
- value: '978-9916-605-32-5'
545
- }]
546
- }, {
547
- tag: '020',
548
- ind1: ' ',
549
- ind2: ' ',
550
- subfields: [{
551
- code: 'a',
552
- value: '91-7153-086-X'
553
- }]
554
- }, {
555
- tag: '020',
556
- ind1: ' ',
557
- ind2: ' ',
558
- subfields: [{
559
- code: 'a',
560
- value: '90-6831-372-X'
561
- }]
562
- },
563
- // corrected hyphens
564
- {
565
- tag: '020',
566
- ind1: ' ',
567
- ind2: ' ',
568
- subfields: [{
569
- code: 'a',
570
- value: '3-86006-004-X'
571
- }, {
572
- code: 'q',
573
- value: '(nid.)'
574
- }]
575
- }, {
576
- tag: '020',
577
- ind1: ' ',
578
- ind2: ' ',
579
- subfields: [{
580
- code: 'z',
581
- value: '978-9916-605-32-5'
582
- }]
583
- }, {
584
- tag: '020',
585
- ind1: ' ',
586
- ind2: ' ',
587
- subfields: [{
588
- code: 'z',
589
- value: '978-9916-605-32-5'
590
- }]
591
- }]);
592
- });
593
- });
594
- });
595
- //# sourceMappingURL=isbn-issn.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"isbn-issn.spec.js","names":["_chai","require","_marcRecord","_isbnIssn","_interopRequireDefault","e","__esModule","default","describe","it","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","hyphenateISBN","record","MarcRecord","fields","tag","ind1","ind2","subfields","code","value","result","eql","valid","messages","skip","handleInvalid","fix"],"sources":["../src/isbn-issn.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/isbn-issn';\n\ndescribe('isbn-issn', () => {\n it('Creates a validator', async () => {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n });\n\n describe('#validate', () => {\n it('Finds the record valid', async () => {\n const validator = await validatorFactory({hyphenateISBN: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '978-600-377-017-1'}]\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '90-6831-372-X'}]\n },\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '978-600-377-017-1'}]},\n {\n tag: '022',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '0355-0893'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true});\n });\n\n it('Finds the record invalid', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'foo'}]\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '90-68-31-372-X'}] // contains an extra hyphen\n },\n {\n tag: '022',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'bar'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({\n valid: false, messages: [\n 'ISBN (foo) is not valid',\n 'ISSN (bar) is not valid'\n ]\n });\n });\n\n it('020 field without $a and $z is ok in this context (= no invalid ISBNs)', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'q', value: 'nidottu'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({\n valid: true\n });\n });\n\n it('Finds the invalid 022 field', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '022',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'z', value: '0000-0000'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({\n valid: false, messages: ['ISSN (undefined) is not valid']\n });\n });\n\n it('Finds the record invalid (reason: multiword)', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '978-600-377-017-1 (nid.)'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false, messages: ['ISBN (978-600-377-017-1 (nid.)) is not valid']});\n });\n\n it('Finds the record invalid (ISSN in \\'l\\'-subfield)', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'foo'}]\n },\n {\n tag: '022',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'l', value: 'bar'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({\n valid: false, messages: [\n 'ISBN (foo) is not valid',\n 'ISSN (bar) is not valid'\n ]\n });\n });\n\n it('Finds the record invalid (valid ISBN without hyphens)', async () => {\n const validator = await validatorFactory({hyphenateISBN: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '9789519155470'}]\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '9068-31-372-X'}] // legal digits, but bad hyphenation\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '386006004X'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false, messages: [\n 'ISBN (9789519155470) is not valid',\n 'ISBN (9068-31-372-X) is not valid',\n 'ISBN (386006004X) is not valid'\n ]});\n });\n\n it.skip('Finds the record invalid (Missing ISBN)');\n it.skip('Finds the record invalid (Missing ISSN)');\n });\n\n describe('#fix', () => {\n it('Moves invalid ISBN to z-subfield', async () => {\n const validator = await validatorFactory({handleInvalid: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '020', ind1: ' ', ind2: ' ',\n subfields: [{code: 'a', value: 'foo'}]\n },\n {\n tag: '020', ind1: ' ', ind2: ' ',\n subfields: [{code: 'a', value: 'crappy val'}]\n },\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: '97895234216609'}]},\n // Just a sanity check due to earlier issues:\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '97895234216609'}]}\n ]\n });\n\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: 'foo'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: 'crappy val'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '97895234216609'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '97895234216609'}]}\n ]);\n });\n\n it('Moves invalid ISSN to y-subfield', async () => {\n const validator = await validatorFactory({handleInvalid: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '022', ind1: ' ', ind2: ' ',\n subfields: [{code: 'a', value: 'foo'}]\n }\n ]\n });\n\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '022', ind1: ' ', ind2: ' ', subfields: [{code: 'y', value: 'foo'}]\n }\n ]);\n });\n\n it('Moves invalid ISSN to y-subfield (Origin l-subfield)', async () => {\n const validator = await validatorFactory({handleInvalid: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '022', ind1: ' ', ind2: ' ',\n subfields: [{code: 'l', value: 'foo'}]\n }\n ]\n });\n\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '022', ind1: ' ', ind2: ' ', subfields: [{code: 'y', value: 'foo'}]\n }\n ]);\n });\n\n it('Trims spaces from value (No hyphenate)', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: ' 9786003770171'}]\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '9786003770171 (nidottu)'}]\n }\n ]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n // NB! Initial space does not need to be removed. It's crap, but not this fixer's crap.\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: ' 9786003770171'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: '9786003770171'}, {code: 'q', value: '(nidottu)'}]}\n ]);\n });\n\n it('Trims spaces and hyphenates value', async () => {\n const validator = await validatorFactory({hyphenateISBN: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: '9786003770171 (nid.)'},\n {code: 'z', value: '9786003770171 (nid.)'},\n {code: 'z', value: 'foo bar'}\n ]\n }\n ]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: '978-600-377-017-1'},\n {code: 'z', value: '978-600-377-017-1'},\n {code: 'z', value: 'foo bar'},\n // NB! Technically $q should come before $z subfields, but this is good enough.\n {code: 'q', value: '(nid.)'}\n ]\n }\n ]);\n });\n\n it('No relevant data', async () => {\n const validator = await validatorFactory({hyphenateISBN: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '005',\n value: 'whatever'\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'q', value: 'sidottu'}]\n },\n {\n tag: '024',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: ' 9786003770171'}]\n }\n ]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {tag: '005', value: 'whatever'},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'q', value: 'sidottu'}]},\n {tag: '024', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: ' 9786003770171'}]}\n ]);\n });\n\n it('Add hyphens to ISBN', async () => {\n const validator = await validatorFactory({hyphenateISBN: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '020', ind1: ' ', ind2: ' ',\n subfields: [{code: 'a', value: '9789916605325'}]\n },\n {\n tag: '020', ind1: ' ', ind2: ' ',\n subfields: [{code: 'a', value: '917153086X'}]\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '9068-31-372-X'}] // legal digits, but bad hyphenation\n },\n {\n tag: '020', ind1: ' ', ind2: ' ',\n subfields: [{code: 'a', value: '386006004X (nid.)'}]\n },\n {\n tag: '020', ind1: ' ', ind2: ' ',\n subfields: [{code: 'z', value: '9789916605325'}]\n },\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '9789916605325 (sid.)'}]}\n ]\n });\n\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: '978-9916-605-32-5'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: '91-7153-086-X'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: '90-6831-372-X'}]}, // corrected hyphens\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: '3-86006-004-X'}, {code: 'q', value: '(nid.)'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '978-9916-605-32-5'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '978-9916-605-32-5'}]}\n ]);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}