@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,1054 +0,0 @@
1
- "use strict";
2
-
3
- var _chai = _interopRequireDefault(require("chai"));
4
- var _chaiAsPromised = _interopRequireDefault(require("chai-as-promised"));
5
- var _marcRecord = require("@natlibfi/marc-record");
6
- var _fieldExclusion = _interopRequireDefault(require("../src/field-exclusion"));
7
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
8
- const {
9
- expect
10
- } = _chai.default;
11
- _chai.default.use(_chaiAsPromised.default);
12
-
13
- // Factory validation
14
- describe('field-exclusion', () => {
15
- describe('#validate: Check configuration validation', () => {
16
- it('Creates a validator from simple config', async () => {
17
- const config = [/^500$/u];
18
- const validator = await (0, _fieldExclusion.default)(config);
19
- expect(validator).to.be.an('object').that.has.any.keys('description', 'validate');
20
- expect(validator.description).to.be.a('string');
21
- expect(validator.validate).to.be.a('function');
22
- });
23
- it('Creates a validator from complex config', async () => {
24
- const config = [{
25
- tag: /^500$/u,
26
- subfields: [{
27
- code: /9/u,
28
- value: /^(?!FENNI<KEEP>).*$/u
29
- }]
30
- }];
31
- const validator = await (0, _fieldExclusion.default)(config);
32
- expect(validator).to.be.an('object').that.has.any.keys('description', 'validate');
33
- expect(validator.description).to.be.a('string');
34
- expect(validator.validate).to.be.a('function');
35
- });
36
- it('Fails to create a validator from invalid config - tag', async () => {
37
- const config = [{
38
- tag: '500',
39
- subfields: [{
40
- code: /9/u,
41
- value: /^(?!FENNI<KEEP>).*$/u
42
- }]
43
- }];
44
- try {
45
- await (0, _fieldExclusion.default)(config);
46
- } catch (error) {
47
- expect(error).to.be.an('error').with.property('message', 'Configuration not valid - invalid data type for: tag');
48
- }
49
- });
50
- it('Fails to create a validator from invalid config - msising array', async () => {
51
- const config = {
52
- tag: '500',
53
- subfields: [{
54
- code: /9/u,
55
- value: /^(?!FENNI<KEEP>).*$/u
56
- }]
57
- };
58
- try {
59
- await (0, _fieldExclusion.default)(config);
60
- } catch (error) {
61
- expect(error).to.be.an('error').with.property('message', 'Configuration array not provided');
62
- }
63
- });
64
- it('Fails to create a validator from invalid config - code', async () => {
65
- const config = [{
66
- tag: /^500$/u,
67
- subfields: [{
68
- code: 9,
69
- value: /^(?!FENNI<KEEP>).*$/u
70
- }]
71
- }];
72
- try {
73
- await (0, _fieldExclusion.default)(config);
74
- } catch (error) {
75
- expect(error).to.be.an('error').with.property('message', 'Configuration not valid - invalid data type for: code');
76
- }
77
- });
78
- it('Fails to create a validator from invalid config - value', async () => {
79
- const config = [{
80
- tag: /^500$/u,
81
- subfields: [{
82
- code: /9/u,
83
- value: 'Fenni'
84
- }]
85
- }];
86
- try {
87
- await (0, _fieldExclusion.default)(config);
88
- } catch (error) {
89
- expect(error).to.be.an('error').with.property('message', 'Configuration not valid - invalid data type for: value');
90
- }
91
- });
92
- it('Fails to create a validator from invalid config - exclusion: value, ind1', async () => {
93
- const config = [{
94
- tag: /^500$/u,
95
- value: /^500$/u,
96
- ind1: /^500$/u,
97
- subfields: [{
98
- code: /9/u,
99
- value: /^(?!FENNI<KEEP>).*$/u
100
- }]
101
- }];
102
- try {
103
- await (0, _fieldExclusion.default)(config);
104
- } catch (error) {
105
- expect(error).to.be.an('error').with.property('message', 'Configuration not valid - excluded element');
106
- }
107
- });
108
- it('Fails to create a validator from invalid config - missing mandatory: tag', async () => {
109
- const config = [{
110
- value: /^500$/u,
111
- subfields: [{
112
- code: /9/u,
113
- value: /^(?!FENNI<KEEP>).*$/u
114
- }]
115
- }];
116
- try {
117
- await (0, _fieldExclusion.default)(config);
118
- } catch (error) {
119
- expect(error).to.be.an('error').with.property('message', 'Configuration not valid - missing mandatory element: tag');
120
- }
121
- });
122
- it('Fails to create a validator from invalid config - subfield not object: array', async () => {
123
- const config = [{
124
- tag: /^500$/u,
125
- subfields: [['/9/', '/^(?!FENNI<KEEP>).*$/'], {
126
- value: /^(?!FENNI<KEEP>).*$/u
127
- }]
128
- }];
129
- try {
130
- await (0, _fieldExclusion.default)(config);
131
- } catch (error) {
132
- expect(error).to.be.an('error').with.property('message', 'Configuration not valid - subfield: /9/,/^(?!FENNI<KEEP>).*$/ not object');
133
- }
134
- });
135
- it('Fails to create a validator from invalid config - subfield not object: string', async () => {
136
- const config = [{
137
- tag: /^500$/u,
138
- subfields: ['/9/', '/^(?!FENNI<KEEP>).*$/', {
139
- value: /^(?!FENNI<KEEP>).*$/u
140
- }]
141
- }];
142
- try {
143
- await (0, _fieldExclusion.default)(config);
144
- } catch (error) {
145
- expect(error).to.be.an('error').with.property('message', 'Configuration not valid - subfield: /9/ not object');
146
- }
147
- });
148
- it('Fails to create a validator from invalid config - missing mandatory: subfield.code', async () => {
149
- const config = [{
150
- tag: /^500$/u,
151
- subfields: [{
152
- code: /9/u,
153
- value: /^(?!FENNI<KEEP>).*$/u
154
- }, {
155
- value: /^(?!FENNI<KEEP>).*$/u
156
- }]
157
- }];
158
- try {
159
- await (0, _fieldExclusion.default)(config);
160
- } catch (error) {
161
- expect(error).to.be.an('error').with.property('message', 'Configuration not valid - missing mandatory element: code');
162
- }
163
- });
164
- it('Fails to create a validator from invalid config - unidentified field: unidentified', async () => {
165
- const config = [{
166
- tag: /^500$/u,
167
- unidentified: /^500$/u,
168
- subfields: [{
169
- code: /9/u,
170
- value: /^(?!FENNI<KEEP>).*$/u
171
- }, {
172
- value: /^(?!FENNI<KEEP>).*$/u
173
- }]
174
- }];
175
- try {
176
- await (0, _fieldExclusion.default)(config);
177
- } catch (error) {
178
- expect(error).to.be.an('error').with.property('message', 'Configuration not valid - unidentified value: unidentified');
179
- }
180
- });
181
- });
182
-
183
- // Simple configuration https://github.com/NatLibFi/marc-record-validators-melinda/issues/45
184
- describe('#validate: Simple configuration (spec)', () => {
185
- const config = [{
186
- tag: /^500$/u
187
- }];
188
- const recordValid = new _marcRecord.MarcRecord({
189
- leader: 'foo',
190
- fields: [{
191
- tag: '245',
192
- ind1: ' ',
193
- ind2: ' ',
194
- subfields: [{
195
- code: 'a',
196
- value: 'Fubar'
197
- }]
198
- }]
199
- });
200
- const recordInvalid = new _marcRecord.MarcRecord({
201
- leader: 'foo',
202
- fields: [{
203
- tag: '245',
204
- ind1: ' ',
205
- ind2: ' ',
206
- subfields: [{
207
- code: 'a',
208
- value: 'Fubar'
209
- }]
210
- }, {
211
- tag: '500',
212
- ind1: ' ',
213
- ind2: ' ',
214
- subfields: [{
215
- code: 'a',
216
- value: 'Foo Bar Foo Bar Foo Bar'
217
- }, {
218
- code: '9',
219
- value: 'ALMA<KEEP>'
220
- }]
221
- }]
222
- });
223
- const recordInvalidDouble = new _marcRecord.MarcRecord({
224
- leader: 'foo',
225
- fields: [{
226
- tag: '245',
227
- ind1: ' ',
228
- ind2: ' ',
229
- subfields: [{
230
- code: 'a',
231
- value: 'Fubar'
232
- }]
233
- }, {
234
- tag: '500',
235
- ind1: ' ',
236
- ind2: ' ',
237
- subfields: [{
238
- code: 'a',
239
- value: 'Foo'
240
- }, {
241
- code: '9',
242
- value: 'ALMA<KEEP>'
243
- }]
244
- }, {
245
- tag: '500',
246
- ind1: ' ',
247
- ind2: ' ',
248
- subfields: [{
249
- code: 'a',
250
- value: 'Bar'
251
- }, {
252
- code: '9',
253
- value: 'ALMA<KEEP>'
254
- }]
255
- }]
256
- });
257
- const recordInvalidFixed = new _marcRecord.MarcRecord({
258
- leader: 'foo',
259
- fields: [{
260
- tag: '245',
261
- ind1: ' ',
262
- ind2: ' ',
263
- subfields: [{
264
- code: 'a',
265
- value: 'Fubar'
266
- }]
267
- }]
268
- });
269
- it('Finds the record valid (spec)', async () => {
270
- const validator = await (0, _fieldExclusion.default)(config);
271
- const {
272
- valid,
273
- message
274
- } = await validator.validate(recordValid);
275
- expect({
276
- valid,
277
- message
278
- }).to.eql({
279
- valid: true,
280
- message: []
281
- });
282
- });
283
- it('Finds the record invalid (spec)', async () => {
284
- const validator = await (0, _fieldExclusion.default)(config);
285
- const {
286
- valid,
287
- message
288
- } = await validator.validate(recordInvalid);
289
- expect({
290
- valid,
291
- message
292
- }).to.eql({
293
- valid: false,
294
- message: ['Field $500 should be excluded']
295
- });
296
- });
297
- it('Finds the record invalid - double', async () => {
298
- const validator = await (0, _fieldExclusion.default)(config);
299
- const {
300
- valid,
301
- message
302
- } = await validator.validate(recordInvalidDouble);
303
- expect({
304
- valid,
305
- message
306
- }).to.eql({
307
- valid: false,
308
- message: ['Field $500 should be excluded', 'Field $500 should be excluded']
309
- });
310
- });
311
- it('Repairs invalid record', async () => {
312
- const validator = await (0, _fieldExclusion.default)(config);
313
- await validator.fix(recordInvalid);
314
- expect(recordInvalid.equalsTo(recordInvalidFixed)).to.eql(true);
315
- });
316
- it('Repairs invalid record - double', async () => {
317
- const validator = await (0, _fieldExclusion.default)(config);
318
- await validator.fix(recordInvalidDouble);
319
- expect(recordInvalidDouble.equalsTo(recordInvalidFixed)).to.eql(true);
320
- });
321
- });
322
-
323
- // Simple multi tag configuration
324
- describe('#validate: Simple multi tag configuration (spec)', () => {
325
- const config = [{
326
- tag: /^(648|650|651|655)$/u
327
- }];
328
- const recordValid = new _marcRecord.MarcRecord({
329
- leader: 'foo',
330
- fields: [{
331
- tag: '245',
332
- ind1: ' ',
333
- ind2: ' ',
334
- subfields: [{
335
- code: 'a',
336
- value: 'Fubar'
337
- }]
338
- }]
339
- });
340
- const recordInvalid = new _marcRecord.MarcRecord({
341
- leader: 'foo',
342
- fields: [{
343
- tag: '245',
344
- ind1: ' ',
345
- ind2: ' ',
346
- subfields: [{
347
- code: 'a',
348
- value: 'Fubar'
349
- }]
350
- }, {
351
- tag: '648',
352
- ind1: ' ',
353
- ind2: ' ',
354
- subfields: [{
355
- code: 'a',
356
- value: 'Foo Bar Foo Bar Foo Bar'
357
- }, {
358
- code: '9',
359
- value: 'ALMA<KEEP>'
360
- }]
361
- }]
362
- });
363
- const recordInvalidDouble = new _marcRecord.MarcRecord({
364
- leader: 'foo',
365
- fields: [{
366
- tag: '245',
367
- ind1: ' ',
368
- ind2: ' ',
369
- subfields: [{
370
- code: 'a',
371
- value: 'Fubar'
372
- }]
373
- }, {
374
- tag: '648',
375
- ind1: ' ',
376
- ind2: ' ',
377
- subfields: [{
378
- code: 'a',
379
- value: 'Foo'
380
- }, {
381
- code: '9',
382
- value: 'ALMA<KEEP>'
383
- }]
384
- }, {
385
- tag: '650',
386
- ind1: ' ',
387
- ind2: ' ',
388
- subfields: [{
389
- code: 'a',
390
- value: 'Bar'
391
- }, {
392
- code: '9',
393
- value: 'ALMA<KEEP>'
394
- }]
395
- }]
396
- });
397
- const recordInvalidFixed = new _marcRecord.MarcRecord({
398
- leader: 'foo',
399
- fields: [{
400
- tag: '245',
401
- ind1: ' ',
402
- ind2: ' ',
403
- subfields: [{
404
- code: 'a',
405
- value: 'Fubar'
406
- }]
407
- }]
408
- });
409
- it('Finds the record valid (spec)', async () => {
410
- const validator = await (0, _fieldExclusion.default)(config);
411
- const {
412
- valid,
413
- message
414
- } = await validator.validate(recordValid);
415
- expect({
416
- valid,
417
- message
418
- }).to.eql({
419
- valid: true,
420
- message: []
421
- });
422
- });
423
- it('Finds the record invalid (spec)', async () => {
424
- const validator = await (0, _fieldExclusion.default)(config);
425
- const {
426
- valid,
427
- message
428
- } = await validator.validate(recordInvalid);
429
- expect({
430
- valid,
431
- message
432
- }).to.eql({
433
- valid: false,
434
- message: ['Field $648 should be excluded']
435
- });
436
- });
437
- it('Finds the record invalid - double', async () => {
438
- const validator = await (0, _fieldExclusion.default)(config);
439
- const {
440
- valid,
441
- message
442
- } = await validator.validate(recordInvalidDouble);
443
- expect({
444
- valid,
445
- message
446
- }).to.eql({
447
- valid: false,
448
- message: ['Field $648 should be excluded', 'Field $650 should be excluded']
449
- });
450
- });
451
- it('Repairs invalid record', async () => {
452
- const validator = await (0, _fieldExclusion.default)(config);
453
- await validator.fix(recordInvalid);
454
- expect(recordInvalid.equalsTo(recordInvalidFixed)).to.eql(true);
455
- });
456
- it('Repairs invalid record - double', async () => {
457
- const validator = await (0, _fieldExclusion.default)(config);
458
- await validator.fix(recordInvalidDouble);
459
- expect(recordInvalidDouble.equalsTo(recordInvalidFixed)).to.eql(true);
460
- });
461
- });
462
-
463
- // Simple multi tag configuration
464
- describe('#validate: Simple multi tag configuration - No object (spec)', () => {
465
- const config = [/^(648|650|651|655)$/u];
466
- const recordValid = new _marcRecord.MarcRecord({
467
- leader: 'foo',
468
- fields: [{
469
- tag: '245',
470
- ind1: ' ',
471
- ind2: ' ',
472
- subfields: [{
473
- code: 'a',
474
- value: 'Fubar'
475
- }]
476
- }]
477
- });
478
- const recordInvalid = new _marcRecord.MarcRecord({
479
- leader: 'foo',
480
- fields: [{
481
- tag: '245',
482
- ind1: ' ',
483
- ind2: ' ',
484
- subfields: [{
485
- code: 'a',
486
- value: 'Fubar'
487
- }]
488
- }, {
489
- tag: '648',
490
- ind1: ' ',
491
- ind2: ' ',
492
- subfields: [{
493
- code: 'a',
494
- value: 'Foo Bar Foo Bar Foo Bar'
495
- }, {
496
- code: '9',
497
- value: 'ALMA<KEEP>'
498
- }]
499
- }]
500
- });
501
- const recordInvalidDouble = new _marcRecord.MarcRecord({
502
- leader: 'foo',
503
- fields: [{
504
- tag: '245',
505
- ind1: ' ',
506
- ind2: ' ',
507
- subfields: [{
508
- code: 'a',
509
- value: 'Fubar'
510
- }]
511
- }, {
512
- tag: '648',
513
- ind1: ' ',
514
- ind2: ' ',
515
- subfields: [{
516
- code: 'a',
517
- value: 'Foo'
518
- }, {
519
- code: '9',
520
- value: 'ALMA<KEEP>'
521
- }]
522
- }, {
523
- tag: '650',
524
- ind1: ' ',
525
- ind2: ' ',
526
- subfields: [{
527
- code: 'a',
528
- value: 'Bar'
529
- }, {
530
- code: '9',
531
- value: 'ALMA<KEEP>'
532
- }]
533
- }]
534
- });
535
- const recordInvalidFixed = new _marcRecord.MarcRecord({
536
- leader: 'foo',
537
- fields: [{
538
- tag: '245',
539
- ind1: ' ',
540
- ind2: ' ',
541
- subfields: [{
542
- code: 'a',
543
- value: 'Fubar'
544
- }]
545
- }]
546
- });
547
- it('Finds the record valid (spec)', async () => {
548
- const validator = await (0, _fieldExclusion.default)(config);
549
- const {
550
- valid,
551
- message
552
- } = await validator.validate(recordValid);
553
- expect({
554
- valid,
555
- message
556
- }).to.eql({
557
- valid: true,
558
- message: []
559
- });
560
- });
561
- it('Finds the record invalid (spec)', async () => {
562
- const validator = await (0, _fieldExclusion.default)(config);
563
- const {
564
- valid,
565
- message
566
- } = await validator.validate(recordInvalid);
567
- expect({
568
- valid,
569
- message
570
- }).to.eql({
571
- valid: false,
572
- message: ['Field $648 should be excluded']
573
- });
574
- });
575
- it('Finds the record invalid - double', async () => {
576
- const validator = await (0, _fieldExclusion.default)(config);
577
- const {
578
- valid,
579
- message
580
- } = await validator.validate(recordInvalidDouble);
581
- expect({
582
- valid,
583
- message
584
- }).to.eql({
585
- valid: false,
586
- message: ['Field $648 should be excluded', 'Field $650 should be excluded']
587
- });
588
- });
589
- it('Repairs invalid record', async () => {
590
- const validator = await (0, _fieldExclusion.default)(config);
591
- await validator.fix(recordInvalid);
592
- expect(recordInvalid.equalsTo(recordInvalidFixed)).to.eql(true);
593
- });
594
- it('Repairs invalid record - double', async () => {
595
- const validator = await (0, _fieldExclusion.default)(config);
596
- await validator.fix(recordInvalidDouble);
597
- expect(recordInvalidDouble.equalsTo(recordInvalidFixed)).to.eql(true);
598
- });
599
- });
600
-
601
- // Complex configuration https://github.com/NatLibFi/marc-record-validators-melinda/issues/45
602
- describe('#validate: Complex configuration (spec)', () => {
603
- const config = [{
604
- tag: /^500$/u,
605
- subfields: [{
606
- code: /9/u,
607
- value: /^(?!FENNI<KEEP>).*$/u
608
- }]
609
- }];
610
- const recordValid = new _marcRecord.MarcRecord({
611
- leader: 'foo',
612
- fields: [{
613
- tag: '245',
614
- ind1: ' ',
615
- ind2: ' ',
616
- subfields: [{
617
- code: 'a',
618
- value: 'Fubar'
619
- }]
620
- }, {
621
- tag: '500',
622
- ind1: ' ',
623
- ind2: ' ',
624
- subfields: [{
625
- code: 'a',
626
- value: 'Foo Bar Foo Bar Foo Bar'
627
- }, {
628
- code: '9',
629
- value: 'FENNI<KEEP>'
630
- }]
631
- }]
632
- });
633
- const recordInvalid = new _marcRecord.MarcRecord({
634
- leader: 'foo',
635
- fields: [{
636
- tag: '245',
637
- ind1: ' ',
638
- ind2: ' ',
639
- subfields: [{
640
- code: 'a',
641
- value: 'Fubar'
642
- }]
643
- }, {
644
- tag: '500',
645
- ind1: ' ',
646
- ind2: ' ',
647
- subfields: [{
648
- code: 'a',
649
- value: 'Foo Bar Foo Bar Foo Bar'
650
- }, {
651
- code: '9',
652
- value: 'ALMA<KEEP>'
653
- }]
654
- }]
655
- });
656
- const recordInvalidFixed = new _marcRecord.MarcRecord({
657
- leader: 'foo',
658
- fields: [{
659
- tag: '245',
660
- ind1: ' ',
661
- ind2: ' ',
662
- subfields: [{
663
- code: 'a',
664
- value: 'Fubar'
665
- }]
666
- }]
667
- });
668
- it('Finds the record valid (spec)', async () => {
669
- const validator = await (0, _fieldExclusion.default)(config);
670
- const {
671
- valid,
672
- message
673
- } = await validator.validate(recordValid);
674
- expect({
675
- valid,
676
- message
677
- }).to.eql({
678
- valid: true,
679
- message: []
680
- });
681
- });
682
- it('Finds the record invalid (spec)', async () => {
683
- const validator = await (0, _fieldExclusion.default)(config);
684
- const {
685
- valid,
686
- message
687
- } = await validator.validate(recordInvalid);
688
- expect({
689
- valid,
690
- message
691
- }).to.eql({
692
- valid: false,
693
- message: ['Field $500 should be excluded']
694
- });
695
- });
696
- it('Repairs invalid record', async () => {
697
- const validator = await (0, _fieldExclusion.default)(config);
698
- await validator.fix(recordInvalid);
699
- expect(recordInvalid.equalsTo(recordInvalidFixed)).to.eql(true);
700
- });
701
- });
702
-
703
- // Complex multi tag configuration
704
- describe('#validate: Complex multi tag configuration (spec)', () => {
705
- const config = [{
706
- tag: /^(648|650|651|655)$/u,
707
- subfields: [{
708
- code: /^2$/u,
709
- value: /^(ysa|musa|allars|cilla)$/u
710
- }]
711
- }];
712
- const recordValid = new _marcRecord.MarcRecord({
713
- leader: 'foo',
714
- fields: [{
715
- tag: '245',
716
- ind1: ' ',
717
- ind2: ' ',
718
- subfields: [{
719
- code: 'a',
720
- value: 'Fubar'
721
- }]
722
- }, {
723
- tag: '650',
724
- ind1: ' ',
725
- ind2: ' ',
726
- subfields: [{
727
- code: 'a',
728
- value: 'Foo Bar Foo Bar Foo Bar'
729
- }, {
730
- code: '2',
731
- value: 'yso'
732
- }]
733
- }]
734
- });
735
- const recordInvalid = new _marcRecord.MarcRecord({
736
- leader: 'foo',
737
- fields: [{
738
- tag: '245',
739
- ind1: ' ',
740
- ind2: ' ',
741
- subfields: [{
742
- code: 'a',
743
- value: 'Fubar'
744
- }]
745
- }, {
746
- tag: '650',
747
- ind1: ' ',
748
- ind2: ' ',
749
- subfields: [{
750
- code: 'a',
751
- value: 'Foo Bar Foo Bar Foo Bar'
752
- }, {
753
- code: '2',
754
- value: 'ysa'
755
- }]
756
- }]
757
- });
758
- const recordInvalidMulti = new _marcRecord.MarcRecord({
759
- leader: 'foo',
760
- fields: [{
761
- tag: '245',
762
- ind1: ' ',
763
- ind2: ' ',
764
- subfields: [{
765
- code: 'a',
766
- value: 'Fubar'
767
- }]
768
- }, {
769
- tag: '648',
770
- ind1: ' ',
771
- ind2: ' ',
772
- subfields: [{
773
- code: '2',
774
- value: 'ysa'
775
- }]
776
- }, {
777
- tag: '650',
778
- ind1: ' ',
779
- ind2: ' ',
780
- subfields: [{
781
- code: '2',
782
- value: 'ysa'
783
- }]
784
- }, {
785
- tag: '650',
786
- ind1: ' ',
787
- ind2: ' ',
788
- subfields: [{
789
- code: '2',
790
- value: 'ysa'
791
- }]
792
- }, {
793
- tag: '651',
794
- ind1: ' ',
795
- ind2: ' ',
796
- subfields: [{
797
- code: '2',
798
- value: 'ysa'
799
- }]
800
- }, {
801
- tag: '655',
802
- ind1: ' ',
803
- ind2: ' ',
804
- subfields: [{
805
- code: '2',
806
- value: 'ysa'
807
- }]
808
- }]
809
- });
810
- const recordInvalidFixed = new _marcRecord.MarcRecord({
811
- leader: 'foo',
812
- fields: [{
813
- tag: '245',
814
- ind1: ' ',
815
- ind2: ' ',
816
- subfields: [{
817
- code: 'a',
818
- value: 'Fubar'
819
- }]
820
- }]
821
- });
822
- it('Finds the record valid (spec)', async () => {
823
- const validator = await (0, _fieldExclusion.default)(config);
824
- const {
825
- valid,
826
- message
827
- } = await validator.validate(recordValid);
828
- expect({
829
- valid,
830
- message
831
- }).to.eql({
832
- valid: true,
833
- message: []
834
- });
835
- });
836
- it('Finds the record invalid (spec)', async () => {
837
- const validator = await (0, _fieldExclusion.default)(config);
838
- const {
839
- valid,
840
- message
841
- } = await validator.validate(recordInvalid);
842
- expect({
843
- valid,
844
- message
845
- }).to.eql({
846
- valid: false,
847
- message: ['Field $650 should be excluded']
848
- });
849
- });
850
- it('Finds the record invalid (spec)', async () => {
851
- const validator = await (0, _fieldExclusion.default)(config);
852
- const {
853
- valid,
854
- message
855
- } = await validator.validate(recordInvalidMulti);
856
- expect({
857
- valid,
858
- message
859
- }).to.eql({
860
- valid: false,
861
- message: ['Field $648 should be excluded', 'Field $650 should be excluded', 'Field $650 should be excluded', 'Field $651 should be excluded', 'Field $655 should be excluded']
862
- });
863
- });
864
- it('Repairs invalid multi record', async () => {
865
- const validator = await (0, _fieldExclusion.default)(config);
866
- await validator.fix(recordInvalidMulti);
867
- expect(recordInvalidMulti.equalsTo(recordInvalidFixed)).to.eql(true);
868
- });
869
- it('Repairs invalid record', async () => {
870
- const validator = await (0, _fieldExclusion.default)(config);
871
- await validator.fix(recordInvalid);
872
- expect(recordInvalid.equalsTo(recordInvalidFixed)).to.eql(true);
873
- });
874
- });
875
-
876
- // More special cases to increase coverage
877
- describe('#validate: Custom configuration', () => {
878
- const configInd = [{
879
- tag: /^500$/u,
880
- ind1: /^8$/u,
881
- ind2: /^4$/u
882
- }];
883
- const configValue = [{
884
- tag: /^500$/u,
885
- value: /^8$/u
886
- }];
887
- const recordValid = new _marcRecord.MarcRecord({
888
- leader: 'foo',
889
- fields: [{
890
- tag: '500',
891
- ind1: '8',
892
- ind2: '0',
893
- subfields: [{
894
- code: 'a',
895
- value: 'Foo Bar Foo Bar Foo Bar'
896
- }, {
897
- code: '9',
898
- value: 'ALMA<KEEP>'
899
- }]
900
- }]
901
- });
902
- const recordIndInvalid = new _marcRecord.MarcRecord({
903
- leader: 'foo',
904
- fields: [{
905
- tag: '245',
906
- ind1: ' ',
907
- ind2: ' ',
908
- subfields: [{
909
- code: 'a',
910
- value: 'Fubar'
911
- }]
912
- }, {
913
- tag: '500',
914
- ind1: '8',
915
- ind2: '4',
916
- subfields: [{
917
- code: 'a',
918
- value: 'Foo Bar Foo Bar Foo Bar'
919
- }, {
920
- code: '9',
921
- value: 'ALMA<KEEP>'
922
- }]
923
- }]
924
- });
925
- const recordValueInvalid = new _marcRecord.MarcRecord({
926
- leader: 'foo',
927
- fields: [{
928
- tag: '245',
929
- ind1: ' ',
930
- ind2: ' ',
931
- subfields: [{
932
- code: 'a',
933
- value: 'Fubar'
934
- }]
935
- }, {
936
- tag: '500',
937
- value: '8'
938
- }]
939
- });
940
- const recordInvalidFixed = new _marcRecord.MarcRecord({
941
- leader: 'foo',
942
- fields: [{
943
- tag: '245',
944
- ind1: ' ',
945
- ind2: ' ',
946
- subfields: [{
947
- code: 'a',
948
- value: 'Fubar'
949
- }]
950
- }]
951
- });
952
- it('Finds the record valid - Ind1&Ind2', async () => {
953
- const validator = await (0, _fieldExclusion.default)(configInd);
954
- const {
955
- valid,
956
- message
957
- } = await validator.validate(recordValid);
958
- expect({
959
- valid,
960
- message
961
- }).to.eql({
962
- valid: true,
963
- message: []
964
- });
965
- });
966
- it('Finds the record valid - Value', async () => {
967
- const validator = await (0, _fieldExclusion.default)(configValue);
968
- const {
969
- valid,
970
- message
971
- } = await validator.validate(recordValid);
972
- expect({
973
- valid,
974
- message
975
- }).to.eql({
976
- valid: true,
977
- message: []
978
- });
979
- });
980
- it('Finds the record invalid - Ind', async () => {
981
- const validator = await (0, _fieldExclusion.default)(configInd);
982
- const {
983
- valid,
984
- message
985
- } = await validator.validate(recordIndInvalid);
986
- expect({
987
- valid,
988
- message
989
- }).to.eql({
990
- valid: false,
991
- message: ['Field $500 should be excluded']
992
- });
993
- });
994
- it('Finds the record invalid - Value', async () => {
995
- const validator = await (0, _fieldExclusion.default)(configValue);
996
- const {
997
- valid,
998
- message
999
- } = await validator.validate(recordValueInvalid);
1000
- expect({
1001
- valid,
1002
- message
1003
- }).to.eql({
1004
- valid: false,
1005
- message: ['Field $500 should be excluded']
1006
- });
1007
- });
1008
- it('Repairs invalid record - Ind', async () => {
1009
- const validator = await (0, _fieldExclusion.default)(configInd);
1010
- await validator.fix(recordIndInvalid);
1011
- expect(recordIndInvalid.equalsTo(recordInvalidFixed)).to.eql(true);
1012
- });
1013
- it('Repairs invalid record - Value', async () => {
1014
- const validator = await (0, _fieldExclusion.default)(configValue);
1015
- await validator.fix(recordValueInvalid);
1016
- expect(recordValueInvalid.equalsTo(recordInvalidFixed)).to.eql(true);
1017
- });
1018
- });
1019
- describe('Dependencies', () => {
1020
- it('Finds the record invalid because dependency matches', async () => {
1021
- const config = [{
1022
- tag: /^041$/u,
1023
- dependencies: [{
1024
- leader: /^.{6}a/u
1025
- }]
1026
- }];
1027
- const record = new _marcRecord.MarcRecord({
1028
- leader: '00000cam^a22003372i^4500',
1029
- fields: [{
1030
- tag: '041',
1031
- ind1: ' ',
1032
- ind2: ' ',
1033
- subfields: [{
1034
- code: 'a',
1035
- value: 'Fubar'
1036
- }]
1037
- }]
1038
- });
1039
- const validator = await (0, _fieldExclusion.default)(config);
1040
- const {
1041
- valid,
1042
- message
1043
- } = await validator.validate(record);
1044
- expect({
1045
- valid,
1046
- message
1047
- }).to.eql({
1048
- valid: false,
1049
- message: ['Field $041 should be excluded']
1050
- });
1051
- });
1052
- });
1053
- });
1054
- //# sourceMappingURL=field-exclusion.spec.js.map