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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (563) hide show
  1. package/.github/workflows/{melinda-node-tests.yml → melinda-node-tests-and-publish.yml} +37 -12
  2. package/dist/access-rights.js +63 -91
  3. package/dist/access-rights.js.map +7 -1
  4. package/dist/access-rights.test.js +137 -0
  5. package/dist/access-rights.test.js.map +7 -0
  6. package/dist/addMissingField041.js +21 -53
  7. package/dist/addMissingField041.js.map +7 -1
  8. package/dist/addMissingField041.test.js +39 -0
  9. package/dist/addMissingField041.test.js.map +7 -0
  10. package/dist/addMissingField336.js +99 -191
  11. package/dist/addMissingField336.js.map +7 -1
  12. package/dist/addMissingField336.test.js +39 -0
  13. package/dist/addMissingField336.test.js.map +7 -0
  14. package/dist/addMissingField337.js +63 -132
  15. package/dist/addMissingField337.js.map +7 -1
  16. package/dist/addMissingField337.test.js +39 -0
  17. package/dist/addMissingField337.test.js.map +7 -0
  18. package/dist/addMissingField338.js +147 -253
  19. package/dist/addMissingField338.js.map +7 -1
  20. package/dist/addMissingField338.test.js +39 -0
  21. package/dist/addMissingField338.test.js.map +7 -0
  22. package/dist/cyrillux-usemarcon-replacement.js +119 -272
  23. package/dist/cyrillux-usemarcon-replacement.js.map +7 -1
  24. package/dist/cyrillux-usemarcon-replacement.test.js +43 -0
  25. package/dist/cyrillux-usemarcon-replacement.test.js.map +7 -0
  26. package/dist/cyrillux.js +119 -223
  27. package/dist/cyrillux.js.map +7 -1
  28. package/dist/cyrillux.test.js +39 -0
  29. package/dist/cyrillux.test.js.map +7 -0
  30. package/dist/disambiguateSeriesStatements.js +40 -81
  31. package/dist/disambiguateSeriesStatements.js.map +7 -1
  32. package/dist/disambiguateSeriesStatements.test.js +44 -0
  33. package/dist/disambiguateSeriesStatements.test.js.map +7 -0
  34. package/dist/double-commas.js +7 -14
  35. package/dist/double-commas.js.map +7 -1
  36. package/dist/double-commas.test.js +48 -0
  37. package/dist/double-commas.test.js.map +7 -0
  38. package/dist/duplicates-ind1.js +10 -31
  39. package/dist/duplicates-ind1.js.map +7 -1
  40. package/dist/duplicates-ind1.test.js +40 -0
  41. package/dist/duplicates-ind1.test.js.map +7 -0
  42. package/dist/empty-fields.js +10 -22
  43. package/dist/empty-fields.js.map +7 -1
  44. package/dist/empty-fields.test.js +129 -0
  45. package/dist/empty-fields.test.js.map +7 -0
  46. package/dist/ending-punctuation-conf.js +873 -769
  47. package/dist/ending-punctuation-conf.js.map +7 -1
  48. package/dist/ending-punctuation.js +156 -169
  49. package/dist/ending-punctuation.js.map +7 -1
  50. package/dist/ending-punctuation.test.js +2385 -0
  51. package/dist/ending-punctuation.test.js.map +7 -0
  52. package/dist/ending-whitespace.js +10 -35
  53. package/dist/ending-whitespace.js.map +7 -1
  54. package/dist/ending-whitespace.test.js +38 -0
  55. package/dist/ending-whitespace.test.js.map +7 -0
  56. package/dist/field-008-18-34-character-groups.js +40 -125
  57. package/dist/field-008-18-34-character-groups.js.map +7 -1
  58. package/dist/field-008-18-34-character-groups.test.js +45 -0
  59. package/dist/field-008-18-34-character-groups.test.js.map +7 -0
  60. package/dist/field-505-separators.js +19 -39
  61. package/dist/field-505-separators.js.map +7 -1
  62. package/dist/field-505-separators.test.js +45 -0
  63. package/dist/field-505-separators.test.js.map +7 -0
  64. package/dist/field-521-fix.js +19 -47
  65. package/dist/field-521-fix.js.map +7 -1
  66. package/dist/field-521-fix.test.js +44 -0
  67. package/dist/field-521-fix.test.js.map +7 -0
  68. package/dist/field-exclusion.js +37 -91
  69. package/dist/field-exclusion.js.map +7 -1
  70. package/dist/field-exclusion.test.js +821 -0
  71. package/dist/field-exclusion.test.js.map +7 -0
  72. package/dist/field-structure.js +52 -104
  73. package/dist/field-structure.js.map +7 -1
  74. package/dist/field-structure.test.js +587 -0
  75. package/dist/field-structure.test.js.map +7 -0
  76. package/dist/field33XUtils.js +119 -503
  77. package/dist/field33XUtils.js.map +7 -1
  78. package/dist/fields-present.js +11 -23
  79. package/dist/fields-present.js.map +7 -1
  80. package/dist/fields-present.test.js +95 -0
  81. package/dist/fields-present.test.js.map +7 -0
  82. package/dist/fix-33X.js +393 -431
  83. package/dist/fix-33X.js.map +7 -1
  84. package/dist/fix-33X.test.js +39 -0
  85. package/dist/fix-33X.test.js.map +7 -0
  86. package/dist/fix-country-codes.js +20 -50
  87. package/dist/fix-country-codes.js.map +7 -1
  88. package/dist/fix-country-codes.test.js +44 -0
  89. package/dist/fix-country-codes.test.js.map +7 -0
  90. package/dist/fix-language-codes.js +23 -53
  91. package/dist/fix-language-codes.js.map +7 -1
  92. package/dist/fix-language-codes.test.js +38 -0
  93. package/dist/fix-language-codes.test.js.map +7 -0
  94. package/dist/fixRelatorTerms.js +82 -209
  95. package/dist/fixRelatorTerms.js.map +7 -1
  96. package/dist/fixRelatorTerms.test.js +44 -0
  97. package/dist/fixRelatorTerms.test.js.map +7 -0
  98. package/dist/fixed-fields.js +21 -30
  99. package/dist/fixed-fields.js.map +7 -1
  100. package/dist/fixed-fields.test.js +87 -0
  101. package/dist/fixed-fields.test.js.map +7 -0
  102. package/dist/identical-fields.js +8 -24
  103. package/dist/identical-fields.js.map +7 -1
  104. package/dist/identical-fields.test.js +119 -0
  105. package/dist/identical-fields.test.js.map +7 -0
  106. package/dist/index.js +182 -413
  107. package/dist/index.js.map +7 -1
  108. package/dist/indicator-fixes.js +66 -94
  109. package/dist/indicator-fixes.js.map +7 -1
  110. package/dist/indicator-fixes.test.js +42 -0
  111. package/dist/indicator-fixes.test.js.map +7 -0
  112. package/dist/isbn-issn.js +71 -128
  113. package/dist/isbn-issn.js.map +7 -1
  114. package/dist/isbn-issn.test.js +398 -0
  115. package/dist/isbn-issn.test.js.map +7 -0
  116. package/dist/item-language.js +32 -65
  117. package/dist/item-language.js.map +7 -1
  118. package/dist/item-language.test.js +322 -0
  119. package/dist/item-language.test.js.map +7 -0
  120. package/dist/melindaCustomMergeFields.js +5182 -11233
  121. package/dist/melindaCustomMergeFields.js.map +7 -1
  122. package/dist/merge-fields/controlSubfields.js +75 -142
  123. package/dist/merge-fields/controlSubfields.js.map +7 -1
  124. package/dist/merge-fields/counterpartField.js +187 -379
  125. package/dist/merge-fields/counterpartField.js.map +7 -1
  126. package/dist/merge-fields/dataProvenance.js +29 -0
  127. package/dist/merge-fields/dataProvenance.js.map +7 -0
  128. package/dist/merge-fields/index.js +25 -50
  129. package/dist/merge-fields/index.js.map +7 -1
  130. package/dist/merge-fields/mergableIndicator.js +18 -51
  131. package/dist/merge-fields/mergableIndicator.js.map +7 -1
  132. package/dist/merge-fields/mergableTag.js +78 -30
  133. package/dist/merge-fields/mergableTag.js.map +7 -1
  134. package/dist/merge-fields/mergeConfig.js +66 -171
  135. package/dist/merge-fields/mergeConfig.js.map +7 -1
  136. package/dist/merge-fields/mergeConstraints.js +323 -1214
  137. package/dist/merge-fields/mergeConstraints.js.map +7 -1
  138. package/dist/merge-fields/mergeField.js +47 -111
  139. package/dist/merge-fields/mergeField.js.map +7 -1
  140. package/dist/merge-fields/mergeIndicator.js +64 -118
  141. package/dist/merge-fields/mergeIndicator.js.map +7 -1
  142. package/dist/merge-fields/mergeOrAddPostprocess.js +14 -38
  143. package/dist/merge-fields/mergeOrAddPostprocess.js.map +7 -1
  144. package/dist/merge-fields/mergeOrAddSubfield.js +62 -104
  145. package/dist/merge-fields/mergeOrAddSubfield.js.map +7 -1
  146. package/dist/merge-fields/mergeSubfield.js +47 -95
  147. package/dist/merge-fields/mergeSubfield.js.map +7 -1
  148. package/dist/merge-fields/removeDuplicateSubfields.js +18 -31
  149. package/dist/merge-fields/removeDuplicateSubfields.js.map +7 -1
  150. package/dist/merge-fields/worldKnowledge.js +15 -40
  151. package/dist/merge-fields/worldKnowledge.js.map +7 -1
  152. package/dist/merge-fields.test.js +46 -0
  153. package/dist/merge-fields.test.js.map +7 -0
  154. package/dist/mergeField500Lisapainokset.js +27 -56
  155. package/dist/mergeField500Lisapainokset.js.map +7 -1
  156. package/dist/mergeField500Lisapainokset.test.js +44 -0
  157. package/dist/mergeField500Lisapainokset.test.js.map +7 -0
  158. package/dist/mergeRelatorTermFields.js +33 -69
  159. package/dist/mergeRelatorTermFields.js.map +7 -1
  160. package/dist/mergeRelatorTermFields.test.js +44 -0
  161. package/dist/mergeRelatorTermFields.test.js.map +7 -0
  162. package/dist/modernize-502.js +23 -55
  163. package/dist/modernize-502.js.map +7 -1
  164. package/dist/modernize-502.test.js +38 -0
  165. package/dist/modernize-502.test.js.map +7 -0
  166. package/dist/multiple-subfield-0.js +23 -48
  167. package/dist/multiple-subfield-0.js.map +7 -1
  168. package/dist/multiple-subfield-0.test.js +44 -0
  169. package/dist/multiple-subfield-0.test.js.map +7 -0
  170. package/dist/non-breaking-space.js +11 -32
  171. package/dist/non-breaking-space.js.map +7 -1
  172. package/dist/non-breaking-space.test.js +38 -0
  173. package/dist/non-breaking-space.test.js.map +7 -0
  174. package/dist/normalize-dashes.js +18 -37
  175. package/dist/normalize-dashes.js.map +7 -1
  176. package/dist/normalize-dashes.test.js +44 -0
  177. package/dist/normalize-dashes.test.js.map +7 -0
  178. package/dist/normalize-identifiers.js +54 -140
  179. package/dist/normalize-identifiers.js.map +7 -1
  180. package/dist/normalize-identifiers.test.js +44 -0
  181. package/dist/normalize-identifiers.test.js.map +7 -0
  182. package/dist/normalize-qualifying-information.js +23 -48
  183. package/dist/normalize-qualifying-information.js.map +7 -1
  184. package/dist/normalize-qualifying-information.test.js +44 -0
  185. package/dist/normalize-qualifying-information.test.js.map +7 -0
  186. package/dist/normalize-utf8-diacritics.js +19 -105
  187. package/dist/normalize-utf8-diacritics.js.map +7 -1
  188. package/dist/normalize-utf8-diacritics.test.js +44 -0
  189. package/dist/normalize-utf8-diacritics.test.js.map +7 -0
  190. package/dist/normalizeFieldForComparison.js +91 -158
  191. package/dist/normalizeFieldForComparison.js.map +7 -1
  192. package/dist/normalizeSubfieldValueForComparison.js +37 -77
  193. package/dist/normalizeSubfieldValueForComparison.js.map +7 -1
  194. package/dist/prepublicationUtils.js +58 -111
  195. package/dist/prepublicationUtils.js.map +7 -1
  196. package/dist/punctuation/index.js +56 -72
  197. package/dist/punctuation/index.js.map +7 -1
  198. package/dist/punctuation/rules/aut.js +372 -331
  199. package/dist/punctuation/rules/aut.js.map +7 -1
  200. package/dist/punctuation/rules/bib.js +420 -373
  201. package/dist/punctuation/rules/bib.js.map +7 -1
  202. package/dist/punctuation/rules/index.js +7 -21
  203. package/dist/punctuation/rules/index.js.map +7 -1
  204. package/dist/punctuation.test.js +44 -0
  205. package/dist/punctuation.test.js.map +7 -0
  206. package/dist/punctuation2.js +259 -802
  207. package/dist/punctuation2.js.map +7 -1
  208. package/dist/punctuation2.test.js +44 -0
  209. package/dist/punctuation2.test.js.map +7 -0
  210. package/dist/reindexSubfield6OccurenceNumbers.js +61 -96
  211. package/dist/reindexSubfield6OccurenceNumbers.js.map +7 -1
  212. package/dist/reindexSubfield6OccurenceNumbers.test.js +44 -0
  213. package/dist/reindexSubfield6OccurenceNumbers.test.js.map +7 -0
  214. package/dist/removeDuplicateDataFields.js +102 -202
  215. package/dist/removeDuplicateDataFields.js.map +7 -1
  216. package/dist/removeDuplicateDataFields.test.js +44 -0
  217. package/dist/removeDuplicateDataFields.test.js.map +7 -0
  218. package/dist/removeInferiorDataFields.js +104 -227
  219. package/dist/removeInferiorDataFields.js.map +7 -1
  220. package/dist/removeInferiorDataFields.test.js +44 -0
  221. package/dist/removeInferiorDataFields.test.js.map +7 -0
  222. package/dist/resolvable-ext-references-melinda.js +25 -60
  223. package/dist/resolvable-ext-references-melinda.js.map +7 -1
  224. package/dist/resolvable-ext-references-melinda.test.js +160 -0
  225. package/dist/resolvable-ext-references-melinda.test.js.map +7 -0
  226. package/dist/resolveOrphanedSubfield6s.js +32 -63
  227. package/dist/resolveOrphanedSubfield6s.js.map +7 -1
  228. package/dist/resolveOrphanedSubfield6s.test.js +44 -0
  229. package/dist/resolveOrphanedSubfield6s.test.js.map +7 -0
  230. package/dist/sanitize-vocabulary-source-codes.js +27 -55
  231. package/dist/sanitize-vocabulary-source-codes.js.map +7 -1
  232. package/dist/sanitize-vocabulary-source-codes.test.js +45 -0
  233. package/dist/sanitize-vocabulary-source-codes.test.js.map +7 -0
  234. package/dist/sort-tags.js +13 -25
  235. package/dist/sort-tags.js.map +7 -1
  236. package/dist/sort-tags.test.js +261 -0
  237. package/dist/sort-tags.test.js.map +7 -0
  238. package/dist/sortFields.js +152 -222
  239. package/dist/sortFields.js.map +7 -1
  240. package/dist/sortFields.test.js +44 -0
  241. package/dist/sortFields.test.js.map +7 -0
  242. package/dist/sortRelatorTerms.js +30 -68
  243. package/dist/sortRelatorTerms.js.map +7 -1
  244. package/dist/sortRelatorTerms.test.js +44 -0
  245. package/dist/sortRelatorTerms.test.js.map +7 -0
  246. package/dist/sortSubfields.js +102 -255
  247. package/dist/sortSubfields.js.map +7 -1
  248. package/dist/sortSubfields.test.js +44 -0
  249. package/dist/sortSubfields.test.js.map +7 -0
  250. package/dist/stripPunctuation.js +13 -36
  251. package/dist/stripPunctuation.js.map +7 -1
  252. package/dist/stripPunctuation.test.js +44 -0
  253. package/dist/stripPunctuation.test.js.map +7 -0
  254. package/dist/subfield-exclusion.js +28 -75
  255. package/dist/subfield-exclusion.js.map +7 -1
  256. package/dist/subfield-exclusion.test.js +471 -0
  257. package/dist/subfield-exclusion.test.js.map +7 -0
  258. package/dist/subfield6Utils.js +107 -269
  259. package/dist/subfield6Utils.js.map +7 -1
  260. package/dist/subfield8Utils.js +26 -50
  261. package/dist/subfield8Utils.js.map +7 -1
  262. package/dist/subfieldValueNormalizations.js +40 -74
  263. package/dist/subfieldValueNormalizations.js.map +7 -1
  264. package/dist/subfieldValueNormalizations.test.js +45 -0
  265. package/dist/subfieldValueNormalizations.test.js.map +7 -0
  266. package/dist/sync-007-and-300.js +22 -53
  267. package/dist/sync-007-and-300.js.map +7 -1
  268. package/dist/sync-007-and-300.test.js +44 -0
  269. package/dist/sync-007-and-300.test.js.map +7 -0
  270. package/dist/translate-terms.js +67 -155
  271. package/dist/translate-terms.js.map +7 -1
  272. package/dist/translate-terms.test.js +54 -0
  273. package/dist/translate-terms.test.js.map +7 -0
  274. package/dist/typeOfDate-008.js +10 -25
  275. package/dist/typeOfDate-008.js.map +7 -1
  276. package/dist/typeOfDate-008.test.js +40 -0
  277. package/dist/typeOfDate-008.test.js.map +7 -0
  278. package/dist/unicode-decomposition.js +94 -107
  279. package/dist/unicode-decomposition.js.map +7 -1
  280. package/dist/unicode-decomposition.test.js +94 -0
  281. package/dist/unicode-decomposition.test.js.map +7 -0
  282. package/dist/update-field-540.js +30 -75
  283. package/dist/update-field-540.js.map +7 -1
  284. package/dist/update-field-540.test.js +44 -0
  285. package/dist/update-field-540.test.js.map +7 -0
  286. package/dist/urn.js +55 -128
  287. package/dist/urn.js.map +7 -1
  288. package/dist/urn.test.js +44 -0
  289. package/dist/urn.test.js.map +7 -0
  290. package/dist/utils.js +78 -126
  291. package/dist/utils.js.map +7 -1
  292. package/eslint.config.mjs +1 -2
  293. package/package.json +28 -101
  294. package/src/access-rights.js +1 -1
  295. package/src/{access-rights.spec.js → access-rights.test.js} +9 -10
  296. package/src/addMissingField041.js +1 -1
  297. package/src/{addMissingField336.spec.js → addMissingField041.test.js} +13 -14
  298. package/src/addMissingField336.js +3 -3
  299. package/src/{addMissingField041.spec.js → addMissingField336.test.js} +13 -14
  300. package/src/addMissingField337.js +2 -2
  301. package/src/{addMissingField337.spec.js → addMissingField337.test.js} +13 -14
  302. package/src/addMissingField338.js +2 -2
  303. package/src/{addMissingField338.spec.js → addMissingField338.test.js} +13 -14
  304. package/src/cyrillux-usemarcon-replacement.js +18 -18
  305. package/src/{cyrillux-usemarcon-replacement.spec.js → cyrillux-usemarcon-replacement.test.js} +17 -14
  306. package/src/cyrillux.js +19 -12
  307. package/src/{cyrillux.spec.js → cyrillux.test.js} +13 -14
  308. package/src/disambiguateSeriesStatements.js +2 -2
  309. package/src/{disambiguateSeriesStatements.spec.js → disambiguateSeriesStatements.test.js} +12 -13
  310. package/src/double-commas.js +1 -1
  311. package/src/{double-commas.spec.js → double-commas.test.js} +9 -11
  312. package/src/duplicates-ind1.js +1 -1
  313. package/src/{duplicates-ind1.spec.js → duplicates-ind1.test.js} +12 -13
  314. package/src/{empty-fields.spec.js → empty-fields.test.js} +11 -13
  315. package/src/ending-punctuation-conf.js +6 -5
  316. package/src/ending-punctuation.js +115 -24
  317. package/src/{ending-punctuation.spec.js → ending-punctuation.test.js} +357 -275
  318. package/src/{ending-whitespace.spec.js → ending-whitespace.test.js} +12 -13
  319. package/src/field-008-18-34-character-groups.js +2 -2
  320. package/src/{field-008-18-34-character-groups.spec.js → field-008-18-34-character-groups.test.js} +13 -13
  321. package/src/field-505-separators.js +3 -3
  322. package/src/{field-505-separators.spec.js → field-505-separators.test.js} +16 -14
  323. package/src/field-521-fix.js +2 -2
  324. package/src/{field-521-fix.spec.js → field-521-fix.test.js} +12 -13
  325. package/src/field-exclusion.js +1 -1
  326. package/src/{field-exclusion.spec.js → field-exclusion.test.js} +60 -57
  327. package/src/{field-structure.spec.js → field-structure.test.js} +29 -29
  328. package/src/{fields-present.spec.js → fields-present.test.js} +12 -15
  329. package/src/fix-33X.js +4 -4
  330. package/src/{fix-33X.spec.js → fix-33X.test.js} +13 -14
  331. package/src/fix-country-codes.js +1 -1
  332. package/src/{fix-country-codes.spec.js → fix-country-codes.test.js} +12 -13
  333. package/src/fix-language-codes.js +5 -5
  334. package/src/{fix-language-codes.spec.js → fix-language-codes.test.js} +12 -13
  335. package/src/fixRelatorTerms.js +5 -5
  336. package/src/{fixRelatorTerms.spec.js → fixRelatorTerms.test.js} +13 -13
  337. package/src/{fixed-fields.spec.js → fixed-fields.test.js} +11 -14
  338. package/src/identical-fields.js +1 -1
  339. package/src/{identical-fields.spec.js → identical-fields.test.js} +9 -11
  340. package/src/index.js +132 -59
  341. package/src/indicator-fixes.js +17 -4
  342. package/src/{indicator-fixes.spec.js → indicator-fixes.test.js} +9 -12
  343. package/src/isbn-issn.js +12 -7
  344. package/src/{isbn-issn.spec.js → isbn-issn.test.js} +20 -22
  345. package/src/{item-language.spec.js → item-language.test.js} +21 -22
  346. package/src/melindaCustomMergeFields.js +1 -1
  347. package/src/merge-fields/controlSubfields.js +1 -1
  348. package/src/merge-fields/counterpartField.js +14 -9
  349. package/src/merge-fields/dataProvenance.js +41 -0
  350. package/src/merge-fields/index.js +12 -3
  351. package/src/merge-fields/mergableIndicator.js +1 -1
  352. package/src/merge-fields/mergeField.js +8 -8
  353. package/src/merge-fields/mergeIndicator.js +1 -1
  354. package/src/merge-fields/mergeOrAddPostprocess.js +4 -4
  355. package/src/merge-fields/mergeOrAddSubfield.js +2 -2
  356. package/src/merge-fields/mergeSubfield.js +4 -4
  357. package/src/merge-fields/removeDuplicateSubfields.js +2 -2
  358. package/src/{merge-fields.spec.js → merge-fields.test.js} +18 -15
  359. package/src/mergeField500Lisapainokset.js +1 -1
  360. package/src/{mergeField500Lisapainokset.spec.js → mergeField500Lisapainokset.test.js} +12 -13
  361. package/src/mergeRelatorTermFields.js +5 -7
  362. package/src/{mergeRelatorTermFields.spec.js → mergeRelatorTermFields.test.js} +12 -13
  363. package/src/modernize-502.js +1 -1
  364. package/src/{modernize-502.spec.js → modernize-502.test.js} +12 -13
  365. package/src/multiple-subfield-0.js +3 -3
  366. package/src/{multiple-subfield-0.spec.js → multiple-subfield-0.test.js} +13 -13
  367. package/src/{non-breaking-space.spec.js → non-breaking-space.test.js} +12 -13
  368. package/src/normalize-dashes.js +2 -2
  369. package/src/{normalize-dashes.spec.js → normalize-dashes.test.js} +12 -13
  370. package/src/normalize-identifiers.js +1 -1
  371. package/src/{normalize-identifiers.spec.js → normalize-identifiers.test.js} +12 -13
  372. package/src/normalize-qualifying-information.js +2 -2
  373. package/src/{normalize-qualifying-information.spec.js → normalize-qualifying-information.test.js} +12 -13
  374. package/src/normalize-utf8-diacritics.js +2 -2
  375. package/src/{normalize-utf8-diacritics.spec.js → normalize-utf8-diacritics.test.js} +13 -13
  376. package/src/normalizeFieldForComparison.js +32 -6
  377. package/src/normalizeSubfieldValueForComparison.js +1 -1
  378. package/src/prepublicationUtils.js +4 -4
  379. package/src/punctuation/index.js +1 -1
  380. package/src/punctuation/rules/index.js +2 -2
  381. package/src/{punctuation.spec.js → punctuation.test.js} +12 -13
  382. package/src/punctuation2.js +17 -8
  383. package/src/{punctuation2.spec.js → punctuation2.test.js} +12 -13
  384. package/src/reindexSubfield6OccurenceNumbers.js +5 -7
  385. package/src/{reindexSubfield6OccurenceNumbers.spec.js → reindexSubfield6OccurenceNumbers.test.js} +12 -13
  386. package/src/removeDuplicateDataFields.js +11 -19
  387. package/src/{removeDuplicateDataFields.spec.js → removeDuplicateDataFields.test.js} +12 -13
  388. package/src/removeInferiorDataFields.js +15 -12
  389. package/src/{removeInferiorDataFields.spec.js → removeInferiorDataFields.test.js} +13 -13
  390. package/src/resolvable-ext-references-melinda.js +1 -1
  391. package/src/{resolvable-ext-references-melinda.spec.js → resolvable-ext-references-melinda.test.js} +42 -27
  392. package/src/resolveOrphanedSubfield6s.js +6 -6
  393. package/src/{resolveOrphanedSubfield6s.spec.js → resolveOrphanedSubfield6s.test.js} +13 -13
  394. package/src/sanitize-vocabulary-source-codes.js +4 -4
  395. package/src/{sanitize-vocabulary-source-codes.spec.js → sanitize-vocabulary-source-codes.test.js} +16 -14
  396. package/src/{sort-tags.spec.js → sort-tags.test.js} +9 -11
  397. package/src/sortFields.js +4 -4
  398. package/src/{sortFields.spec.js → sortFields.test.js} +12 -13
  399. package/src/sortRelatorTerms.js +3 -3
  400. package/src/{sortRelatorTerms.spec.js → sortRelatorTerms.test.js} +13 -13
  401. package/src/sortSubfields.js +8 -6
  402. package/src/{sortSubfields.spec.js → sortSubfields.test.js} +13 -13
  403. package/src/stripPunctuation.js +3 -3
  404. package/src/{stripPunctuation.spec.js → stripPunctuation.test.js} +13 -13
  405. package/src/subfield-exclusion.js +1 -1
  406. package/src/{subfield-exclusion.spec.js → subfield-exclusion.test.js} +45 -36
  407. package/src/subfield6Utils.js +6 -10
  408. package/src/subfield8Utils.js +4 -4
  409. package/src/subfieldValueNormalizations.js +3 -3
  410. package/src/{subfieldValueNormalizations.spec.js → subfieldValueNormalizations.test.js} +18 -14
  411. package/src/sync-007-and-300.js +2 -2
  412. package/src/{sync-007-and-300.spec.js → sync-007-and-300.test.js} +13 -13
  413. package/src/translate-terms.js +3 -3
  414. package/src/translate-terms.test.js +75 -0
  415. package/src/{typeOfDate-008.spec.js → typeOfDate-008.test.js} +12 -13
  416. package/src/{unicode-decomposition.spec.js → unicode-decomposition.test.js} +10 -16
  417. package/src/update-field-540.js +2 -2
  418. package/src/{update-field-540.spec.js → update-field-540.test.js} +13 -10
  419. package/src/urn.js +2 -2
  420. package/src/{urn.spec.js → urn.test.js} +12 -13
  421. package/src/utils.js +21 -5
  422. package/test-fixtures/field-505-separators/03/expectedResult.json +3 -1
  423. package/test-fixtures/field-505-separators/03/record.json +3 -0
  424. package/test-fixtures/indicator-fixes/10/expectedResult.json +11 -0
  425. package/test-fixtures/indicator-fixes/10/metadata.json +4 -0
  426. package/test-fixtures/indicator-fixes/10/record.json +11 -0
  427. package/test-fixtures/merge-fields/f05/expectedResult.json +24 -0
  428. package/test-fixtures/merge-fields/f05/metadata.json +6 -0
  429. package/test-fixtures/merge-fields/f05/record.json +30 -0
  430. package/test-fixtures/normalize-subfield-value/01/metadata.json +4 -1
  431. package/test-fixtures/normalize-subfield-value/01/record.json +3 -0
  432. package/test-fixtures/normalize-subfield-value/02/expectedResult.json +3 -1
  433. package/test-fixtures/normalize-subfield-value/02/metadata.json +2 -1
  434. package/test-fixtures/normalize-subfield-value/02/record.json +3 -0
  435. package/test-fixtures/remove-inferior-datafields/f16/expectedResult.json +12 -0
  436. package/test-fixtures/remove-inferior-datafields/f16/metadata.json +5 -0
  437. package/test-fixtures/remove-inferior-datafields/f16/record.json +14 -0
  438. package/test-fixtures/sanitize-vocabulary-source-codes/f03/expectedResult.json +3 -1
  439. package/test-fixtures/sanitize-vocabulary-source-codes/f04/expectedResult.json +3 -1
  440. package/test-fixtures/sanitize-vocabulary-source-codes/v04/metadata.json +1 -4
  441. package/test-fixtures/sanitize-vocabulary-source-codes/v04/record.json +1 -1
  442. package/test-fixtures/translate-terms-data.js +42 -0
  443. package/dist/access-rights.spec.js +0 -195
  444. package/dist/access-rights.spec.js.map +0 -1
  445. package/dist/addMissingField041.spec.js +0 -45
  446. package/dist/addMissingField041.spec.js.map +0 -1
  447. package/dist/addMissingField336.spec.js +0 -45
  448. package/dist/addMissingField336.spec.js.map +0 -1
  449. package/dist/addMissingField337.spec.js +0 -43
  450. package/dist/addMissingField337.spec.js.map +0 -1
  451. package/dist/addMissingField338.spec.js +0 -45
  452. package/dist/addMissingField338.spec.js.map +0 -1
  453. package/dist/cyrillux-usemarcon-replacement.spec.js +0 -45
  454. package/dist/cyrillux-usemarcon-replacement.spec.js.map +0 -1
  455. package/dist/cyrillux.spec.js +0 -46
  456. package/dist/cyrillux.spec.js.map +0 -1
  457. package/dist/disambiguateSeriesStatements.spec.js +0 -51
  458. package/dist/disambiguateSeriesStatements.spec.js.map +0 -1
  459. package/dist/double-commas.spec.js +0 -73
  460. package/dist/double-commas.spec.js.map +0 -1
  461. package/dist/duplicates-ind1.spec.js +0 -45
  462. package/dist/duplicates-ind1.spec.js.map +0 -1
  463. package/dist/empty-fields.spec.js +0 -118
  464. package/dist/empty-fields.spec.js.map +0 -1
  465. package/dist/ending-punctuation.spec.js +0 -2654
  466. package/dist/ending-punctuation.spec.js.map +0 -1
  467. package/dist/ending-whitespace.spec.js +0 -42
  468. package/dist/ending-whitespace.spec.js.map +0 -1
  469. package/dist/field-008-18-34-character-groups.spec.js +0 -51
  470. package/dist/field-008-18-34-character-groups.spec.js.map +0 -1
  471. package/dist/field-505-separators.spec.js +0 -51
  472. package/dist/field-505-separators.spec.js.map +0 -1
  473. package/dist/field-521-fix.spec.js +0 -51
  474. package/dist/field-521-fix.spec.js.map +0 -1
  475. package/dist/field-exclusion.spec.js +0 -1054
  476. package/dist/field-exclusion.spec.js.map +0 -1
  477. package/dist/field-structure.spec.js +0 -535
  478. package/dist/field-structure.spec.js.map +0 -1
  479. package/dist/fields-present.spec.js +0 -121
  480. package/dist/fields-present.spec.js.map +0 -1
  481. package/dist/fix-33X.spec.js +0 -45
  482. package/dist/fix-33X.spec.js.map +0 -1
  483. package/dist/fix-country-codes.spec.js +0 -51
  484. package/dist/fix-country-codes.spec.js.map +0 -1
  485. package/dist/fix-language-codes.spec.js +0 -44
  486. package/dist/fix-language-codes.spec.js.map +0 -1
  487. package/dist/fixRelatorTerms.spec.js +0 -51
  488. package/dist/fixRelatorTerms.spec.js.map +0 -1
  489. package/dist/fixed-fields.spec.js +0 -140
  490. package/dist/fixed-fields.spec.js.map +0 -1
  491. package/dist/identical-fields.spec.js +0 -99
  492. package/dist/identical-fields.spec.js.map +0 -1
  493. package/dist/indicator-fixes.spec.js +0 -51
  494. package/dist/indicator-fixes.spec.js.map +0 -1
  495. package/dist/isbn-issn.spec.js +0 -595
  496. package/dist/isbn-issn.spec.js.map +0 -1
  497. package/dist/item-language.spec.js +0 -306
  498. package/dist/item-language.spec.js.map +0 -1
  499. package/dist/melindaCustomMergeFields.json +0 -5120
  500. package/dist/merge-fields.spec.js +0 -51
  501. package/dist/merge-fields.spec.js.map +0 -1
  502. package/dist/mergeField500Lisapainokset.spec.js +0 -51
  503. package/dist/mergeField500Lisapainokset.spec.js.map +0 -1
  504. package/dist/mergeRelatorTermFields.spec.js +0 -51
  505. package/dist/mergeRelatorTermFields.spec.js.map +0 -1
  506. package/dist/modernize-502.spec.js +0 -49
  507. package/dist/modernize-502.spec.js.map +0 -1
  508. package/dist/multiple-subfield-0.spec.js +0 -51
  509. package/dist/multiple-subfield-0.spec.js.map +0 -1
  510. package/dist/non-breaking-space.spec.js +0 -42
  511. package/dist/non-breaking-space.spec.js.map +0 -1
  512. package/dist/normalize-dashes.spec.js +0 -51
  513. package/dist/normalize-dashes.spec.js.map +0 -1
  514. package/dist/normalize-identifiers.spec.js +0 -51
  515. package/dist/normalize-identifiers.spec.js.map +0 -1
  516. package/dist/normalize-qualifying-information.spec.js +0 -51
  517. package/dist/normalize-qualifying-information.spec.js.map +0 -1
  518. package/dist/normalize-utf8-diacritics.spec.js +0 -51
  519. package/dist/normalize-utf8-diacritics.spec.js.map +0 -1
  520. package/dist/punctuation.spec.js +0 -51
  521. package/dist/punctuation.spec.js.map +0 -1
  522. package/dist/punctuation2.spec.js +0 -51
  523. package/dist/punctuation2.spec.js.map +0 -1
  524. package/dist/reindexSubfield6OccurenceNumbers.spec.js +0 -51
  525. package/dist/reindexSubfield6OccurenceNumbers.spec.js.map +0 -1
  526. package/dist/removeDuplicateDataFields.spec.js +0 -51
  527. package/dist/removeDuplicateDataFields.spec.js.map +0 -1
  528. package/dist/removeInferiorDataFields.spec.js +0 -51
  529. package/dist/removeInferiorDataFields.spec.js.map +0 -1
  530. package/dist/resolvable-ext-references-melinda.spec.js +0 -166
  531. package/dist/resolvable-ext-references-melinda.spec.js.map +0 -1
  532. package/dist/resolveOrphanedSubfield6s.spec.js +0 -51
  533. package/dist/resolveOrphanedSubfield6s.spec.js.map +0 -1
  534. package/dist/sanitize-vocabulary-source-codes.spec.js +0 -51
  535. package/dist/sanitize-vocabulary-source-codes.spec.js.map +0 -1
  536. package/dist/sort-tags.spec.js +0 -207
  537. package/dist/sort-tags.spec.js.map +0 -1
  538. package/dist/sortFields.spec.js +0 -51
  539. package/dist/sortFields.spec.js.map +0 -1
  540. package/dist/sortRelatorTerms.spec.js +0 -51
  541. package/dist/sortRelatorTerms.spec.js.map +0 -1
  542. package/dist/sortSubfields.spec.js +0 -52
  543. package/dist/sortSubfields.spec.js.map +0 -1
  544. package/dist/stripPunctuation.spec.js +0 -51
  545. package/dist/stripPunctuation.spec.js.map +0 -1
  546. package/dist/subfield-exclusion.spec.js +0 -523
  547. package/dist/subfield-exclusion.spec.js.map +0 -1
  548. package/dist/subfieldValueNormalizations.spec.js +0 -51
  549. package/dist/subfieldValueNormalizations.spec.js.map +0 -1
  550. package/dist/sync-007-and-300.spec.js +0 -51
  551. package/dist/sync-007-and-300.spec.js.map +0 -1
  552. package/dist/translate-terms.spec.js +0 -51
  553. package/dist/translate-terms.spec.js.map +0 -1
  554. package/dist/typeOfDate-008.spec.js +0 -47
  555. package/dist/typeOfDate-008.spec.js.map +0 -1
  556. package/dist/unicode-decomposition.spec.js +0 -91
  557. package/dist/unicode-decomposition.spec.js.map +0 -1
  558. package/dist/update-field-540.spec.js +0 -51
  559. package/dist/update-field-540.spec.js.map +0 -1
  560. package/dist/urn.spec.js +0 -52
  561. package/dist/urn.spec.js.map +0 -1
  562. package/src/melindaCustomMergeFields.json +0 -5120
  563. package/src/translate-terms.spec.js +0 -52
@@ -1,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":[]}