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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (545) hide show
  1. package/.github/workflows/melinda-node-tests.yml +1 -1
  2. package/dist/access-rights.js +63 -91
  3. package/dist/access-rights.js.map +7 -1
  4. package/dist/access-rights.test.js +137 -0
  5. package/dist/access-rights.test.js.map +7 -0
  6. package/dist/addMissingField041.js +21 -53
  7. package/dist/addMissingField041.js.map +7 -1
  8. package/dist/addMissingField041.test.js +39 -0
  9. package/dist/addMissingField041.test.js.map +7 -0
  10. package/dist/addMissingField336.js +99 -191
  11. package/dist/addMissingField336.js.map +7 -1
  12. package/dist/addMissingField336.test.js +39 -0
  13. package/dist/addMissingField336.test.js.map +7 -0
  14. package/dist/addMissingField337.js +63 -132
  15. package/dist/addMissingField337.js.map +7 -1
  16. package/dist/addMissingField337.test.js +39 -0
  17. package/dist/addMissingField337.test.js.map +7 -0
  18. package/dist/addMissingField338.js +147 -253
  19. package/dist/addMissingField338.js.map +7 -1
  20. package/dist/addMissingField338.test.js +39 -0
  21. package/dist/addMissingField338.test.js.map +7 -0
  22. package/dist/cyrillux-usemarcon-replacement.js +119 -272
  23. package/dist/cyrillux-usemarcon-replacement.js.map +7 -1
  24. package/dist/cyrillux-usemarcon-replacement.test.js +46 -0
  25. package/dist/cyrillux-usemarcon-replacement.test.js.map +7 -0
  26. package/dist/cyrillux.js +119 -223
  27. package/dist/cyrillux.js.map +7 -1
  28. package/dist/cyrillux.test.js +39 -0
  29. package/dist/cyrillux.test.js.map +7 -0
  30. package/dist/disambiguateSeriesStatements.js +40 -81
  31. package/dist/disambiguateSeriesStatements.js.map +7 -1
  32. package/dist/disambiguateSeriesStatements.test.js +44 -0
  33. package/dist/disambiguateSeriesStatements.test.js.map +7 -0
  34. package/dist/double-commas.js +7 -14
  35. package/dist/double-commas.js.map +7 -1
  36. package/dist/double-commas.test.js +48 -0
  37. package/dist/double-commas.test.js.map +7 -0
  38. package/dist/duplicates-ind1.js +10 -31
  39. package/dist/duplicates-ind1.js.map +7 -1
  40. package/dist/duplicates-ind1.test.js +40 -0
  41. package/dist/duplicates-ind1.test.js.map +7 -0
  42. package/dist/empty-fields.js +10 -22
  43. package/dist/empty-fields.js.map +7 -1
  44. package/dist/empty-fields.test.js +129 -0
  45. package/dist/empty-fields.test.js.map +7 -0
  46. package/dist/ending-punctuation-conf.js +871 -769
  47. package/dist/ending-punctuation-conf.js.map +7 -1
  48. package/dist/ending-punctuation.js +84 -167
  49. package/dist/ending-punctuation.js.map +7 -1
  50. package/dist/ending-punctuation.test.js +2290 -0
  51. package/dist/ending-punctuation.test.js.map +7 -0
  52. package/dist/ending-whitespace.js +10 -35
  53. package/dist/ending-whitespace.js.map +7 -1
  54. package/dist/ending-whitespace.test.js +38 -0
  55. package/dist/ending-whitespace.test.js.map +7 -0
  56. package/dist/field-008-18-34-character-groups.js +40 -125
  57. package/dist/field-008-18-34-character-groups.js.map +7 -1
  58. package/dist/field-008-18-34-character-groups.test.js +45 -0
  59. package/dist/field-008-18-34-character-groups.test.js.map +7 -0
  60. package/dist/field-505-separators.js +19 -39
  61. package/dist/field-505-separators.js.map +7 -1
  62. package/dist/field-505-separators.test.js +45 -0
  63. package/dist/field-505-separators.test.js.map +7 -0
  64. package/dist/field-521-fix.js +19 -47
  65. package/dist/field-521-fix.js.map +7 -1
  66. package/dist/field-521-fix.test.js +44 -0
  67. package/dist/field-521-fix.test.js.map +7 -0
  68. package/dist/field-exclusion.js +37 -91
  69. package/dist/field-exclusion.js.map +7 -1
  70. package/dist/field-exclusion.test.js +821 -0
  71. package/dist/field-exclusion.test.js.map +7 -0
  72. package/dist/field-structure.js +52 -104
  73. package/dist/field-structure.js.map +7 -1
  74. package/dist/field-structure.test.js +587 -0
  75. package/dist/field-structure.test.js.map +7 -0
  76. package/dist/field33XUtils.js +119 -503
  77. package/dist/field33XUtils.js.map +7 -1
  78. package/dist/fields-present.js +11 -23
  79. package/dist/fields-present.js.map +7 -1
  80. package/dist/fields-present.test.js +95 -0
  81. package/dist/fields-present.test.js.map +7 -0
  82. package/dist/fix-33X.js +393 -431
  83. package/dist/fix-33X.js.map +7 -1
  84. package/dist/fix-33X.test.js +39 -0
  85. package/dist/fix-33X.test.js.map +7 -0
  86. package/dist/fix-country-codes.js +20 -50
  87. package/dist/fix-country-codes.js.map +7 -1
  88. package/dist/fix-country-codes.test.js +44 -0
  89. package/dist/fix-country-codes.test.js.map +7 -0
  90. package/dist/fix-language-codes.js +23 -53
  91. package/dist/fix-language-codes.js.map +7 -1
  92. package/dist/fix-language-codes.test.js +38 -0
  93. package/dist/fix-language-codes.test.js.map +7 -0
  94. package/dist/fixRelatorTerms.js +82 -209
  95. package/dist/fixRelatorTerms.js.map +7 -1
  96. package/dist/fixRelatorTerms.test.js +44 -0
  97. package/dist/fixRelatorTerms.test.js.map +7 -0
  98. package/dist/fixed-fields.js +21 -30
  99. package/dist/fixed-fields.js.map +7 -1
  100. package/dist/fixed-fields.test.js +87 -0
  101. package/dist/fixed-fields.test.js.map +7 -0
  102. package/dist/identical-fields.js +8 -24
  103. package/dist/identical-fields.js.map +7 -1
  104. package/dist/identical-fields.test.js +119 -0
  105. package/dist/identical-fields.test.js.map +7 -0
  106. package/dist/index.js +119 -413
  107. package/dist/index.js.map +7 -1
  108. package/dist/indicator-fixes.js +57 -95
  109. package/dist/indicator-fixes.js.map +7 -1
  110. package/dist/indicator-fixes.test.js +42 -0
  111. package/dist/indicator-fixes.test.js.map +7 -0
  112. package/dist/isbn-issn.js +66 -126
  113. package/dist/isbn-issn.js.map +7 -1
  114. package/dist/isbn-issn.test.js +398 -0
  115. package/dist/isbn-issn.test.js.map +7 -0
  116. package/dist/item-language.js +32 -65
  117. package/dist/item-language.js.map +7 -1
  118. package/dist/item-language.test.js +322 -0
  119. package/dist/item-language.test.js.map +7 -0
  120. package/dist/melindaCustomMergeFields.js +5182 -11233
  121. package/dist/melindaCustomMergeFields.js.map +7 -1
  122. package/dist/merge-fields/controlSubfields.js +75 -142
  123. package/dist/merge-fields/controlSubfields.js.map +7 -1
  124. package/dist/merge-fields/counterpartField.js +182 -379
  125. package/dist/merge-fields/counterpartField.js.map +7 -1
  126. package/dist/merge-fields/index.js +15 -49
  127. package/dist/merge-fields/index.js.map +7 -1
  128. package/dist/merge-fields/mergableIndicator.js +18 -51
  129. package/dist/merge-fields/mergableIndicator.js.map +7 -1
  130. package/dist/merge-fields/mergableTag.js +78 -30
  131. package/dist/merge-fields/mergableTag.js.map +7 -1
  132. package/dist/merge-fields/mergeConfig.js +66 -171
  133. package/dist/merge-fields/mergeConfig.js.map +7 -1
  134. package/dist/merge-fields/mergeConstraints.js +323 -1214
  135. package/dist/merge-fields/mergeConstraints.js.map +7 -1
  136. package/dist/merge-fields/mergeField.js +47 -111
  137. package/dist/merge-fields/mergeField.js.map +7 -1
  138. package/dist/merge-fields/mergeIndicator.js +64 -118
  139. package/dist/merge-fields/mergeIndicator.js.map +7 -1
  140. package/dist/merge-fields/mergeOrAddPostprocess.js +14 -38
  141. package/dist/merge-fields/mergeOrAddPostprocess.js.map +7 -1
  142. package/dist/merge-fields/mergeOrAddSubfield.js +62 -104
  143. package/dist/merge-fields/mergeOrAddSubfield.js.map +7 -1
  144. package/dist/merge-fields/mergeSubfield.js +47 -95
  145. package/dist/merge-fields/mergeSubfield.js.map +7 -1
  146. package/dist/merge-fields/removeDuplicateSubfields.js +18 -31
  147. package/dist/merge-fields/removeDuplicateSubfields.js.map +7 -1
  148. package/dist/merge-fields/worldKnowledge.js +15 -40
  149. package/dist/merge-fields/worldKnowledge.js.map +7 -1
  150. package/dist/merge-fields.test.js +44 -0
  151. package/dist/merge-fields.test.js.map +7 -0
  152. package/dist/mergeField500Lisapainokset.js +28 -57
  153. package/dist/mergeField500Lisapainokset.js.map +7 -1
  154. package/dist/mergeField500Lisapainokset.test.js +44 -0
  155. package/dist/mergeField500Lisapainokset.test.js.map +7 -0
  156. package/dist/mergeRelatorTermFields.js +33 -69
  157. package/dist/mergeRelatorTermFields.js.map +7 -1
  158. package/dist/mergeRelatorTermFields.test.js +44 -0
  159. package/dist/mergeRelatorTermFields.test.js.map +7 -0
  160. package/dist/modernize-502.js +23 -55
  161. package/dist/modernize-502.js.map +7 -1
  162. package/dist/modernize-502.test.js +38 -0
  163. package/dist/modernize-502.test.js.map +7 -0
  164. package/dist/multiple-subfield-0.js +23 -48
  165. package/dist/multiple-subfield-0.js.map +7 -1
  166. package/dist/multiple-subfield-0.test.js +44 -0
  167. package/dist/multiple-subfield-0.test.js.map +7 -0
  168. package/dist/non-breaking-space.js +11 -32
  169. package/dist/non-breaking-space.js.map +7 -1
  170. package/dist/non-breaking-space.test.js +38 -0
  171. package/dist/non-breaking-space.test.js.map +7 -0
  172. package/dist/normalize-dashes.js +18 -37
  173. package/dist/normalize-dashes.js.map +7 -1
  174. package/dist/normalize-dashes.test.js +44 -0
  175. package/dist/normalize-dashes.test.js.map +7 -0
  176. package/dist/normalize-identifiers.js +54 -140
  177. package/dist/normalize-identifiers.js.map +7 -1
  178. package/dist/normalize-identifiers.test.js +44 -0
  179. package/dist/normalize-identifiers.test.js.map +7 -0
  180. package/dist/normalize-qualifying-information.js +23 -48
  181. package/dist/normalize-qualifying-information.js.map +7 -1
  182. package/dist/normalize-qualifying-information.test.js +44 -0
  183. package/dist/normalize-qualifying-information.test.js.map +7 -0
  184. package/dist/normalize-utf8-diacritics.js +19 -105
  185. package/dist/normalize-utf8-diacritics.js.map +7 -1
  186. package/dist/normalize-utf8-diacritics.test.js +44 -0
  187. package/dist/normalize-utf8-diacritics.test.js.map +7 -0
  188. package/dist/normalizeFieldForComparison.js +67 -158
  189. package/dist/normalizeFieldForComparison.js.map +7 -1
  190. package/dist/normalizeSubfieldValueForComparison.js +37 -77
  191. package/dist/normalizeSubfieldValueForComparison.js.map +7 -1
  192. package/dist/prepublicationUtils.js +58 -111
  193. package/dist/prepublicationUtils.js.map +7 -1
  194. package/dist/punctuation/index.js +56 -72
  195. package/dist/punctuation/index.js.map +7 -1
  196. package/dist/punctuation/rules/aut.js +372 -331
  197. package/dist/punctuation/rules/aut.js.map +7 -1
  198. package/dist/punctuation/rules/bib.js +420 -373
  199. package/dist/punctuation/rules/bib.js.map +7 -1
  200. package/dist/punctuation/rules/index.js +7 -21
  201. package/dist/punctuation/rules/index.js.map +7 -1
  202. package/dist/punctuation.test.js +44 -0
  203. package/dist/punctuation.test.js.map +7 -0
  204. package/dist/punctuation2.js +251 -800
  205. package/dist/punctuation2.js.map +7 -1
  206. package/dist/punctuation2.test.js +44 -0
  207. package/dist/punctuation2.test.js.map +7 -0
  208. package/dist/reindexSubfield6OccurenceNumbers.js +61 -96
  209. package/dist/reindexSubfield6OccurenceNumbers.js.map +7 -1
  210. package/dist/reindexSubfield6OccurenceNumbers.test.js +44 -0
  211. package/dist/reindexSubfield6OccurenceNumbers.test.js.map +7 -0
  212. package/dist/removeDuplicateDataFields.js +102 -202
  213. package/dist/removeDuplicateDataFields.js.map +7 -1
  214. package/dist/removeDuplicateDataFields.test.js +44 -0
  215. package/dist/removeDuplicateDataFields.test.js.map +7 -0
  216. package/dist/removeInferiorDataFields.js +103 -227
  217. package/dist/removeInferiorDataFields.js.map +7 -1
  218. package/dist/removeInferiorDataFields.test.js +44 -0
  219. package/dist/removeInferiorDataFields.test.js.map +7 -0
  220. package/dist/resolvable-ext-references-melinda.js +25 -60
  221. package/dist/resolvable-ext-references-melinda.js.map +7 -1
  222. package/dist/resolvable-ext-references-melinda.test.js +160 -0
  223. package/dist/resolvable-ext-references-melinda.test.js.map +7 -0
  224. package/dist/resolveOrphanedSubfield6s.js +33 -64
  225. package/dist/resolveOrphanedSubfield6s.js.map +7 -1
  226. package/dist/resolveOrphanedSubfield6s.test.js +44 -0
  227. package/dist/resolveOrphanedSubfield6s.test.js.map +7 -0
  228. package/dist/sanitize-vocabulary-source-codes.js +27 -55
  229. package/dist/sanitize-vocabulary-source-codes.js.map +7 -1
  230. package/dist/sanitize-vocabulary-source-codes.test.js +45 -0
  231. package/dist/sanitize-vocabulary-source-codes.test.js.map +7 -0
  232. package/dist/sort-tags.js +13 -25
  233. package/dist/sort-tags.js.map +7 -1
  234. package/dist/sort-tags.test.js +261 -0
  235. package/dist/sort-tags.test.js.map +7 -0
  236. package/dist/sortFields.js +152 -222
  237. package/dist/sortFields.js.map +7 -1
  238. package/dist/sortFields.test.js +44 -0
  239. package/dist/sortFields.test.js.map +7 -0
  240. package/dist/sortRelatorTerms.js +30 -68
  241. package/dist/sortRelatorTerms.js.map +7 -1
  242. package/dist/sortRelatorTerms.test.js +44 -0
  243. package/dist/sortRelatorTerms.test.js.map +7 -0
  244. package/dist/sortSubfields.js +102 -255
  245. package/dist/sortSubfields.js.map +7 -1
  246. package/dist/sortSubfields.test.js +44 -0
  247. package/dist/sortSubfields.test.js.map +7 -0
  248. package/dist/stripPunctuation.js +13 -36
  249. package/dist/stripPunctuation.js.map +7 -1
  250. package/dist/stripPunctuation.test.js +44 -0
  251. package/dist/stripPunctuation.test.js.map +7 -0
  252. package/dist/subfield-exclusion.js +28 -75
  253. package/dist/subfield-exclusion.js.map +7 -1
  254. package/dist/subfield-exclusion.test.js +471 -0
  255. package/dist/subfield-exclusion.test.js.map +7 -0
  256. package/dist/subfield6Utils.js +107 -269
  257. package/dist/subfield6Utils.js.map +7 -1
  258. package/dist/subfield8Utils.js +26 -50
  259. package/dist/subfield8Utils.js.map +7 -1
  260. package/dist/subfieldValueNormalizations.js +40 -74
  261. package/dist/subfieldValueNormalizations.js.map +7 -1
  262. package/dist/subfieldValueNormalizations.test.js +45 -0
  263. package/dist/subfieldValueNormalizations.test.js.map +7 -0
  264. package/dist/sync-007-and-300.js +22 -53
  265. package/dist/sync-007-and-300.js.map +7 -1
  266. package/dist/sync-007-and-300.test.js +44 -0
  267. package/dist/sync-007-and-300.test.js.map +7 -0
  268. package/dist/translate-terms.js +67 -155
  269. package/dist/translate-terms.js.map +7 -1
  270. package/dist/translate-terms.test.js +44 -0
  271. package/dist/translate-terms.test.js.map +7 -0
  272. package/dist/typeOfDate-008.js +10 -25
  273. package/dist/typeOfDate-008.js.map +7 -1
  274. package/dist/typeOfDate-008.test.js +40 -0
  275. package/dist/typeOfDate-008.test.js.map +7 -0
  276. package/dist/unicode-decomposition.js +94 -107
  277. package/dist/unicode-decomposition.js.map +7 -1
  278. package/dist/unicode-decomposition.test.js +94 -0
  279. package/dist/unicode-decomposition.test.js.map +7 -0
  280. package/dist/update-field-540.js +30 -75
  281. package/dist/update-field-540.js.map +7 -1
  282. package/dist/update-field-540.test.js +44 -0
  283. package/dist/update-field-540.test.js.map +7 -0
  284. package/dist/urn.js +55 -128
  285. package/dist/urn.js.map +7 -1
  286. package/dist/urn.test.js +44 -0
  287. package/dist/urn.test.js.map +7 -0
  288. package/dist/utils.js +72 -126
  289. package/dist/utils.js.map +7 -1
  290. package/eslint.config.mjs +1 -2
  291. package/package.json +21 -93
  292. package/src/access-rights.js +1 -1
  293. package/src/{access-rights.spec.js → access-rights.test.js} +9 -10
  294. package/src/addMissingField041.js +1 -1
  295. package/src/{addMissingField336.spec.js → addMissingField041.test.js} +13 -14
  296. package/src/addMissingField336.js +3 -3
  297. package/src/{addMissingField041.spec.js → addMissingField336.test.js} +13 -14
  298. package/src/addMissingField337.js +2 -2
  299. package/src/{addMissingField337.spec.js → addMissingField337.test.js} +13 -14
  300. package/src/addMissingField338.js +2 -2
  301. package/src/{addMissingField338.spec.js → addMissingField338.test.js} +13 -14
  302. package/src/cyrillux-usemarcon-replacement.js +18 -18
  303. package/src/cyrillux-usemarcon-replacement.test.js +55 -0
  304. package/src/cyrillux.js +19 -12
  305. package/src/{cyrillux.spec.js → cyrillux.test.js} +13 -14
  306. package/src/disambiguateSeriesStatements.js +2 -2
  307. package/src/{disambiguateSeriesStatements.spec.js → disambiguateSeriesStatements.test.js} +12 -13
  308. package/src/double-commas.js +1 -1
  309. package/src/{double-commas.spec.js → double-commas.test.js} +9 -11
  310. package/src/duplicates-ind1.js +1 -1
  311. package/src/{duplicates-ind1.spec.js → duplicates-ind1.test.js} +12 -13
  312. package/src/{empty-fields.spec.js → empty-fields.test.js} +11 -13
  313. package/src/ending-punctuation.js +1 -1
  314. package/src/{ending-punctuation.spec.js → ending-punctuation.test.js} +172 -173
  315. package/src/{ending-whitespace.spec.js → ending-whitespace.test.js} +12 -13
  316. package/src/field-008-18-34-character-groups.js +2 -2
  317. package/src/{field-008-18-34-character-groups.spec.js → field-008-18-34-character-groups.test.js} +13 -13
  318. package/src/field-505-separators.js +3 -3
  319. package/src/{field-505-separators.spec.js → field-505-separators.test.js} +16 -14
  320. package/src/field-521-fix.js +2 -2
  321. package/src/{field-521-fix.spec.js → field-521-fix.test.js} +12 -13
  322. package/src/field-exclusion.js +1 -1
  323. package/src/{field-exclusion.spec.js → field-exclusion.test.js} +60 -57
  324. package/src/{field-structure.spec.js → field-structure.test.js} +29 -29
  325. package/src/{fields-present.spec.js → fields-present.test.js} +12 -15
  326. package/src/fix-33X.js +4 -4
  327. package/src/{fix-33X.spec.js → fix-33X.test.js} +13 -14
  328. package/src/fix-country-codes.js +1 -1
  329. package/src/{fix-country-codes.spec.js → fix-country-codes.test.js} +12 -13
  330. package/src/fix-language-codes.js +5 -5
  331. package/src/{fix-language-codes.spec.js → fix-language-codes.test.js} +12 -13
  332. package/src/fixRelatorTerms.js +5 -5
  333. package/src/{fixRelatorTerms.spec.js → fixRelatorTerms.test.js} +13 -13
  334. package/src/{fixed-fields.spec.js → fixed-fields.test.js} +11 -14
  335. package/src/identical-fields.js +1 -1
  336. package/src/{identical-fields.spec.js → identical-fields.test.js} +9 -11
  337. package/src/indicator-fixes.js +3 -3
  338. package/src/{indicator-fixes.spec.js → indicator-fixes.test.js} +9 -12
  339. package/src/isbn-issn.js +1 -1
  340. package/src/{isbn-issn.spec.js → isbn-issn.test.js} +20 -22
  341. package/src/{item-language.spec.js → item-language.test.js} +21 -22
  342. package/src/merge-fields/controlSubfields.js +1 -1
  343. package/src/merge-fields/counterpartField.js +8 -9
  344. package/src/merge-fields/index.js +1 -1
  345. package/src/merge-fields/mergableIndicator.js +1 -1
  346. package/src/merge-fields/mergeField.js +6 -6
  347. package/src/merge-fields/mergeIndicator.js +1 -1
  348. package/src/merge-fields/mergeOrAddPostprocess.js +4 -4
  349. package/src/merge-fields/mergeOrAddSubfield.js +2 -2
  350. package/src/merge-fields/mergeSubfield.js +4 -4
  351. package/src/merge-fields/removeDuplicateSubfields.js +2 -2
  352. package/src/{merge-fields.spec.js → merge-fields.test.js} +12 -13
  353. package/src/{mergeField500Lisapainokset.spec.js → mergeField500Lisapainokset.test.js} +12 -13
  354. package/src/mergeRelatorTermFields.js +5 -7
  355. package/src/{mergeRelatorTermFields.spec.js → mergeRelatorTermFields.test.js} +12 -13
  356. package/src/modernize-502.js +1 -1
  357. package/src/{modernize-502.spec.js → modernize-502.test.js} +12 -13
  358. package/src/multiple-subfield-0.js +3 -3
  359. package/src/{multiple-subfield-0.spec.js → multiple-subfield-0.test.js} +13 -13
  360. package/src/{non-breaking-space.spec.js → non-breaking-space.test.js} +12 -13
  361. package/src/normalize-dashes.js +2 -2
  362. package/src/{normalize-dashes.spec.js → normalize-dashes.test.js} +12 -13
  363. package/src/normalize-identifiers.js +1 -1
  364. package/src/{normalize-identifiers.spec.js → normalize-identifiers.test.js} +12 -13
  365. package/src/normalize-qualifying-information.js +2 -2
  366. package/src/{normalize-qualifying-information.spec.js → normalize-qualifying-information.test.js} +12 -13
  367. package/src/normalize-utf8-diacritics.js +2 -2
  368. package/src/{normalize-utf8-diacritics.spec.js → normalize-utf8-diacritics.test.js} +13 -13
  369. package/src/normalizeFieldForComparison.js +6 -6
  370. package/src/normalizeSubfieldValueForComparison.js +1 -1
  371. package/src/prepublicationUtils.js +4 -4
  372. package/src/punctuation/index.js +1 -1
  373. package/src/punctuation/rules/index.js +2 -2
  374. package/src/{punctuation.spec.js → punctuation.test.js} +12 -13
  375. package/src/punctuation2.js +4 -4
  376. package/src/{punctuation2.spec.js → punctuation2.test.js} +12 -13
  377. package/src/reindexSubfield6OccurenceNumbers.js +5 -7
  378. package/src/{reindexSubfield6OccurenceNumbers.spec.js → reindexSubfield6OccurenceNumbers.test.js} +12 -13
  379. package/src/removeDuplicateDataFields.js +11 -19
  380. package/src/{removeDuplicateDataFields.spec.js → removeDuplicateDataFields.test.js} +12 -13
  381. package/src/removeInferiorDataFields.js +11 -11
  382. package/src/{removeInferiorDataFields.spec.js → removeInferiorDataFields.test.js} +13 -13
  383. package/src/resolvable-ext-references-melinda.js +1 -1
  384. package/src/{resolvable-ext-references-melinda.spec.js → resolvable-ext-references-melinda.test.js} +42 -27
  385. package/src/resolveOrphanedSubfield6s.js +5 -5
  386. package/src/{resolveOrphanedSubfield6s.spec.js → resolveOrphanedSubfield6s.test.js} +13 -13
  387. package/src/sanitize-vocabulary-source-codes.js +4 -4
  388. package/src/{sanitize-vocabulary-source-codes.spec.js → sanitize-vocabulary-source-codes.test.js} +16 -14
  389. package/src/{sort-tags.spec.js → sort-tags.test.js} +9 -11
  390. package/src/sortFields.js +4 -4
  391. package/src/{sortFields.spec.js → sortFields.test.js} +12 -13
  392. package/src/sortRelatorTerms.js +3 -3
  393. package/src/{sortRelatorTerms.spec.js → sortRelatorTerms.test.js} +13 -13
  394. package/src/sortSubfields.js +1 -1
  395. package/src/{sortSubfields.spec.js → sortSubfields.test.js} +13 -13
  396. package/src/stripPunctuation.js +3 -3
  397. package/src/{stripPunctuation.spec.js → stripPunctuation.test.js} +13 -13
  398. package/src/subfield-exclusion.js +1 -1
  399. package/src/{subfield-exclusion.spec.js → subfield-exclusion.test.js} +45 -36
  400. package/src/subfield6Utils.js +6 -10
  401. package/src/subfield8Utils.js +4 -4
  402. package/src/subfieldValueNormalizations.js +3 -3
  403. package/src/{subfieldValueNormalizations.spec.js → subfieldValueNormalizations.test.js} +18 -14
  404. package/src/sync-007-and-300.js +2 -2
  405. package/src/{sync-007-and-300.spec.js → sync-007-and-300.test.js} +13 -13
  406. package/src/translate-terms.js +3 -3
  407. package/src/{translate-terms.spec.js → translate-terms.test.js} +13 -13
  408. package/src/{typeOfDate-008.spec.js → typeOfDate-008.test.js} +12 -13
  409. package/src/{unicode-decomposition.spec.js → unicode-decomposition.test.js} +10 -16
  410. package/src/update-field-540.js +2 -2
  411. package/src/{update-field-540.spec.js → update-field-540.test.js} +13 -10
  412. package/src/urn.js +2 -2
  413. package/src/{urn.spec.js → urn.test.js} +12 -13
  414. package/src/utils.js +3 -3
  415. package/test-fixtures/field-505-separators/03/expectedResult.json +3 -1
  416. package/test-fixtures/field-505-separators/03/record.json +3 -0
  417. package/test-fixtures/normalize-subfield-value/01/metadata.json +4 -1
  418. package/test-fixtures/normalize-subfield-value/01/record.json +3 -0
  419. package/test-fixtures/normalize-subfield-value/02/expectedResult.json +3 -1
  420. package/test-fixtures/normalize-subfield-value/02/metadata.json +2 -1
  421. package/test-fixtures/normalize-subfield-value/02/record.json +3 -0
  422. package/test-fixtures/sanitize-vocabulary-source-codes/f03/expectedResult.json +3 -1
  423. package/test-fixtures/sanitize-vocabulary-source-codes/f04/expectedResult.json +3 -1
  424. package/test-fixtures/sanitize-vocabulary-source-codes/v04/metadata.json +1 -4
  425. package/test-fixtures/sanitize-vocabulary-source-codes/v04/record.json +1 -1
  426. package/dist/access-rights.spec.js +0 -195
  427. package/dist/access-rights.spec.js.map +0 -1
  428. package/dist/addMissingField041.spec.js +0 -45
  429. package/dist/addMissingField041.spec.js.map +0 -1
  430. package/dist/addMissingField336.spec.js +0 -45
  431. package/dist/addMissingField336.spec.js.map +0 -1
  432. package/dist/addMissingField337.spec.js +0 -43
  433. package/dist/addMissingField337.spec.js.map +0 -1
  434. package/dist/addMissingField338.spec.js +0 -45
  435. package/dist/addMissingField338.spec.js.map +0 -1
  436. package/dist/cyrillux-usemarcon-replacement.spec.js +0 -45
  437. package/dist/cyrillux-usemarcon-replacement.spec.js.map +0 -1
  438. package/dist/cyrillux.spec.js +0 -46
  439. package/dist/cyrillux.spec.js.map +0 -1
  440. package/dist/disambiguateSeriesStatements.spec.js +0 -51
  441. package/dist/disambiguateSeriesStatements.spec.js.map +0 -1
  442. package/dist/double-commas.spec.js +0 -73
  443. package/dist/double-commas.spec.js.map +0 -1
  444. package/dist/duplicates-ind1.spec.js +0 -45
  445. package/dist/duplicates-ind1.spec.js.map +0 -1
  446. package/dist/empty-fields.spec.js +0 -118
  447. package/dist/empty-fields.spec.js.map +0 -1
  448. package/dist/ending-punctuation.spec.js +0 -2654
  449. package/dist/ending-punctuation.spec.js.map +0 -1
  450. package/dist/ending-whitespace.spec.js +0 -42
  451. package/dist/ending-whitespace.spec.js.map +0 -1
  452. package/dist/field-008-18-34-character-groups.spec.js +0 -51
  453. package/dist/field-008-18-34-character-groups.spec.js.map +0 -1
  454. package/dist/field-505-separators.spec.js +0 -51
  455. package/dist/field-505-separators.spec.js.map +0 -1
  456. package/dist/field-521-fix.spec.js +0 -51
  457. package/dist/field-521-fix.spec.js.map +0 -1
  458. package/dist/field-exclusion.spec.js +0 -1054
  459. package/dist/field-exclusion.spec.js.map +0 -1
  460. package/dist/field-structure.spec.js +0 -535
  461. package/dist/field-structure.spec.js.map +0 -1
  462. package/dist/fields-present.spec.js +0 -121
  463. package/dist/fields-present.spec.js.map +0 -1
  464. package/dist/fix-33X.spec.js +0 -45
  465. package/dist/fix-33X.spec.js.map +0 -1
  466. package/dist/fix-country-codes.spec.js +0 -51
  467. package/dist/fix-country-codes.spec.js.map +0 -1
  468. package/dist/fix-language-codes.spec.js +0 -44
  469. package/dist/fix-language-codes.spec.js.map +0 -1
  470. package/dist/fixRelatorTerms.spec.js +0 -51
  471. package/dist/fixRelatorTerms.spec.js.map +0 -1
  472. package/dist/fixed-fields.spec.js +0 -140
  473. package/dist/fixed-fields.spec.js.map +0 -1
  474. package/dist/identical-fields.spec.js +0 -99
  475. package/dist/identical-fields.spec.js.map +0 -1
  476. package/dist/indicator-fixes.spec.js +0 -51
  477. package/dist/indicator-fixes.spec.js.map +0 -1
  478. package/dist/isbn-issn.spec.js +0 -595
  479. package/dist/isbn-issn.spec.js.map +0 -1
  480. package/dist/item-language.spec.js +0 -306
  481. package/dist/item-language.spec.js.map +0 -1
  482. package/dist/melindaCustomMergeFields.json +0 -5120
  483. package/dist/merge-fields.spec.js +0 -51
  484. package/dist/merge-fields.spec.js.map +0 -1
  485. package/dist/mergeField500Lisapainokset.spec.js +0 -51
  486. package/dist/mergeField500Lisapainokset.spec.js.map +0 -1
  487. package/dist/mergeRelatorTermFields.spec.js +0 -51
  488. package/dist/mergeRelatorTermFields.spec.js.map +0 -1
  489. package/dist/modernize-502.spec.js +0 -49
  490. package/dist/modernize-502.spec.js.map +0 -1
  491. package/dist/multiple-subfield-0.spec.js +0 -51
  492. package/dist/multiple-subfield-0.spec.js.map +0 -1
  493. package/dist/non-breaking-space.spec.js +0 -42
  494. package/dist/non-breaking-space.spec.js.map +0 -1
  495. package/dist/normalize-dashes.spec.js +0 -51
  496. package/dist/normalize-dashes.spec.js.map +0 -1
  497. package/dist/normalize-identifiers.spec.js +0 -51
  498. package/dist/normalize-identifiers.spec.js.map +0 -1
  499. package/dist/normalize-qualifying-information.spec.js +0 -51
  500. package/dist/normalize-qualifying-information.spec.js.map +0 -1
  501. package/dist/normalize-utf8-diacritics.spec.js +0 -51
  502. package/dist/normalize-utf8-diacritics.spec.js.map +0 -1
  503. package/dist/punctuation.spec.js +0 -51
  504. package/dist/punctuation.spec.js.map +0 -1
  505. package/dist/punctuation2.spec.js +0 -51
  506. package/dist/punctuation2.spec.js.map +0 -1
  507. package/dist/reindexSubfield6OccurenceNumbers.spec.js +0 -51
  508. package/dist/reindexSubfield6OccurenceNumbers.spec.js.map +0 -1
  509. package/dist/removeDuplicateDataFields.spec.js +0 -51
  510. package/dist/removeDuplicateDataFields.spec.js.map +0 -1
  511. package/dist/removeInferiorDataFields.spec.js +0 -51
  512. package/dist/removeInferiorDataFields.spec.js.map +0 -1
  513. package/dist/resolvable-ext-references-melinda.spec.js +0 -166
  514. package/dist/resolvable-ext-references-melinda.spec.js.map +0 -1
  515. package/dist/resolveOrphanedSubfield6s.spec.js +0 -51
  516. package/dist/resolveOrphanedSubfield6s.spec.js.map +0 -1
  517. package/dist/sanitize-vocabulary-source-codes.spec.js +0 -51
  518. package/dist/sanitize-vocabulary-source-codes.spec.js.map +0 -1
  519. package/dist/sort-tags.spec.js +0 -207
  520. package/dist/sort-tags.spec.js.map +0 -1
  521. package/dist/sortFields.spec.js +0 -51
  522. package/dist/sortFields.spec.js.map +0 -1
  523. package/dist/sortRelatorTerms.spec.js +0 -51
  524. package/dist/sortRelatorTerms.spec.js.map +0 -1
  525. package/dist/sortSubfields.spec.js +0 -52
  526. package/dist/sortSubfields.spec.js.map +0 -1
  527. package/dist/stripPunctuation.spec.js +0 -51
  528. package/dist/stripPunctuation.spec.js.map +0 -1
  529. package/dist/subfield-exclusion.spec.js +0 -523
  530. package/dist/subfield-exclusion.spec.js.map +0 -1
  531. package/dist/subfieldValueNormalizations.spec.js +0 -51
  532. package/dist/subfieldValueNormalizations.spec.js.map +0 -1
  533. package/dist/sync-007-and-300.spec.js +0 -51
  534. package/dist/sync-007-and-300.spec.js.map +0 -1
  535. package/dist/translate-terms.spec.js +0 -51
  536. package/dist/translate-terms.spec.js.map +0 -1
  537. package/dist/typeOfDate-008.spec.js +0 -47
  538. package/dist/typeOfDate-008.spec.js.map +0 -1
  539. package/dist/unicode-decomposition.spec.js +0 -91
  540. package/dist/unicode-decomposition.spec.js.map +0 -1
  541. package/dist/update-field-540.spec.js +0 -51
  542. package/dist/update-field-540.spec.js.map +0 -1
  543. package/dist/urn.spec.js +0 -52
  544. package/dist/urn.spec.js.map +0 -1
  545. package/src/cyrillux-usemarcon-replacement.spec.js +0 -47
@@ -1 +0,0 @@
1
- {"version":3,"file":"field-exclusion.spec.js","names":["_chai","_interopRequireDefault","require","_chaiAsPromised","_marcRecord","_fieldExclusion","e","__esModule","default","expect","chai","use","chaiAsPromised","describe","it","config","validator","validatorFactory","to","be","an","that","has","any","keys","description","a","validate","tag","subfields","code","value","error","with","property","ind1","unidentified","recordValid","MarcRecord","leader","fields","ind2","recordInvalid","recordInvalidDouble","recordInvalidFixed","valid","message","eql","fix","equalsTo","recordInvalidMulti","configInd","configValue","recordIndInvalid","recordValueInvalid","dependencies","record"],"sources":["../src/field-exclusion.spec.js"],"sourcesContent":["import chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/field-exclusion';\n\nconst {expect} = chai;\nchai.use(chaiAsPromised);\n\n// Factory validation\ndescribe('field-exclusion', () => {\n describe('#validate: Check configuration validation', () => {\n it('Creates a validator from simple config', async () => {\n const config = [/^500$/u];\n\n const validator = await validatorFactory(config);\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 it('Creates a validator from complex config', async () => {\n const config = [\n {\n tag: /^500$/u,\n subfields: [{code: /9/u, value: /^(?!FENNI<KEEP>).*$/u}]\n }\n ];\n\n const validator = await validatorFactory(config);\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 it('Fails to create a validator from invalid config - tag', async () => {\n const config = [\n {\n tag: '500',\n subfields: [{code: /9/u, value: /^(?!FENNI<KEEP>).*$/u}]\n }\n ];\n\n try {\n await validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - invalid data type for: tag');\n }\n });\n\n it('Fails to create a validator from invalid config - msising array', async () => {\n const config = {\n tag: '500',\n subfields: [{code: /9/u, value: /^(?!FENNI<KEEP>).*$/u}]\n };\n\n try {\n await validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration array not provided');\n }\n });\n\n it('Fails to create a validator from invalid config - code', async () => {\n const config = [\n {\n tag: /^500$/u,\n subfields: [{code: 9, value: /^(?!FENNI<KEEP>).*$/u}]\n }\n ];\n\n try {\n await validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - invalid data type for: code');\n }\n });\n\n it('Fails to create a validator from invalid config - value', async () => {\n const config = [\n {\n tag: /^500$/u,\n subfields: [{code: /9/u, value: 'Fenni'}]\n }\n ];\n\n try {\n await validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - invalid data type for: value');\n }\n });\n\n it('Fails to create a validator from invalid config - exclusion: value, ind1', async () => {\n const config = [\n {\n tag: /^500$/u,\n value: /^500$/u,\n ind1: /^500$/u,\n subfields: [{code: /9/u, value: /^(?!FENNI<KEEP>).*$/u}]\n }\n ];\n\n try {\n await validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - excluded element');\n }\n });\n\n it('Fails to create a validator from invalid config - missing mandatory: tag', async () => {\n const config = [\n {\n value: /^500$/u,\n subfields: [{code: /9/u, value: /^(?!FENNI<KEEP>).*$/u}]\n }\n ];\n\n try {\n await validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - missing mandatory element: tag');\n }\n });\n\n it('Fails to create a validator from invalid config - subfield not object: array', async () => {\n const config = [\n {\n tag: /^500$/u,\n subfields: [\n ['/9/', '/^(?!FENNI<KEEP>).*$/'],\n {value: /^(?!FENNI<KEEP>).*$/u}\n ]\n }\n ];\n\n try {\n await validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - subfield: /9/,/^(?!FENNI<KEEP>).*$/ not object');\n }\n });\n\n it('Fails to create a validator from invalid config - subfield not object: string', async () => {\n const config = [\n {\n tag: /^500$/u,\n subfields: [\n '/9/',\n '/^(?!FENNI<KEEP>).*$/',\n {value: /^(?!FENNI<KEEP>).*$/u}\n ]\n }\n ];\n\n try {\n await validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - subfield: /9/ not object');\n }\n });\n\n it('Fails to create a validator from invalid config - missing mandatory: subfield.code', async () => {\n const config = [\n {\n tag: /^500$/u,\n subfields: [\n {code: /9/u, value: /^(?!FENNI<KEEP>).*$/u},\n {value: /^(?!FENNI<KEEP>).*$/u}\n ]\n }\n ];\n\n try {\n await validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - missing mandatory element: code');\n }\n });\n\n it('Fails to create a validator from invalid config - unidentified field: unidentified', async () => {\n const config = [\n {\n tag: /^500$/u,\n unidentified: /^500$/u,\n subfields: [\n {code: /9/u, value: /^(?!FENNI<KEEP>).*$/u},\n {value: /^(?!FENNI<KEEP>).*$/u}\n ]\n }\n ];\n\n try {\n await validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - unidentified value: unidentified');\n }\n });\n });\n\n // Simple configuration https://github.com/NatLibFi/marc-record-validators-melinda/issues/45\n describe('#validate: Simple configuration (spec)', () => {\n const config = [\n {\n tag: /^500$/u\n }\n ];\n\n const recordValid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n const recordInvalid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '500',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidDouble = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '500',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }, {\n tag: '500',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidFixed = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n it('Finds the record valid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record invalid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $500 should be excluded']});\n });\n\n it('Finds the record invalid - double', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalidDouble);\n expect({valid, message}).to.eql({valid: false, message: ['Field $500 should be excluded', 'Field $500 should be excluded']});\n });\n\n it('Repairs invalid record', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalid);\n expect(recordInvalid.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n\n it('Repairs invalid record - double', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalidDouble);\n expect(recordInvalidDouble.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n });\n\n // Simple multi tag configuration\n describe('#validate: Simple multi tag configuration (spec)', () => {\n const config = [\n {\n tag: /^(648|650|651|655)$/u\n }\n ];\n\n const recordValid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n const recordInvalid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '648',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidDouble = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '648',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }, {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidFixed = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n it('Finds the record valid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record invalid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $648 should be excluded']});\n });\n\n it('Finds the record invalid - double', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalidDouble);\n expect({valid, message}).to.eql({valid: false, message: ['Field $648 should be excluded', 'Field $650 should be excluded']});\n });\n\n it('Repairs invalid record', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalid);\n expect(recordInvalid.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n\n it('Repairs invalid record - double', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalidDouble);\n expect(recordInvalidDouble.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n });\n\n // Simple multi tag configuration\n describe('#validate: Simple multi tag configuration - No object (spec)', () => {\n const config = [/^(648|650|651|655)$/u];\n\n const recordValid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n const recordInvalid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '648',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidDouble = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '648',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }, {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidFixed = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n it('Finds the record valid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record invalid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $648 should be excluded']});\n });\n\n it('Finds the record invalid - double', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalidDouble);\n expect({valid, message}).to.eql({valid: false, message: ['Field $648 should be excluded', 'Field $650 should be excluded']});\n });\n\n it('Repairs invalid record', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalid);\n expect(recordInvalid.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n\n it('Repairs invalid record - double', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalidDouble);\n expect(recordInvalidDouble.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n });\n\n\n // Complex configuration https://github.com/NatLibFi/marc-record-validators-melinda/issues/45\n describe('#validate: Complex configuration (spec)', () => {\n const config = [\n {\n tag: /^500$/u,\n subfields: [{code: /9/u, value: /^(?!FENNI<KEEP>).*$/u}]\n }\n ];\n\n const recordValid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '500',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '9', value: 'FENNI<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '500',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidFixed = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n it('Finds the record valid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record invalid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $500 should be excluded']});\n });\n\n it('Repairs invalid record', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalid);\n expect(recordInvalid.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n });\n\n // Complex multi tag configuration\n describe('#validate: Complex multi tag configuration (spec)', () => {\n const config = [\n {\n tag: /^(648|650|651|655)$/u,\n subfields: [{code: /^2$/u, value: /^(ysa|musa|allars|cilla)$/u}]\n }\n ];\n\n const recordValid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '2', value: 'yso'}\n ]\n }\n ]\n });\n\n const recordInvalid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '2', value: 'ysa'}\n ]\n }\n ]\n });\n\n const recordInvalidMulti = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '648',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: '2', value: 'ysa'}]\n }, {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: '2', value: 'ysa'}]\n }, {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: '2', value: 'ysa'}]\n }, {\n tag: '651',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: '2', value: 'ysa'}]\n }, {\n tag: '655',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: '2', value: 'ysa'}]\n }\n ]\n });\n\n const recordInvalidFixed = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n it('Finds the record valid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record invalid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $650 should be excluded']});\n });\n\n it('Finds the record invalid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalidMulti);\n expect({valid, message}).to.eql({valid: false, message: [\n 'Field $648 should be excluded',\n 'Field $650 should be excluded',\n 'Field $650 should be excluded',\n 'Field $651 should be excluded',\n 'Field $655 should be excluded'\n ]});\n });\n\n it('Repairs invalid multi record', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalidMulti);\n expect(recordInvalidMulti.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n\n it('Repairs invalid record', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalid);\n expect(recordInvalid.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n });\n\n // More special cases to increase coverage\n describe('#validate: Custom configuration', () => {\n const configInd = [\n {\n tag: /^500$/u,\n ind1: /^8$/u,\n ind2: /^4$/u\n }\n ];\n\n const configValue = [\n {\n tag: /^500$/u,\n value: /^8$/u\n }\n ];\n\n const recordValid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '500',\n ind1: '8',\n ind2: '0',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordIndInvalid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '500',\n ind1: '8',\n ind2: '4',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordValueInvalid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '500',\n value: '8'\n }\n ]\n });\n\n const recordInvalidFixed = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n it('Finds the record valid - Ind1&Ind2', async () => {\n const validator = await validatorFactory(configInd);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record valid - Value', async () => {\n const validator = await validatorFactory(configValue);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record invalid - Ind', async () => {\n const validator = await validatorFactory(configInd);\n const {valid, message} = await validator.validate(recordIndInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $500 should be excluded']});\n });\n\n it('Finds the record invalid - Value', async () => {\n const validator = await validatorFactory(configValue);\n const {valid, message} = await validator.validate(recordValueInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $500 should be excluded']});\n });\n\n it('Repairs invalid record - Ind', async () => {\n const validator = await validatorFactory(configInd);\n await validator.fix(recordIndInvalid);\n expect(recordIndInvalid.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n\n it('Repairs invalid record - Value', async () => {\n const validator = await validatorFactory(configValue);\n await validator.fix(recordValueInvalid);\n expect(recordValueInvalid.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n });\n\n describe('Dependencies', () => {\n it('Finds the record invalid because dependency matches', async () => {\n const config = [\n {\n tag: /^041$/u,\n dependencies: [{leader: /^.{6}a/u}]\n }\n ];\n\n const record = new MarcRecord({\n leader: '00000cam^a22003372i^4500',\n fields: [\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(record);\n\n expect({valid, message}).to.eql({valid: false, message: ['Field $041 should be excluded']});\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -1,535 +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 _fieldStructure = _interopRequireDefault(require("../src/field-structure"));
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-structure', () => {
15
- it('Creates a validator', async () => {
16
- const config = [{
17
- tag: /^035$/u,
18
- ind1: /^0$/u,
19
- ind2: /^1$/u
20
- }, {
21
- tag: /^100$/u,
22
- subfields: {
23
- a: {
24
- maxOccurrence: 1
25
- }
26
- }
27
- }];
28
- const validator = await (0, _fieldStructure.default)(config);
29
- expect(validator).to.be.an('object').that.has.any.keys('description', 'validate');
30
- expect(validator.description).to.be.a('string');
31
- expect(validator.validate).to.be.a('function');
32
- });
33
- describe('#configuration', () => {
34
- it('Throws an error when config array not provided', () => {
35
- try {
36
- (0, _fieldStructure.default)();
37
- } catch (error) {
38
- expect(error).to.be.an('error').with.property('message', 'Configuration array not provided');
39
- }
40
- });
41
- it('Throws an error when config array has unidentified field', () => {
42
- const config = [{
43
- leader: /^035$/u,
44
- tags: /^035$/u
45
- }];
46
- try {
47
- (0, _fieldStructure.default)(config);
48
- } catch (error) {
49
- expect(error).to.be.an('error').with.property('message', 'Configuration not valid - unidentified value: tags');
50
- }
51
- });
52
- it('Throws an error when config array has field with incorrect data type', () => {
53
- const config = [{
54
- leader: /^035$/u,
55
- tag: 35
56
- }];
57
- try {
58
- (0, _fieldStructure.default)(config);
59
- } catch (error) {
60
- expect(error).to.be.an('error').with.property('message', 'Configuration not valid - invalid data type for: tag');
61
- }
62
- });
63
- it('Throws an error when config array has excluded element', () => {
64
- const config = [{
65
- leader: /^035$/u,
66
- tag: /^035$/u
67
- }];
68
- try {
69
- (0, _fieldStructure.default)(config);
70
- } catch (error) {
71
- expect(error).to.be.an('error').with.property('message', 'Configuration not valid - excluded element');
72
- }
73
- });
74
- it('Throws an error when config subfields not object', () => {
75
- const config = [{
76
- tag: /^001$/u,
77
- valuePattern: /\d+/u
78
- }, {
79
- tag: /^245$/u,
80
- strict: true,
81
- subfields: 'This should be Object'
82
- }];
83
- try {
84
- (0, _fieldStructure.default)(config);
85
- } catch (error) {
86
- expect(error).to.be.an('error').with.property('message', 'Configuration not valid - subfields not object');
87
- }
88
- });
89
- });
90
- it('Should find the record valid because no fields match the config', async () => {
91
- const config = [{
92
- tag: /^FOO$/u,
93
- valuePattern: /bar/u
94
- }];
95
- const record = new _marcRecord.MarcRecord({
96
- leader: '',
97
- fields: [{
98
- tag: '001',
99
- value: '123456'
100
- }]
101
- });
102
- const validator = await (0, _fieldStructure.default)(config);
103
- const result = await validator.validate(record);
104
- expect(result).to.eql({
105
- valid: true
106
- });
107
- });
108
-
109
- // Indicators and subfields validation
110
- describe('#validate: Indicators and subfields', () => {
111
- const config = [{
112
- tag: /^035$/u,
113
- ind1: /^0$/u,
114
- ind2: /^1$/u
115
- }, {
116
- tag: /^100$/u,
117
- subfields: {
118
- a: {
119
- maxOccurrence: 1
120
- }
121
- }
122
- }];
123
- const recordValid = new _marcRecord.MarcRecord({
124
- leader: '',
125
- fields: [{
126
- tag: '001',
127
- value: '123456'
128
- }, {
129
- tag: '035',
130
- ind1: '0',
131
- ind2: '1',
132
- subfields: [{
133
- code: 'a',
134
- value: 'foo'
135
- }]
136
- }, {
137
- tag: '100',
138
- ind1: ' ',
139
- ind2: ' ',
140
- subfields: [{
141
- code: 'a',
142
- value: 'bar'
143
- }, {
144
- code: 'b',
145
- value: 'fubar'
146
- }]
147
- }]
148
- });
149
- const recordInvalidMany = new _marcRecord.MarcRecord({
150
- leader: '',
151
- fields: [{
152
- tag: '001',
153
- value: '123456'
154
- }, {
155
- tag: '035',
156
- ind1: '1',
157
- ind2: '1',
158
- subfields: [{
159
- code: 'a',
160
- value: 'foo'
161
- }]
162
- }, {
163
- tag: '100',
164
- ind1: ' ',
165
- ind2: ' ',
166
- subfields: [{
167
- code: 'a',
168
- value: 'bar'
169
- }, {
170
- code: 'b',
171
- value: 'fubar'
172
- }, {
173
- code: 'a',
174
- value: 'barfoo'
175
- }]
176
- }]
177
- });
178
- it('Finds the record valid', async () => {
179
- const validator = await (0, _fieldStructure.default)(config);
180
- const result = await validator.validate(recordValid);
181
- expect(result).to.eql({
182
- valid: true
183
- });
184
- });
185
- it('Finds the record invalid: Too many subfields', async () => {
186
- const validator = await (0, _fieldStructure.default)(config);
187
- const result = await validator.validate(recordInvalidMany);
188
- expect(result).to.eql({
189
- valid: false
190
- });
191
- });
192
- });
193
-
194
- // Patterns and mandatory & strict subfields
195
- describe('#validate: Patterns and mandatory & strict subfields', () => {
196
- const config = [{
197
- tag: /^001$/u,
198
- valuePattern: /\d+/u
199
- }, {
200
- tag: /^245$/u,
201
- strict: true,
202
- subfields: {
203
- a: {
204
- required: true,
205
- maxOccurrence: 1,
206
- pattern: /\w+/u
207
- },
208
- b: {
209
- maxOccurrence: 1,
210
- pattern: /\w+/u
211
- }
212
- }
213
- }];
214
- const recordValid = new _marcRecord.MarcRecord({
215
- leader: '',
216
- fields: [{
217
- tag: '001',
218
- value: '123456'
219
- }, {
220
- tag: '100',
221
- ind1: ' ',
222
- ind2: ' ',
223
- subfields: [{
224
- code: 'a',
225
- value: 'bar'
226
- }]
227
- }, {
228
- tag: '245',
229
- ind1: ' ',
230
- ind2: ' ',
231
- subfields: [{
232
- code: 'a',
233
- value: 'foo'
234
- }, {
235
- code: 'b',
236
- value: 'bar'
237
- }]
238
- }]
239
- });
240
- const recordInvalidExtra = new _marcRecord.MarcRecord({
241
- leader: '',
242
- fields: [{
243
- tag: '001',
244
- value: '123456a'
245
- }, {
246
- tag: '100',
247
- ind1: ' ',
248
- ind2: ' ',
249
- subfields: [{
250
- code: 'a',
251
- value: 'bar'
252
- }]
253
- }, {
254
- tag: '245',
255
- ind1: ' ',
256
- ind2: ' ',
257
- subfields: [{
258
- code: 'a',
259
- value: 'foo'
260
- }, {
261
- code: 'b',
262
- value: 'bar'
263
- }, {
264
- code: 'c',
265
- value: 'fubar'
266
- }]
267
- }]
268
- });
269
- const recordInvalidTooMany = new _marcRecord.MarcRecord({
270
- leader: '',
271
- fields: [{
272
- tag: '001',
273
- value: '123456a'
274
- }, {
275
- tag: '100',
276
- ind1: ' ',
277
- ind2: ' ',
278
- subfields: [{
279
- code: 'a',
280
- value: 'bar'
281
- }]
282
- }, {
283
- tag: '245',
284
- ind1: ' ',
285
- ind2: ' ',
286
- subfields: [{
287
- code: 'a',
288
- value: 'foo'
289
- }, {
290
- code: 'b',
291
- value: 'bar'
292
- }, {
293
- code: 'a',
294
- value: 'fubar'
295
- }]
296
- }]
297
- });
298
- const recordInvalidRegExp = new _marcRecord.MarcRecord({
299
- leader: '',
300
- fields: [{
301
- tag: '001',
302
- value: '123456a'
303
- }, {
304
- tag: '100',
305
- ind1: ' ',
306
- ind2: ' ',
307
- subfields: [{
308
- code: 'a',
309
- value: 'bar'
310
- }]
311
- }, {
312
- tag: '245',
313
- ind1: ' ',
314
- ind2: ' ',
315
- subfields: [{
316
- code: 'a',
317
- value: 'ää'
318
- }, {
319
- code: 'b',
320
- value: 'bar'
321
- }]
322
- }]
323
- });
324
- const recordInvalidMissing = new _marcRecord.MarcRecord({
325
- leader: '',
326
- fields: [{
327
- tag: '100',
328
- ind1: ' ',
329
- ind2: ' ',
330
- subfields: [{
331
- code: 'a',
332
- value: 'bar'
333
- }]
334
- }, {
335
- tag: '245',
336
- ind1: ' ',
337
- ind2: ' ',
338
- subfields: [{
339
- code: 'a',
340
- value: 'ää'
341
- }, {
342
- code: 'b',
343
- value: 'bar'
344
- }]
345
- }]
346
- });
347
- const recordInvalidMissingSubfield = new _marcRecord.MarcRecord({
348
- leader: '',
349
- fields: [{
350
- tag: '001',
351
- value: '123456'
352
- }, {
353
- tag: '100',
354
- ind1: ' ',
355
- ind2: ' ',
356
- subfields: [{
357
- code: 'a',
358
- value: 'bar'
359
- }]
360
- }, {
361
- tag: '245',
362
- ind1: ' ',
363
- ind2: ' ',
364
- subfields: [{
365
- code: 'b',
366
- value: 'bar'
367
- }]
368
- }]
369
- });
370
- it('Finds the record valid', async () => {
371
- const validator = await (0, _fieldStructure.default)(config);
372
- const result = await validator.validate(recordValid);
373
- expect(result).to.eql({
374
- valid: true
375
- });
376
- });
377
- it('Finds the record invalid: Extra field in strict', async () => {
378
- const validator = await (0, _fieldStructure.default)(config);
379
- const result = await validator.validate(recordInvalidExtra);
380
- expect(result).to.eql({
381
- valid: false
382
- });
383
- });
384
- it('Finds the record invalid: Too many occurances', async () => {
385
- const validator = await (0, _fieldStructure.default)(config);
386
- const result = await validator.validate(recordInvalidTooMany);
387
- expect(result).to.eql({
388
- valid: false
389
- });
390
- });
391
- it('Finds the record invalid: Invalid RegExp', async () => {
392
- const validator = await (0, _fieldStructure.default)(config);
393
- const result = await validator.validate(recordInvalidRegExp);
394
- expect(result).to.eql({
395
- valid: false
396
- });
397
- });
398
- it('Finds the record invalid: Missing field', async () => {
399
- const validator = await (0, _fieldStructure.default)(config);
400
- const result = await validator.validate(recordInvalidMissing);
401
- expect(result).to.eql({
402
- valid: false
403
- });
404
- });
405
- it('Finds the record invalid: Missing subfield', async () => {
406
- const validator = await (0, _fieldStructure.default)(config);
407
- const result = await validator.validate(recordInvalidMissingSubfield);
408
- expect(result).to.eql({
409
- valid: false
410
- });
411
- });
412
- });
413
-
414
- // Dependencies
415
- describe('#validate: Dependencies', () => {
416
- const config = [{
417
- leader: /^.{6}s/u,
418
- dependencies: [{
419
- tag: /^773$/u,
420
- subfields: {
421
- 7: /^nnas$/u
422
- }
423
- }]
424
- }];
425
- const recordValid = new _marcRecord.MarcRecord({
426
- leader: '63ab75sfoo122myhgh',
427
- fields: [{
428
- tag: '001',
429
- value: '123456'
430
- }, {
431
- tag: '245',
432
- ind1: ' ',
433
- ind2: ' ',
434
- subfields: [{
435
- code: 'a',
436
- value: 'foo'
437
- }]
438
- }, {
439
- tag: '773',
440
- ind1: ' ',
441
- ind2: ' ',
442
- subfields: [{
443
- code: '7',
444
- value: 'nnas'
445
- }, {
446
- code: 'w',
447
- value: '789101112'
448
- }]
449
- }]
450
- });
451
- const recordInvalid = new _marcRecord.MarcRecord({
452
- leader: '63ab75afoo122myhgh',
453
- fields: [{
454
- tag: '001',
455
- value: '123456'
456
- }, {
457
- tag: '245',
458
- ind1: ' ',
459
- ind2: ' ',
460
- subfields: [{
461
- code: 'a',
462
- value: 'foo'
463
- }]
464
- }, {
465
- tag: '773',
466
- ind1: ' ',
467
- ind2: ' ',
468
- subfields: [{
469
- code: '7',
470
- value: 'nnas'
471
- }, {
472
- code: 'w',
473
- value: '789101112'
474
- }]
475
- }]
476
- });
477
- it('Finds the record valid', async () => {
478
- const validator = await (0, _fieldStructure.default)(config);
479
- const result = await validator.validate(recordValid);
480
- expect(result).to.eql({
481
- valid: true
482
- });
483
- });
484
- it('Finds the record invalid', async () => {
485
- const validator = await (0, _fieldStructure.default)(config);
486
- const result = await validator.validate(recordInvalid);
487
- expect(result).to.eql({
488
- valid: false
489
- });
490
- });
491
- it('Find the record valid (Dependency on leader)', async () => {
492
- const validator = await (0, _fieldStructure.default)([{
493
- tag: /^007$/u,
494
- dependencies: [{
495
- leader: /^.{6}[at]/u
496
- }]
497
- }]);
498
- const result = await validator.validate(new _marcRecord.MarcRecord({
499
- leader: '00000ccm^a22003372i^4500',
500
- fields: [{
501
- tag: '001',
502
- value: '123456'
503
- }, {
504
- tag: '245',
505
- value: 'foobar'
506
- }]
507
- }));
508
- expect(result).to.eql({
509
- valid: true
510
- });
511
- });
512
- it('Find the record invalid (Dependency on leader)', async () => {
513
- const validator = await (0, _fieldStructure.default)([{
514
- tag: /^007$/u,
515
- dependencies: [{
516
- leader: /^.{6}[at]/u
517
- }]
518
- }]);
519
- const result = await validator.validate(new _marcRecord.MarcRecord({
520
- leader: '00000cam^a22003372i^4500',
521
- fields: [{
522
- tag: '001',
523
- value: '123456'
524
- }, {
525
- tag: '245',
526
- value: 'foobar'
527
- }]
528
- }));
529
- expect(result).to.eql({
530
- valid: false
531
- });
532
- });
533
- });
534
- });
535
- //# sourceMappingURL=field-structure.spec.js.map