@natlibfi/marc-record-validators-melinda 3.2.0 → 3.3.14-alpha.3

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 (593) hide show
  1. package/.github/CODEOWNERS +2 -0
  2. package/.github/dependabot.yml +40 -0
  3. package/.github/workflows/melinda-node-tests.yml +61 -0
  4. package/LICENSE.txt +21 -661
  5. package/README.md +4 -5
  6. package/dist/access-rights.js +94 -0
  7. package/dist/access-rights.js.map +1 -0
  8. package/dist/access-rights.spec.js +150 -0
  9. package/dist/access-rights.spec.js.map +1 -0
  10. package/dist/double-commas.js +17 -27
  11. package/dist/double-commas.js.map +1 -1
  12. package/dist/double-commas.spec.js +72 -27
  13. package/dist/double-commas.spec.js.map +1 -1
  14. package/dist/duplicates-ind1.js +47 -27
  15. package/dist/duplicates-ind1.js.map +1 -1
  16. package/dist/duplicates-ind1.spec.js +44 -27
  17. package/dist/duplicates-ind1.spec.js.map +1 -1
  18. package/dist/empty-fields.js +79 -29
  19. package/dist/empty-fields.js.map +1 -1
  20. package/dist/empty-fields.spec.js +113 -27
  21. package/dist/empty-fields.spec.js.map +1 -1
  22. package/dist/ending-punctuation-conf.js +772 -129
  23. package/dist/ending-punctuation-conf.js.map +1 -1
  24. package/dist/ending-punctuation.js +291 -72
  25. package/dist/ending-punctuation.js.map +1 -1
  26. package/dist/ending-punctuation.spec.js +2638 -118
  27. package/dist/ending-punctuation.spec.js.map +1 -1
  28. package/dist/ending-whitespace.js +58 -0
  29. package/dist/ending-whitespace.js.map +1 -0
  30. package/dist/ending-whitespace.spec.js +42 -0
  31. package/dist/ending-whitespace.spec.js.map +1 -0
  32. package/dist/field-521-fix.js +96 -0
  33. package/dist/field-521-fix.js.map +1 -0
  34. package/dist/field-521-fix.spec.js +51 -0
  35. package/dist/field-521-fix.spec.js.map +1 -0
  36. package/dist/field-exclusion.js +214 -63
  37. package/dist/field-exclusion.js.map +1 -1
  38. package/dist/field-exclusion.spec.js +1057 -31
  39. package/dist/field-exclusion.spec.js.map +1 -1
  40. package/dist/field-structure.js +249 -78
  41. package/dist/field-structure.js.map +1 -1
  42. package/dist/field-structure.spec.js +534 -31
  43. package/dist/field-structure.spec.js.map +1 -1
  44. package/dist/fields-present.js +31 -27
  45. package/dist/fields-present.js.map +1 -1
  46. package/dist/fields-present.spec.js +120 -27
  47. package/dist/fields-present.spec.js.map +1 -1
  48. package/dist/fixed-fields.js +72 -27
  49. package/dist/fixed-fields.js.map +1 -1
  50. package/dist/fixed-fields.spec.js +139 -27
  51. package/dist/fixed-fields.spec.js.map +1 -1
  52. package/dist/identical-fields.js +42 -28
  53. package/dist/identical-fields.js.map +1 -1
  54. package/dist/identical-fields.spec.js +98 -27
  55. package/dist/identical-fields.spec.js.map +1 -1
  56. package/dist/index.js +202 -27
  57. package/dist/index.js.map +1 -1
  58. package/dist/indicator-fixes.js +191 -0
  59. package/dist/indicator-fixes.js.map +1 -0
  60. package/dist/indicator-fixes.spec.js +51 -0
  61. package/dist/indicator-fixes.spec.js.map +1 -0
  62. package/dist/isbn-issn.js +266 -27
  63. package/dist/isbn-issn.js.map +1 -1
  64. package/dist/isbn-issn.spec.js +594 -27
  65. package/dist/isbn-issn.spec.js.map +1 -1
  66. package/dist/item-language.js +171 -27
  67. package/dist/item-language.js.map +1 -1
  68. package/dist/item-language.spec.js +305 -27
  69. package/dist/item-language.spec.js.map +1 -1
  70. package/dist/mergeField500Lisapainokset.js +155 -0
  71. package/dist/mergeField500Lisapainokset.js.map +1 -0
  72. package/dist/mergeField500Lisapainokset.spec.js +51 -0
  73. package/dist/mergeField500Lisapainokset.spec.js.map +1 -0
  74. package/dist/mergeRelatorTermFields.js +140 -0
  75. package/dist/mergeRelatorTermFields.js.map +1 -0
  76. package/dist/mergeRelatorTermFields.spec.js +51 -0
  77. package/dist/mergeRelatorTermFields.spec.js.map +1 -0
  78. package/dist/multiple-subfield-0.js +120 -0
  79. package/dist/multiple-subfield-0.js.map +1 -0
  80. package/dist/multiple-subfield-0.spec.js +51 -0
  81. package/dist/multiple-subfield-0.spec.js.map +1 -0
  82. package/dist/non-breaking-space.js +61 -0
  83. package/dist/non-breaking-space.js.map +1 -0
  84. package/dist/non-breaking-space.spec.js +42 -0
  85. package/dist/non-breaking-space.spec.js.map +1 -0
  86. package/dist/normalize-identifiers.js +210 -0
  87. package/dist/normalize-identifiers.js.map +1 -0
  88. package/dist/normalize-identifiers.spec.js +51 -0
  89. package/dist/normalize-identifiers.spec.js.map +1 -0
  90. package/dist/normalize-utf8-diacritics.js +140 -0
  91. package/dist/normalize-utf8-diacritics.js.map +1 -0
  92. package/dist/normalize-utf8-diacritics.spec.js +51 -0
  93. package/dist/normalize-utf8-diacritics.spec.js.map +1 -0
  94. package/dist/punctuation/index.js +281 -0
  95. package/dist/punctuation/index.js.map +1 -0
  96. package/dist/punctuation/rules/aut.js +332 -0
  97. package/dist/punctuation/rules/aut.js.map +1 -0
  98. package/dist/punctuation/rules/bib.js +374 -0
  99. package/dist/punctuation/rules/bib.js.map +1 -0
  100. package/dist/punctuation/rules/index.js +21 -0
  101. package/dist/punctuation/rules/index.js.map +1 -0
  102. package/dist/punctuation.spec.js +51 -0
  103. package/dist/punctuation.spec.js.map +1 -0
  104. package/dist/punctuation2.js +726 -0
  105. package/dist/punctuation2.js.map +1 -0
  106. package/dist/punctuation2.spec.js +51 -0
  107. package/dist/punctuation2.spec.js.map +1 -0
  108. package/dist/reindexSubfield6OccurenceNumbers.js +199 -0
  109. package/dist/reindexSubfield6OccurenceNumbers.js.map +1 -0
  110. package/dist/reindexSubfield6OccurenceNumbers.spec.js +51 -0
  111. package/dist/reindexSubfield6OccurenceNumbers.spec.js.map +1 -0
  112. package/dist/removeDuplicateDataFields.js +405 -0
  113. package/dist/removeDuplicateDataFields.js.map +1 -0
  114. package/dist/removeDuplicateDataFields.spec.js +51 -0
  115. package/dist/removeDuplicateDataFields.spec.js.map +1 -0
  116. package/dist/removeInferiorDataFields.js +245 -0
  117. package/dist/removeInferiorDataFields.js.map +1 -0
  118. package/dist/removeInferiorDataFields.spec.js +51 -0
  119. package/dist/removeInferiorDataFields.spec.js.map +1 -0
  120. package/dist/resolvable-ext-references-melinda.js +112 -31
  121. package/dist/resolvable-ext-references-melinda.js.map +1 -1
  122. package/dist/resolvable-ext-references-melinda.spec.js +166 -27
  123. package/dist/resolvable-ext-references-melinda.spec.js.map +1 -1
  124. package/dist/resolveOrphanedSubfield6s.js +116 -0
  125. package/dist/resolveOrphanedSubfield6s.js.map +1 -0
  126. package/dist/resolveOrphanedSubfield6s.spec.js +51 -0
  127. package/dist/resolveOrphanedSubfield6s.spec.js.map +1 -0
  128. package/dist/sanitize-vocabulary-source-codes.js +93 -0
  129. package/dist/sanitize-vocabulary-source-codes.js.map +1 -0
  130. package/dist/sanitize-vocabulary-source-codes.spec.js +51 -0
  131. package/dist/sanitize-vocabulary-source-codes.spec.js.map +1 -0
  132. package/dist/sort-tags.js +53 -27
  133. package/dist/sort-tags.js.map +1 -1
  134. package/dist/sort-tags.spec.js +206 -27
  135. package/dist/sort-tags.spec.js.map +1 -1
  136. package/dist/sortRelatorTerms.js +135 -0
  137. package/dist/sortRelatorTerms.js.map +1 -0
  138. package/dist/sortRelatorTerms.spec.js +51 -0
  139. package/dist/sortRelatorTerms.spec.js.map +1 -0
  140. package/dist/sortSubfields.js +279 -0
  141. package/dist/sortSubfields.js.map +1 -0
  142. package/dist/sortSubfields.spec.js +51 -0
  143. package/dist/sortSubfields.spec.js.map +1 -0
  144. package/dist/stripPunctuation.js +49 -0
  145. package/dist/stripPunctuation.js.map +1 -0
  146. package/dist/stripPunctuation.spec.js +51 -0
  147. package/dist/stripPunctuation.spec.js.map +1 -0
  148. package/dist/subfield-exclusion.js +174 -57
  149. package/dist/subfield-exclusion.js.map +1 -1
  150. package/dist/subfield-exclusion.spec.js +521 -31
  151. package/dist/subfield-exclusion.spec.js.map +1 -1
  152. package/dist/subfield6Utils.js +457 -0
  153. package/dist/subfield6Utils.js.map +1 -0
  154. package/dist/subfield8Utils.js +99 -0
  155. package/dist/subfield8Utils.js.map +1 -0
  156. package/dist/typeOfDate-008.js +48 -0
  157. package/dist/typeOfDate-008.js.map +1 -0
  158. package/dist/typeOfDate-008.spec.js +47 -0
  159. package/dist/typeOfDate-008.spec.js.map +1 -0
  160. package/dist/unicode-decomposition.js +139 -30
  161. package/dist/unicode-decomposition.js.map +1 -1
  162. package/dist/unicode-decomposition.spec.js +90 -27
  163. package/dist/unicode-decomposition.spec.js.map +1 -1
  164. package/dist/update-field-540.js +119 -0
  165. package/dist/update-field-540.js.map +1 -0
  166. package/dist/update-field-540.spec.js +51 -0
  167. package/dist/update-field-540.spec.js.map +1 -0
  168. package/dist/urn.js +185 -0
  169. package/dist/urn.js.map +1 -0
  170. package/dist/urn.spec.js +238 -0
  171. package/dist/urn.spec.js.map +1 -0
  172. package/dist/utils.js +58 -0
  173. package/dist/utils.js.map +1 -0
  174. package/package.json +114 -124
  175. package/src/access-rights.js +84 -0
  176. package/src/access-rights.spec.js +126 -0
  177. package/src/double-commas.js +12 -49
  178. package/src/double-commas.spec.js +50 -82
  179. package/src/duplicates-ind1.js +34 -74
  180. package/src/duplicates-ind1.spec.js +39 -117
  181. package/src/empty-fields.js +62 -74
  182. package/src/empty-fields.spec.js +134 -207
  183. package/src/ending-punctuation-conf.js +679 -644
  184. package/src/ending-punctuation.js +260 -250
  185. package/src/ending-punctuation.spec.js +2545 -2322
  186. package/src/ending-whitespace.js +40 -0
  187. package/src/ending-whitespace.spec.js +44 -0
  188. package/src/field-521-fix.js +92 -0
  189. package/src/field-521-fix.spec.js +52 -0
  190. package/src/field-exclusion.js +197 -215
  191. package/src/field-exclusion.spec.js +883 -481
  192. package/src/field-structure.js +213 -271
  193. package/src/field-structure.spec.js +597 -474
  194. package/src/fields-present.js +19 -49
  195. package/src/fields-present.spec.js +90 -91
  196. package/src/fixed-fields.js +61 -94
  197. package/src/fixed-fields.spec.js +81 -125
  198. package/src/identical-fields.js +29 -48
  199. package/src/identical-fields.spec.js +114 -146
  200. package/src/index.js +41 -46
  201. package/src/indicator-fixes.js +211 -0
  202. package/src/indicator-fixes.spec.js +52 -0
  203. package/src/isbn-issn.js +254 -106
  204. package/src/isbn-issn.spec.js +399 -172
  205. package/src/item-language.js +158 -195
  206. package/src/item-language.spec.js +314 -306
  207. package/src/mergeField500Lisapainokset.js +153 -0
  208. package/src/mergeField500Lisapainokset.spec.js +52 -0
  209. package/src/mergeRelatorTermFields.js +143 -0
  210. package/src/mergeRelatorTermFields.spec.js +52 -0
  211. package/src/multiple-subfield-0.js +129 -0
  212. package/src/multiple-subfield-0.spec.js +52 -0
  213. package/src/non-breaking-space.js +49 -0
  214. package/src/non-breaking-space.spec.js +44 -0
  215. package/src/normalize-identifiers.js +197 -0
  216. package/src/normalize-identifiers.spec.js +52 -0
  217. package/src/normalize-utf8-diacritics.js +141 -0
  218. package/src/normalize-utf8-diacritics.spec.js +52 -0
  219. package/src/punctuation/index.js +292 -0
  220. package/src/punctuation/rules/aut.js +372 -0
  221. package/src/punctuation/rules/bib.js +420 -0
  222. package/src/punctuation/rules/index.js +7 -0
  223. package/src/punctuation.spec.js +52 -0
  224. package/src/punctuation2.js +441 -0
  225. package/src/punctuation2.spec.js +52 -0
  226. package/src/reindexSubfield6OccurenceNumbers.js +210 -0
  227. package/src/reindexSubfield6OccurenceNumbers.spec.js +52 -0
  228. package/src/removeDuplicateDataFields.js +447 -0
  229. package/src/removeDuplicateDataFields.spec.js +52 -0
  230. package/src/removeInferiorDataFields.js +259 -0
  231. package/src/removeInferiorDataFields.spec.js +52 -0
  232. package/src/resolvable-ext-references-melinda.js +89 -122
  233. package/src/resolvable-ext-references-melinda.spec.js +168 -198
  234. package/src/resolveOrphanedSubfield6s.js +115 -0
  235. package/src/resolveOrphanedSubfield6s.spec.js +52 -0
  236. package/src/sanitize-vocabulary-source-codes.js +99 -0
  237. package/src/sanitize-vocabulary-source-codes.spec.js +52 -0
  238. package/src/sort-tags.js +34 -60
  239. package/src/sort-tags.spec.js +256 -290
  240. package/src/sortRelatorTerms.js +142 -0
  241. package/src/sortRelatorTerms.spec.js +52 -0
  242. package/src/sortSubfields.js +176 -0
  243. package/src/sortSubfields.spec.js +52 -0
  244. package/src/stripPunctuation.js +42 -0
  245. package/src/stripPunctuation.spec.js +52 -0
  246. package/src/subfield-exclusion.js +157 -180
  247. package/src/subfield-exclusion.spec.js +507 -453
  248. package/src/subfield6Utils.js +485 -0
  249. package/src/subfield8Utils.js +102 -0
  250. package/src/typeOfDate-008.js +40 -0
  251. package/src/typeOfDate-008.spec.js +47 -0
  252. package/src/unicode-decomposition.js +130 -145
  253. package/src/unicode-decomposition.spec.js +89 -115
  254. package/src/update-field-540.js +99 -0
  255. package/src/update-field-540.spec.js +52 -0
  256. package/src/urn.js +164 -0
  257. package/src/urn.spec.js +231 -0
  258. package/src/utils.js +52 -0
  259. package/test-fixtures/duplicates-ind1/01/expectedResult.json +4 -0
  260. package/test-fixtures/duplicates-ind1/01/metadata.json +4 -0
  261. package/test-fixtures/duplicates-ind1/01/record.json +16 -0
  262. package/test-fixtures/duplicates-ind1/02/expectedResult.json +6 -0
  263. package/test-fixtures/duplicates-ind1/02/metadata.json +4 -0
  264. package/test-fixtures/duplicates-ind1/02/record.json +16 -0
  265. package/test-fixtures/duplicates-ind1/03/expectedResult.json +13 -0
  266. package/test-fixtures/duplicates-ind1/03/metadata.json +6 -0
  267. package/test-fixtures/duplicates-ind1/03/record.json +16 -0
  268. package/test-fixtures/ending-whitespace/01/expectedResult.json +4 -0
  269. package/test-fixtures/ending-whitespace/01/metadata.json +6 -0
  270. package/test-fixtures/ending-whitespace/01/record.json +15 -0
  271. package/test-fixtures/ending-whitespace/02/expectedResult.json +4 -0
  272. package/test-fixtures/ending-whitespace/02/metadata.json +6 -0
  273. package/test-fixtures/ending-whitespace/02/record.json +15 -0
  274. package/test-fixtures/ending-whitespace/03/expectedResult.json +17 -0
  275. package/test-fixtures/ending-whitespace/03/metadata.json +6 -0
  276. package/test-fixtures/ending-whitespace/03/record.json +15 -0
  277. package/test-fixtures/ending-whitespace/04/expectedResult.json +10 -0
  278. package/test-fixtures/ending-whitespace/04/metadata.json +6 -0
  279. package/test-fixtures/ending-whitespace/04/record.json +8 -0
  280. package/test-fixtures/fix521/01/expectedResult.json +6 -0
  281. package/test-fixtures/fix521/01/metadata.json +5 -0
  282. package/test-fixtures/fix521/01/record.json +13 -0
  283. package/test-fixtures/fix521/02/expectedResult.json +15 -0
  284. package/test-fixtures/fix521/02/metadata.json +5 -0
  285. package/test-fixtures/fix521/02/record.json +13 -0
  286. package/test-fixtures/fix521/03/expectedResult.json +5 -0
  287. package/test-fixtures/fix521/03/metadata.json +5 -0
  288. package/test-fixtures/fix521/03/record.json +13 -0
  289. package/test-fixtures/indicator-fixes/01/expectedResult.json +9 -0
  290. package/test-fixtures/indicator-fixes/01/metadata.json +5 -0
  291. package/test-fixtures/indicator-fixes/01/record.json +64 -0
  292. package/test-fixtures/indicator-fixes/02/expectedResult.json +66 -0
  293. package/test-fixtures/indicator-fixes/02/metadata.json +5 -0
  294. package/test-fixtures/indicator-fixes/02/record.json +64 -0
  295. package/test-fixtures/indicator-fixes/03/expectedResult.json +55 -0
  296. package/test-fixtures/indicator-fixes/03/metadata.json +5 -0
  297. package/test-fixtures/indicator-fixes/03/record.json +54 -0
  298. package/test-fixtures/indicator-fixes/04/expectedResult.json +66 -0
  299. package/test-fixtures/indicator-fixes/04/metadata.json +5 -0
  300. package/test-fixtures/indicator-fixes/04/record.json +65 -0
  301. package/test-fixtures/indicator-fixes/05/expectedResult.json +66 -0
  302. package/test-fixtures/indicator-fixes/05/metadata.json +5 -0
  303. package/test-fixtures/indicator-fixes/05/record.json +65 -0
  304. package/test-fixtures/indicator-fixes/06/expectedResult.json +75 -0
  305. package/test-fixtures/indicator-fixes/06/metadata.json +5 -0
  306. package/test-fixtures/indicator-fixes/06/record.json +74 -0
  307. package/test-fixtures/lisapainokset/fixer/01/expectedResult.json +37 -0
  308. package/test-fixtures/lisapainokset/fixer/01/metadata.json +6 -0
  309. package/test-fixtures/lisapainokset/fixer/01/record.json +61 -0
  310. package/test-fixtures/lisapainokset/fixer/02/expectedResult.json +44 -0
  311. package/test-fixtures/lisapainokset/fixer/02/metadata.json +6 -0
  312. package/test-fixtures/lisapainokset/fixer/02/record.json +45 -0
  313. package/test-fixtures/lisapainokset/fixer/03/expectedResult.json +21 -0
  314. package/test-fixtures/lisapainokset/fixer/03/metadata.json +6 -0
  315. package/test-fixtures/lisapainokset/fixer/03/record.json +45 -0
  316. package/test-fixtures/lisapainokset/validator/01/expectedResult.json +7 -0
  317. package/test-fixtures/lisapainokset/validator/01/metadata.json +6 -0
  318. package/test-fixtures/lisapainokset/validator/01/record.json +45 -0
  319. package/test-fixtures/lisapainokset/validator/02/expectedResult.json +6 -0
  320. package/test-fixtures/lisapainokset/validator/02/metadata.json +6 -0
  321. package/test-fixtures/lisapainokset/validator/02/record.json +61 -0
  322. package/test-fixtures/lisapainokset/validator/03/expectedResult.json +4 -0
  323. package/test-fixtures/lisapainokset/validator/03/metadata.json +6 -0
  324. package/test-fixtures/lisapainokset/validator/03/record.json +37 -0
  325. package/test-fixtures/mergeRelatorTermFields/fixer/01/expectedResult.json +14 -0
  326. package/test-fixtures/mergeRelatorTermFields/fixer/01/metadata.json +6 -0
  327. package/test-fixtures/mergeRelatorTermFields/fixer/01/record.json +16 -0
  328. package/test-fixtures/mergeRelatorTermFields/fixer/02/expectedResult.json +17 -0
  329. package/test-fixtures/mergeRelatorTermFields/fixer/02/metadata.json +6 -0
  330. package/test-fixtures/mergeRelatorTermFields/fixer/02/record.json +23 -0
  331. package/test-fixtures/mergeRelatorTermFields/validator/01/expectedResult.json +6 -0
  332. package/test-fixtures/mergeRelatorTermFields/validator/01/metadata.json +6 -0
  333. package/test-fixtures/mergeRelatorTermFields/validator/01/record.json +16 -0
  334. package/test-fixtures/mergeRelatorTermFields/validator/02/expectedResult.json +4 -0
  335. package/test-fixtures/mergeRelatorTermFields/validator/02/metadata.json +6 -0
  336. package/test-fixtures/mergeRelatorTermFields/validator/02/record.json +16 -0
  337. package/test-fixtures/non-breaking-space/01/expectedResult.json +4 -0
  338. package/test-fixtures/non-breaking-space/01/metadata.json +6 -0
  339. package/test-fixtures/non-breaking-space/01/record.json +15 -0
  340. package/test-fixtures/non-breaking-space/02/expectedResult.json +4 -0
  341. package/test-fixtures/non-breaking-space/02/metadata.json +6 -0
  342. package/test-fixtures/non-breaking-space/02/record.json +15 -0
  343. package/test-fixtures/non-breaking-space/03/expectedResult.json +17 -0
  344. package/test-fixtures/non-breaking-space/03/metadata.json +6 -0
  345. package/test-fixtures/non-breaking-space/03/record.json +15 -0
  346. package/test-fixtures/non-breaking-space/04/expectedResult.json +21 -0
  347. package/test-fixtures/non-breaking-space/04/metadata.json +6 -0
  348. package/test-fixtures/non-breaking-space/04/record.json +19 -0
  349. package/test-fixtures/normalize-identifiers/01/expectedResult.json +8 -0
  350. package/test-fixtures/normalize-identifiers/01/metadata.json +5 -0
  351. package/test-fixtures/normalize-identifiers/01/record.json +81 -0
  352. package/test-fixtures/normalize-identifiers/02/expectedResult.json +92 -0
  353. package/test-fixtures/normalize-identifiers/02/metadata.json +5 -0
  354. package/test-fixtures/normalize-identifiers/02/record.json +92 -0
  355. package/test-fixtures/normalize-identifiers/03/expectedResult.json +63 -0
  356. package/test-fixtures/normalize-identifiers/03/metadata.json +5 -0
  357. package/test-fixtures/normalize-identifiers/03/record.json +61 -0
  358. package/test-fixtures/normalize-identifiers/04/expectedResult.json +79 -0
  359. package/test-fixtures/normalize-identifiers/04/metadata.json +5 -0
  360. package/test-fixtures/normalize-identifiers/04/record.json +77 -0
  361. package/test-fixtures/normalize-utf8-diacritics/01/expectedResult.json +7 -0
  362. package/test-fixtures/normalize-utf8-diacritics/01/metadata.json +5 -0
  363. package/test-fixtures/normalize-utf8-diacritics/01/record.json +39 -0
  364. package/test-fixtures/normalize-utf8-diacritics/02/expectedResult.json +41 -0
  365. package/test-fixtures/normalize-utf8-diacritics/02/metadata.json +5 -0
  366. package/test-fixtures/normalize-utf8-diacritics/02/record.json +39 -0
  367. package/test-fixtures/normalize-utf8-diacritics/03/expectedResult.json +5 -0
  368. package/test-fixtures/normalize-utf8-diacritics/03/metadata.json +5 -0
  369. package/test-fixtures/normalize-utf8-diacritics/03/record.json +37 -0
  370. package/test-fixtures/normalize-utf8-diacritics/04/expectedResult.json +41 -0
  371. package/test-fixtures/normalize-utf8-diacritics/04/metadata.json +5 -0
  372. package/test-fixtures/normalize-utf8-diacritics/04/record.json +39 -0
  373. package/test-fixtures/normalize-utf8-diacritics/05/expectedResult.json +41 -0
  374. package/test-fixtures/normalize-utf8-diacritics/05/metadata.json +5 -0
  375. package/test-fixtures/normalize-utf8-diacritics/05/record.json +41 -0
  376. package/test-fixtures/punctuation/01/expectedResult.json +3 -0
  377. package/test-fixtures/punctuation/01/metadata.json +4 -0
  378. package/test-fixtures/punctuation/01/record.json +18 -0
  379. package/test-fixtures/punctuation/02/expectedResult.json +3 -0
  380. package/test-fixtures/punctuation/02/metadata.json +4 -0
  381. package/test-fixtures/punctuation/02/record.json +18 -0
  382. package/test-fixtures/punctuation/03/expectedResult.json +21 -0
  383. package/test-fixtures/punctuation/03/metadata.json +5 -0
  384. package/test-fixtures/punctuation/03/record.json +19 -0
  385. package/test-fixtures/punctuation/04/expectedResult.json +21 -0
  386. package/test-fixtures/punctuation/04/metadata.json +5 -0
  387. package/test-fixtures/punctuation/04/record.json +19 -0
  388. package/test-fixtures/punctuation/05/expectedResult.json +44 -0
  389. package/test-fixtures/punctuation/05/metadata.json +5 -0
  390. package/test-fixtures/punctuation/05/record.json +42 -0
  391. package/test-fixtures/punctuation2/01/expectedResult.json +12 -0
  392. package/test-fixtures/punctuation2/01/metadata.json +6 -0
  393. package/test-fixtures/punctuation2/01/record.json +37 -0
  394. package/test-fixtures/punctuation2/02/expectedResult.json +4 -0
  395. package/test-fixtures/punctuation2/02/metadata.json +6 -0
  396. package/test-fixtures/punctuation2/02/record.json +14 -0
  397. package/test-fixtures/punctuation2/04/expectedResult.json +7 -0
  398. package/test-fixtures/punctuation2/04/metadata.json +6 -0
  399. package/test-fixtures/punctuation2/04/record.json +22 -0
  400. package/test-fixtures/punctuation2/05/expectedResult.json +6 -0
  401. package/test-fixtures/punctuation2/05/metadata.json +6 -0
  402. package/test-fixtures/punctuation2/05/record.json +12 -0
  403. package/test-fixtures/punctuation2/98/expectedResult.json +45 -0
  404. package/test-fixtures/punctuation2/98/metadata.json +6 -0
  405. package/test-fixtures/punctuation2/98/record.json +43 -0
  406. package/test-fixtures/punctuation2/99/expectedResult.json +15 -0
  407. package/test-fixtures/punctuation2/99/metadata.json +6 -0
  408. package/test-fixtures/punctuation2/99/record.json +14 -0
  409. package/test-fixtures/reindex-sf6-occurence-numbers/f01/expectedResult.json +35 -0
  410. package/test-fixtures/reindex-sf6-occurence-numbers/f01/metadata.json +6 -0
  411. package/test-fixtures/reindex-sf6-occurence-numbers/f01/record.json +34 -0
  412. package/test-fixtures/reindex-sf6-occurence-numbers/f02/expectedResult.json +53 -0
  413. package/test-fixtures/reindex-sf6-occurence-numbers/f02/metadata.json +6 -0
  414. package/test-fixtures/reindex-sf6-occurence-numbers/f02/record.json +51 -0
  415. package/test-fixtures/reindex-sf6-occurence-numbers/f03/expectedResult.json +46 -0
  416. package/test-fixtures/reindex-sf6-occurence-numbers/f03/metadata.json +7 -0
  417. package/test-fixtures/reindex-sf6-occurence-numbers/f03/record.json +44 -0
  418. package/test-fixtures/reindex-sf6-occurence-numbers/v01/expectedResult.json +6 -0
  419. package/test-fixtures/reindex-sf6-occurence-numbers/v01/metadata.json +5 -0
  420. package/test-fixtures/reindex-sf6-occurence-numbers/v01/record.json +31 -0
  421. package/test-fixtures/reindex-sf6-occurence-numbers/v02/expectedResult.json +6 -0
  422. package/test-fixtures/reindex-sf6-occurence-numbers/v02/metadata.json +6 -0
  423. package/test-fixtures/reindex-sf6-occurence-numbers/v02/record.json +38 -0
  424. package/test-fixtures/reindex-sf6-occurence-numbers/v03/expectedResult.json +6 -0
  425. package/test-fixtures/reindex-sf6-occurence-numbers/v03/metadata.json +6 -0
  426. package/test-fixtures/reindex-sf6-occurence-numbers/v03/record.json +30 -0
  427. package/test-fixtures/remove-duplicate-datafields/f01/expectedResult.json +35 -0
  428. package/test-fixtures/remove-duplicate-datafields/f01/metadata.json +6 -0
  429. package/test-fixtures/remove-duplicate-datafields/f01/record.json +34 -0
  430. package/test-fixtures/remove-duplicate-datafields/f03/expectedResult.json +20 -0
  431. package/test-fixtures/remove-duplicate-datafields/f03/metadata.json +6 -0
  432. package/test-fixtures/remove-duplicate-datafields/f03/record.json +33 -0
  433. package/test-fixtures/remove-duplicate-datafields/f03b/expectedResult.json +20 -0
  434. package/test-fixtures/remove-duplicate-datafields/f03b/metadata.json +6 -0
  435. package/test-fixtures/remove-duplicate-datafields/f03b/record.json +35 -0
  436. package/test-fixtures/remove-duplicate-datafields/f03c/expectedResult.json +25 -0
  437. package/test-fixtures/remove-duplicate-datafields/f03c/metadata.json +6 -0
  438. package/test-fixtures/remove-duplicate-datafields/f03c/record.json +43 -0
  439. package/test-fixtures/remove-duplicate-datafields/f04/expectedResult.json +31 -0
  440. package/test-fixtures/remove-duplicate-datafields/f04/metadata.json +6 -0
  441. package/test-fixtures/remove-duplicate-datafields/f04/record.json +41 -0
  442. package/test-fixtures/remove-duplicate-datafields/f05/expectedResult.json +23 -0
  443. package/test-fixtures/remove-duplicate-datafields/f05/metadata.json +6 -0
  444. package/test-fixtures/remove-duplicate-datafields/f05/record.json +29 -0
  445. package/test-fixtures/remove-duplicate-datafields/f06/expectedResult.json +24 -0
  446. package/test-fixtures/remove-duplicate-datafields/f06/metadata.json +6 -0
  447. package/test-fixtures/remove-duplicate-datafields/f06/record.json +41 -0
  448. package/test-fixtures/remove-duplicate-datafields/f07/expectedResult.json +15 -0
  449. package/test-fixtures/remove-duplicate-datafields/f07/metadata.json +6 -0
  450. package/test-fixtures/remove-duplicate-datafields/f07/record.json +21 -0
  451. package/test-fixtures/remove-duplicate-datafields/f08/expectedResult.json +21 -0
  452. package/test-fixtures/remove-duplicate-datafields/f08/metadata.json +6 -0
  453. package/test-fixtures/remove-duplicate-datafields/f08/record.json +33 -0
  454. package/test-fixtures/remove-duplicate-datafields/f09/expectedResult.json +6 -0
  455. package/test-fixtures/remove-duplicate-datafields/f09/metadata.json +6 -0
  456. package/test-fixtures/remove-duplicate-datafields/f09/record.json +9 -0
  457. package/test-fixtures/remove-duplicate-datafields/f10/expectedResult.json +15 -0
  458. package/test-fixtures/remove-duplicate-datafields/f10/metadata.json +6 -0
  459. package/test-fixtures/remove-duplicate-datafields/f10/record.json +24 -0
  460. package/test-fixtures/remove-duplicate-datafields/f11/expectedResult.json +30 -0
  461. package/test-fixtures/remove-duplicate-datafields/f11/metadata.json +6 -0
  462. package/test-fixtures/remove-duplicate-datafields/f11/record.json +53 -0
  463. package/test-fixtures/remove-duplicate-datafields/v01/expectedResult.json +6 -0
  464. package/test-fixtures/remove-duplicate-datafields/v01/metadata.json +6 -0
  465. package/test-fixtures/remove-duplicate-datafields/v01/record.json +31 -0
  466. package/test-fixtures/remove-duplicate-datafields/v02/expectedResult.json +10 -0
  467. package/test-fixtures/remove-duplicate-datafields/v02/metadata.json +6 -0
  468. package/test-fixtures/remove-duplicate-datafields/v02/record.json +45 -0
  469. package/test-fixtures/remove-duplicate-datafields/v03/expectedResult.json +6 -0
  470. package/test-fixtures/remove-duplicate-datafields/v03/metadata.json +7 -0
  471. package/test-fixtures/remove-duplicate-datafields/v03/record.json +37 -0
  472. package/test-fixtures/remove-duplicate-datafields/v04/expectedResult.json +8 -0
  473. package/test-fixtures/remove-duplicate-datafields/v04/metadata.json +6 -0
  474. package/test-fixtures/remove-duplicate-datafields/v04/record.json +41 -0
  475. package/test-fixtures/remove-inferior-datafields/f01/expectedResult.json +21 -0
  476. package/test-fixtures/remove-inferior-datafields/f01/metadata.json +6 -0
  477. package/test-fixtures/remove-inferior-datafields/f01/record.json +31 -0
  478. package/test-fixtures/remove-inferior-datafields/f03/expectedResult.json +16 -0
  479. package/test-fixtures/remove-inferior-datafields/f03/metadata.json +6 -0
  480. package/test-fixtures/remove-inferior-datafields/f03/record.json +27 -0
  481. package/test-fixtures/remove-inferior-datafields/f04/expectedResult.json +31 -0
  482. package/test-fixtures/remove-inferior-datafields/f04/metadata.json +6 -0
  483. package/test-fixtures/remove-inferior-datafields/f04/record.json +38 -0
  484. package/test-fixtures/remove-inferior-datafields/f05/expectedResult.json +34 -0
  485. package/test-fixtures/remove-inferior-datafields/f05/metadata.json +6 -0
  486. package/test-fixtures/remove-inferior-datafields/f05/record.json +41 -0
  487. package/test-fixtures/remove-inferior-datafields/f06/expectedResult.json +16 -0
  488. package/test-fixtures/remove-inferior-datafields/f06/metadata.json +6 -0
  489. package/test-fixtures/remove-inferior-datafields/f06/record.json +20 -0
  490. package/test-fixtures/remove-inferior-datafields/v01/expectedResult.json +6 -0
  491. package/test-fixtures/remove-inferior-datafields/v01/metadata.json +6 -0
  492. package/test-fixtures/remove-inferior-datafields/v01/record.json +31 -0
  493. package/test-fixtures/remove-inferior-datafields/v02/expectedResult.json +6 -0
  494. package/test-fixtures/remove-inferior-datafields/v02/metadata.json +6 -0
  495. package/test-fixtures/remove-inferior-datafields/v02/record.json +21 -0
  496. package/test-fixtures/remove-orphanded-sf6s/f01/expectedResult.json +35 -0
  497. package/test-fixtures/remove-orphanded-sf6s/f01/metadata.json +6 -0
  498. package/test-fixtures/remove-orphanded-sf6s/f01/record.json +34 -0
  499. package/test-fixtures/remove-orphanded-sf6s/f02/expectedResult.json +40 -0
  500. package/test-fixtures/remove-orphanded-sf6s/f02/metadata.json +6 -0
  501. package/test-fixtures/remove-orphanded-sf6s/f02/record.json +43 -0
  502. package/test-fixtures/remove-orphanded-sf6s/v01/expectedResult.json +6 -0
  503. package/test-fixtures/remove-orphanded-sf6s/v01/metadata.json +6 -0
  504. package/test-fixtures/remove-orphanded-sf6s/v01/record.json +31 -0
  505. package/test-fixtures/remove-orphanded-sf6s/v02/expectedResult.json +6 -0
  506. package/test-fixtures/remove-orphanded-sf6s/v02/metadata.json +6 -0
  507. package/test-fixtures/remove-orphanded-sf6s/v02/record.json +31 -0
  508. package/test-fixtures/resolvable-ext-references-melinda.js +0 -27
  509. package/test-fixtures/sanitize-vocabulary-source-codes/f01/expectedResult.json +32 -0
  510. package/test-fixtures/sanitize-vocabulary-source-codes/f01/metadata.json +6 -0
  511. package/test-fixtures/sanitize-vocabulary-source-codes/f01/record.json +32 -0
  512. package/test-fixtures/sanitize-vocabulary-source-codes/f02/expectedResult.json +24 -0
  513. package/test-fixtures/sanitize-vocabulary-source-codes/f02/metadata.json +6 -0
  514. package/test-fixtures/sanitize-vocabulary-source-codes/f02/record.json +24 -0
  515. package/test-fixtures/sanitize-vocabulary-source-codes/v01/expectedResult.json +12 -0
  516. package/test-fixtures/sanitize-vocabulary-source-codes/v01/metadata.json +6 -0
  517. package/test-fixtures/sanitize-vocabulary-source-codes/v01/record.json +24 -0
  518. package/test-fixtures/sort-relator-terms/f01/expectedResult.json +23 -0
  519. package/test-fixtures/sort-relator-terms/f01/metadata.json +6 -0
  520. package/test-fixtures/sort-relator-terms/f01/record.json +22 -0
  521. package/test-fixtures/sort-relator-terms/f02/expectedResult.json +26 -0
  522. package/test-fixtures/sort-relator-terms/f02/metadata.json +6 -0
  523. package/test-fixtures/sort-relator-terms/f02/record.json +22 -0
  524. package/test-fixtures/sort-relator-terms/v01/expectedResult.json +5 -0
  525. package/test-fixtures/sort-relator-terms/v01/metadata.json +6 -0
  526. package/test-fixtures/sort-relator-terms/v01/record.json +22 -0
  527. package/test-fixtures/sort-relator-terms/v02/expectedResult.json +6 -0
  528. package/test-fixtures/sort-relator-terms/v02/metadata.json +6 -0
  529. package/test-fixtures/sort-relator-terms/v02/record.json +14 -0
  530. package/test-fixtures/sort-subfields/f01/expectedResult.json +24 -0
  531. package/test-fixtures/sort-subfields/f01/metadata.json +6 -0
  532. package/test-fixtures/sort-subfields/f01/record.json +20 -0
  533. package/test-fixtures/sort-subfields/v01/expectedResult.json +5 -0
  534. package/test-fixtures/sort-subfields/v01/metadata.json +6 -0
  535. package/test-fixtures/sort-subfields/v01/record.json +24 -0
  536. package/test-fixtures/sort-subfields/v02/expectedResult.json +6 -0
  537. package/test-fixtures/sort-subfields/v02/metadata.json +6 -0
  538. package/test-fixtures/sort-subfields/v02/record.json +8 -0
  539. package/test-fixtures/strip-punctuation/01/expectedResult.json +12 -0
  540. package/test-fixtures/strip-punctuation/01/metadata.json +6 -0
  541. package/test-fixtures/strip-punctuation/01/record.json +37 -0
  542. package/test-fixtures/strip-punctuation/02/expectedResult.json +4 -0
  543. package/test-fixtures/strip-punctuation/02/metadata.json +6 -0
  544. package/test-fixtures/strip-punctuation/02/record.json +14 -0
  545. package/test-fixtures/strip-punctuation/04/expectedResult.json +6 -0
  546. package/test-fixtures/strip-punctuation/04/metadata.json +6 -0
  547. package/test-fixtures/strip-punctuation/04/record.json +22 -0
  548. package/test-fixtures/strip-punctuation/05/expectedResult.json +6 -0
  549. package/test-fixtures/strip-punctuation/05/metadata.json +6 -0
  550. package/test-fixtures/strip-punctuation/05/record.json +12 -0
  551. package/test-fixtures/strip-punctuation/98/expectedResult.json +44 -0
  552. package/test-fixtures/strip-punctuation/98/metadata.json +6 -0
  553. package/test-fixtures/strip-punctuation/98/record.json +45 -0
  554. package/test-fixtures/strip-punctuation/99/expectedResult.json +16 -0
  555. package/test-fixtures/strip-punctuation/99/metadata.json +6 -0
  556. package/test-fixtures/strip-punctuation/99/record.json +16 -0
  557. package/test-fixtures/subfield0/f01/expectedResult.json +25 -0
  558. package/test-fixtures/subfield0/f01/metadata.json +6 -0
  559. package/test-fixtures/subfield0/f01/record.json +23 -0
  560. package/test-fixtures/subfield0/f02/expectedResult.json +35 -0
  561. package/test-fixtures/subfield0/f02/metadata.json +6 -0
  562. package/test-fixtures/subfield0/f02/record.json +41 -0
  563. package/test-fixtures/subfield0/f03/expectedResult.json +21 -0
  564. package/test-fixtures/subfield0/f03/metadata.json +7 -0
  565. package/test-fixtures/subfield0/f03/record.json +24 -0
  566. package/test-fixtures/subfield0/v01/expectedResult.json +4 -0
  567. package/test-fixtures/subfield0/v01/metadata.json +6 -0
  568. package/test-fixtures/subfield0/v01/record.json +23 -0
  569. package/test-fixtures/subfield0/v02/expectedResult.json +9 -0
  570. package/test-fixtures/subfield0/v02/metadata.json +6 -0
  571. package/test-fixtures/subfield0/v02/record.json +38 -0
  572. package/test-fixtures/typeOfDate-008/01/expectedResult.json +3 -0
  573. package/test-fixtures/typeOfDate-008/01/metadata.json +4 -0
  574. package/test-fixtures/typeOfDate-008/01/record.json +14 -0
  575. package/test-fixtures/typeOfDate-008/02/expectedResult.json +4 -0
  576. package/test-fixtures/typeOfDate-008/02/metadata.json +4 -0
  577. package/test-fixtures/typeOfDate-008/02/record.json +14 -0
  578. package/test-fixtures/typeOfDate-008/03/expectedResult.json +14 -0
  579. package/test-fixtures/typeOfDate-008/03/metadata.json +5 -0
  580. package/test-fixtures/typeOfDate-008/03/record.json +14 -0
  581. package/test-fixtures/typeOfDate-008/04/expectedResult.json +14 -0
  582. package/test-fixtures/typeOfDate-008/04/metadata.json +5 -0
  583. package/test-fixtures/typeOfDate-008/04/record.json +14 -0
  584. package/test-fixtures/typeOfDate-008/05/expectedResult.json +14 -0
  585. package/test-fixtures/typeOfDate-008/05/metadata.json +5 -0
  586. package/test-fixtures/typeOfDate-008/05/record.json +14 -0
  587. package/test-fixtures/update-field-540/f01/expectedResult.json +23 -0
  588. package/test-fixtures/update-field-540/f01/metadata.json +6 -0
  589. package/test-fixtures/update-field-540/f01/record.json +23 -0
  590. package/test-fixtures/update-field-540/v01/expectedResult.json +7 -0
  591. package/test-fixtures/update-field-540/v01/metadata.json +6 -0
  592. package/test-fixtures/update-field-540/v01/record.json +23 -0
  593. package/.travis.yml +0 -10
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/field-exclusion.spec.js"],"names":["expect","chai","use","chaiAsPromised","describe","it","config","tag","validator","to","be","an","that","has","any","keys","description","a","validate","subfields","code","value","rejectedWith","Error","ind1","unidentified","recordValid","MarcRecord","leader","fields","ind2","recordInvalid","recordInvalidDouble","recordInvalidFixed","result","eql","valid","message","fix","equalsTo","configInd","configValue","recordIndInvalid","recordValueInvalid"],"mappings":"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","file":"field-exclusion.spec.js","sourcesContent":["/**\n *\n * @licstart The following is the entire license notice for the JavaScript code in this file.\n *\n * MARC record validators used in Melinda\n *\n * Copyright (C) 2014-2018 University Of Helsinki (The National Library Of Finland)\n *\n * This file is part of marc-record-validators-melinda\n *\n * marc-record-validators-melinda program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * marc-record-validators-melinda is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n * @licend The above is the entire license notice\n * for the JavaScript code in this file.\n *\n */\n\n/* eslint-disable no-undef, max-nested-callbacks, no-unused-expressions */\n\n'use strict';\n\nimport 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\tdescribe('#validate: Check configuration validation', () => {\n\t\tit('Creates a validator from simple config', async () => {\n\t\t\tconst config = [{\n\t\t\t\ttag: /^500$/\n\t\t\t}];\n\n\t\t\tconst validator = await validatorFactory(config);\n\t\t\texpect(validator)\n\t\t\t\t.to.be.an('object')\n\t\t\t\t.that.has.any.keys('description', 'validate');\n\n\t\t\texpect(validator.description).to.be.a('string');\n\t\t\texpect(validator.validate).to.be.a('function');\n\t\t});\n\n\t\tit('Creates a validator from complex config', async () => {\n\t\t\tconst config = [{\n\t\t\t\ttag: /^500$/,\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: /9/, value: /^(?!FENNI<KEEP>).*$/}\n\t\t\t\t]\n\t\t\t}];\n\n\t\t\tconst validator = await validatorFactory(config);\n\t\t\texpect(validator)\n\t\t\t\t.to.be.an('object')\n\t\t\t\t.that.has.any.keys('description', 'validate');\n\n\t\t\texpect(validator.description).to.be.a('string');\n\t\t\texpect(validator.validate).to.be.a('function');\n\t\t});\n\n\t\tit('Fails to create a validator from invalid config - tag', async () => {\n\t\t\tconst config = [{\n\t\t\t\ttag: '500',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: /9/, value: /^(?!FENNI<KEEP>).*$/}\n\t\t\t\t]\n\t\t\t}];\n\n\t\t\tawait expect(validatorFactory(config)).to.be.rejectedWith(Error, 'Configuration not valid - invalid data type for: tag');\n\t\t});\n\n\t\tit('Fails to create a validator from invalid config - msising array', async () => {\n\t\t\tconst config = {\n\t\t\t\ttag: '500',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: /9/, value: /^(?!FENNI<KEEP>).*$/}\n\t\t\t\t]\n\t\t\t};\n\n\t\t\tawait expect(validatorFactory(config)).to.be.rejectedWith(Error, 'Configuration array not provided');\n\t\t});\n\n\t\tit('Fails to create a validator from invalid config - code', async () => {\n\t\t\tconst config = [{\n\t\t\t\ttag: /^500$/,\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 9, value: /^(?!FENNI<KEEP>).*$/}\n\t\t\t\t]\n\t\t\t}];\n\n\t\t\tawait expect(validatorFactory(config)).to.be.rejectedWith(Error, 'Configuration not valid - invalid data type for: code');\n\t\t});\n\n\t\tit('Fails to create a validator from invalid config - value', async () => {\n\t\t\tconst config = [{\n\t\t\t\ttag: /^500$/,\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: /9/, value: 'Fenni'}\n\t\t\t\t]\n\t\t\t}];\n\n\t\t\tawait expect(validatorFactory(config)).to.be.rejectedWith(Error, 'Configuration not valid - invalid data type for: value');\n\t\t});\n\n\t\tit('Fails to create a validator from invalid config - exclusion: value, ind1', async () => {\n\t\t\tconst config = [{\n\t\t\t\ttag: /^500$/,\n\t\t\t\tvalue: /^500$/,\n\t\t\t\tind1: /^500$/,\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: /9/, value: /^(?!FENNI<KEEP>).*$/}\n\t\t\t\t]\n\t\t\t}];\n\n\t\t\tawait expect(validatorFactory(config)).to.be.rejectedWith(Error, 'Configuration not valid - excluded element');\n\t\t});\n\n\t\tit('Fails to create a validator from invalid config - missing mandatory: tag', async () => {\n\t\t\tconst config = [{\n\t\t\t\tvalue: /^500$/,\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: /9/, value: /^(?!FENNI<KEEP>).*$/}\n\t\t\t\t]\n\t\t\t}];\n\n\t\t\tawait expect(validatorFactory(config)).to.be.rejectedWith(Error, 'Configuration not valid - missing mandatory element: tag');\n\t\t});\n\n\t\tit('Fails to create a validator from invalid config - subfield not object: array', async () => {\n\t\t\tconst config = [{\n\t\t\t\ttag: /^500$/,\n\t\t\t\tsubfields: [\n\t\t\t\t\t['/9/', '/^(?!FENNI<KEEP>).*$/'],\n\t\t\t\t\t{value: /^(?!FENNI<KEEP>).*$/}\n\t\t\t\t]\n\t\t\t}];\n\n\t\t\tawait expect(validatorFactory(config)).to.be.rejectedWith(Error, 'Configuration not valid - subfield: /9/,/^(?!FENNI<KEEP>).*$/ not object');\n\t\t});\n\n\t\tit('Fails to create a validator from invalid config - subfield not object: string', async () => {\n\t\t\tconst config = [{\n\t\t\t\ttag: /^500$/,\n\t\t\t\tsubfields: [\n\t\t\t\t\t'/9/',\n\t\t\t\t\t'/^(?!FENNI<KEEP>).*$/',\n\t\t\t\t\t{value: /^(?!FENNI<KEEP>).*$/}\n\t\t\t\t]\n\t\t\t}];\n\n\t\t\tawait expect(validatorFactory(config)).to.be.rejectedWith(Error, 'Configuration not valid - subfield: /9/ not object');\n\t\t});\n\n\t\tit('Fails to create a validator from invalid config - missing mandatory: subfield.code', async () => {\n\t\t\tconst config = [{\n\t\t\t\ttag: /^500$/,\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: /9/, value: /^(?!FENNI<KEEP>).*$/},\n\t\t\t\t\t{value: /^(?!FENNI<KEEP>).*$/}\n\t\t\t\t]\n\t\t\t}];\n\n\t\t\tawait expect(validatorFactory(config)).to.be.rejectedWith(Error, 'Configuration not valid - missing mandatory element: code');\n\t\t});\n\n\t\tit('Fails to create a validator from invalid config - unidentified field: unidentified', async () => {\n\t\t\tconst config = [{\n\t\t\t\ttag: /^500$/,\n\t\t\t\tunidentified: /^500$/,\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: /9/, value: /^(?!FENNI<KEEP>).*$/},\n\t\t\t\t\t{value: /^(?!FENNI<KEEP>).*$/}\n\t\t\t\t]\n\t\t\t}];\n\n\t\t\tawait expect(validatorFactory(config)).to.be.rejectedWith(Error, 'Configuration not valid - unidentified value: unidentified');\n\t\t});\n\t});\n\n\t// Simple configuration https://github.com/NatLibFi/marc-record-validators-melinda/issues/45\n\tdescribe('#validate: Simple configuration (spec)', () => {\n\t\tconst config = [{\n\t\t\ttag: /^500$/\n\t\t}];\n\n\t\tconst recordValid = new MarcRecord({\n\t\t\tleader: 'foo',\n\t\t\tfields: [{\n\t\t\t\ttag: '245',\n\t\t\t\tind1: ' ',\n\t\t\t\tind2: ' ',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Fubar'}\n\t\t\t\t]\n\t\t\t}]\n\t\t});\n\n\t\tconst recordInvalid = new MarcRecord({\n\t\t\tleader: 'foo',\n\t\t\tfields: [{\n\t\t\t\ttag: '245',\n\t\t\t\tind1: ' ',\n\t\t\t\tind2: ' ',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Fubar'}\n\t\t\t\t]\n\t\t\t}, {\n\t\t\t\ttag: '500',\n\t\t\t\tind1: ' ',\n\t\t\t\tind2: ' ',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n\t\t\t\t\t{code: '9', value: 'ALMA<KEEP>'}\n\t\t\t\t]\n\t\t\t}]\n\t\t});\n\n\t\tconst recordInvalidDouble = new MarcRecord({\n\t\t\tleader: 'foo',\n\t\t\tfields: [{\n\t\t\t\ttag: '245',\n\t\t\t\tind1: ' ',\n\t\t\t\tind2: ' ',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Fubar'}\n\t\t\t\t]\n\t\t\t}, {\n\t\t\t\ttag: '500',\n\t\t\t\tind1: ' ',\n\t\t\t\tind2: ' ',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Foo'},\n\t\t\t\t\t{code: '9', value: 'ALMA<KEEP>'}\n\t\t\t\t]\n\t\t\t}, {\n\t\t\t\ttag: '500',\n\t\t\t\tind1: ' ',\n\t\t\t\tind2: ' ',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Bar'},\n\t\t\t\t\t{code: '9', value: 'ALMA<KEEP>'}\n\t\t\t\t]\n\t\t\t}]\n\t\t});\n\n\t\tconst recordInvalidFixed = new MarcRecord({\n\t\t\tleader: 'foo',\n\t\t\tfields: [{\n\t\t\t\ttag: '245',\n\t\t\t\tind1: ' ',\n\t\t\t\tind2: ' ',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Fubar'}\n\t\t\t\t]\n\t\t\t}]\n\t\t});\n\n\t\tit('Finds the record valid (spec)', async () => {\n\t\t\tconst validator = await validatorFactory(config);\n\t\t\tconst result = await validator.validate(recordValid);\n\t\t\texpect(result).to.eql({valid: true, message: []});\n\t\t});\n\n\t\tit('Finds the record invalid (spec)', async () => {\n\t\t\tconst validator = await validatorFactory(config);\n\t\t\tconst result = await validator.validate(recordInvalid);\n\t\t\texpect(result).to.eql({valid: false, message: ['Field $500 should be excluded']});\n\t\t});\n\n\t\tit('Finds the record invalid - double', async () => {\n\t\t\tconst validator = await validatorFactory(config);\n\t\t\tconst result = await validator.validate(recordInvalidDouble);\n\t\t\texpect(result).to.eql({valid: false, message: ['Field $500 should be excluded', 'Field $500 should be excluded']});\n\t\t});\n\n\t\tit('Repairs invalid record', async () => {\n\t\t\tconst validator = await validatorFactory(config);\n\t\t\tawait validator.fix(recordInvalid);\n\t\t\texpect(recordInvalid.equalsTo(recordInvalidFixed)).to.eql(true);\n\t\t});\n\n\t\tit('Repairs invalid record - double', async () => {\n\t\t\tconst validator = await validatorFactory(config);\n\t\t\tawait validator.fix(recordInvalidDouble);\n\t\t\texpect(recordInvalidDouble.equalsTo(recordInvalidFixed)).to.eql(true);\n\t\t});\n\t});\n\n\t// Complex configuration https://github.com/NatLibFi/marc-record-validators-melinda/issues/45\n\tdescribe('#validate: Complex configuration (spec)', () => {\n\t\tconst config = [{\n\t\t\ttag: /^500$/,\n\t\t\tsubfields: [\n\t\t\t\t{code: /9/, value: /^(?!FENNI<KEEP>).*$/}\n\t\t\t]\n\t\t}];\n\n\t\tconst recordValid = new MarcRecord({\n\t\t\tleader: 'foo',\n\t\t\tfields: [{\n\t\t\t\ttag: '245',\n\t\t\t\tind1: ' ',\n\t\t\t\tind2: ' ',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Fubar'}\n\t\t\t\t]\n\t\t\t}, {\n\t\t\t\ttag: '500',\n\t\t\t\tind1: ' ',\n\t\t\t\tind2: ' ',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n\t\t\t\t\t{code: '9', value: 'FENNI<KEEP>'}\n\t\t\t\t]\n\t\t\t}]\n\t\t});\n\n\t\tconst recordInvalid = new MarcRecord({\n\t\t\tleader: 'foo',\n\t\t\tfields: [{\n\t\t\t\ttag: '245',\n\t\t\t\tind1: ' ',\n\t\t\t\tind2: ' ',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Fubar'}\n\t\t\t\t]\n\t\t\t}, {\n\t\t\t\ttag: '500',\n\t\t\t\tind1: ' ',\n\t\t\t\tind2: ' ',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n\t\t\t\t\t{code: '9', value: 'ALMA<KEEP>'}\n\t\t\t\t]\n\t\t\t}]\n\t\t});\n\n\t\tconst recordInvalidFixed = new MarcRecord({\n\t\t\tleader: 'foo',\n\t\t\tfields: [{\n\t\t\t\ttag: '245',\n\t\t\t\tind1: ' ',\n\t\t\t\tind2: ' ',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Fubar'}\n\t\t\t\t]\n\t\t\t}]\n\t\t});\n\n\t\tit('Finds the record valid (spec)', async () => {\n\t\t\tconst validator = await validatorFactory(config);\n\t\t\tconst result = await validator.validate(recordValid);\n\t\t\texpect(result).to.eql({valid: true, message: []});\n\t\t});\n\n\t\tit('Finds the record invalid (spec)', async () => {\n\t\t\tconst validator = await validatorFactory(config);\n\t\t\tconst result = await validator.validate(recordInvalid);\n\t\t\texpect(result).to.eql({valid: false, message: ['Field $500 should be excluded']});\n\t\t});\n\n\t\tit('Repairs invalid record', async () => {\n\t\t\tconst validator = await validatorFactory(config);\n\t\t\tawait validator.fix(recordInvalid);\n\t\t\texpect(recordInvalid.equalsTo(recordInvalidFixed)).to.eql(true);\n\t\t});\n\t});\n\n\t// More special cases to increase coverage\n\tdescribe('#validate: Custom configuration', () => {\n\t\tconst configInd = [{\n\t\t\ttag: /^500$/,\n\t\t\tind1: /^8$/,\n\t\t\tind2: /^4$/\n\t\t}];\n\n\t\tconst configValue = [{\n\t\t\ttag: /^500$/,\n\t\t\tvalue: /^8$/\n\t\t}];\n\n\t\tconst recordValid = new MarcRecord({\n\t\t\tleader: 'foo',\n\t\t\tfields: [{\n\t\t\t\ttag: '500',\n\t\t\t\tind1: '8',\n\t\t\t\tind2: '0',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n\t\t\t\t\t{code: '9', value: 'ALMA<KEEP>'}\n\t\t\t\t]\n\t\t\t}]\n\t\t});\n\n\t\tconst recordIndInvalid = new MarcRecord({\n\t\t\tleader: 'foo',\n\t\t\tfields: [{\n\t\t\t\ttag: '245',\n\t\t\t\tind1: ' ',\n\t\t\t\tind2: ' ',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Fubar'}\n\t\t\t\t]\n\t\t\t}, {\n\t\t\t\ttag: '500',\n\t\t\t\tind1: '8',\n\t\t\t\tind2: '4',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n\t\t\t\t\t{code: '9', value: 'ALMA<KEEP>'}\n\t\t\t\t]\n\t\t\t}]\n\t\t});\n\n\t\tconst recordValueInvalid = new MarcRecord({\n\t\t\tleader: 'foo',\n\t\t\tfields: [{\n\t\t\t\ttag: '245',\n\t\t\t\tind1: ' ',\n\t\t\t\tind2: ' ',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Fubar'}\n\t\t\t\t]\n\t\t\t}, {\n\t\t\t\ttag: '500',\n\t\t\t\tvalue: '8'\n\t\t\t}]\n\t\t});\n\n\t\tconst recordInvalidFixed = new MarcRecord({\n\t\t\tleader: 'foo',\n\t\t\tfields: [{\n\t\t\t\ttag: '245',\n\t\t\t\tind1: ' ',\n\t\t\t\tind2: ' ',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Fubar'}\n\t\t\t\t]\n\t\t\t}]\n\t\t});\n\n\t\tit('Finds the record valid - Ind1&Ind2', async () => {\n\t\t\tconst validator = await validatorFactory(configInd);\n\t\t\tconst result = await validator.validate(recordValid);\n\t\t\texpect(result).to.eql({valid: true, message: []});\n\t\t});\n\n\t\tit('Finds the record valid - Value', async () => {\n\t\t\tconst validator = await validatorFactory(configValue);\n\t\t\tconst result = await validator.validate(recordValid);\n\t\t\texpect(result).to.eql({valid: true, message: []});\n\t\t});\n\n\t\tit('Finds the record invalid - Ind', async () => {\n\t\t\tconst validator = await validatorFactory(configInd);\n\t\t\tconst result = await validator.validate(recordIndInvalid);\n\t\t\texpect(result).to.eql({valid: false, message: ['Field $500 should be excluded']});\n\t\t});\n\n\t\tit('Finds the record invalid - Value', async () => {\n\t\t\tconst validator = await validatorFactory(configValue);\n\t\t\tconst result = await validator.validate(recordValueInvalid);\n\t\t\texpect(result).to.eql({valid: false, message: ['Field $500 should be excluded']});\n\t\t});\n\n\t\tit('Repairs invalid record - Ind', async () => {\n\t\t\tconst validator = await validatorFactory(configInd);\n\t\t\tawait validator.fix(recordIndInvalid);\n\t\t\texpect(recordIndInvalid.equalsTo(recordInvalidFixed)).to.eql(true);\n\t\t});\n\n\t\tit('Repairs invalid record - Value', async () => {\n\t\t\tconst validator = await validatorFactory(configValue);\n\t\t\tawait validator.fix(recordValueInvalid);\n\t\t\texpect(recordValueInvalid.equalsTo(recordInvalidFixed)).to.eql(true);\n\t\t});\n\t});\n});\n"]}
1
+ {"version":3,"file":"field-exclusion.spec.js","names":["_chai","_interopRequireDefault","require","_chaiAsPromised","_marcRecord","_fieldExclusion","obj","__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 // eslint-disable-line prefer-named-capture-group\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]; // eslint-disable-line prefer-named-capture-group\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, // eslint-disable-line prefer-named-capture-group\n subfields: [{code: /^2$/u, value: /^(ysa|musa|allars|cilla)$/u}] // eslint-disable-line prefer-named-capture-group\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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"}
@@ -1,79 +1,250 @@
1
- /**
2
- *
3
- * @licstart The following is the entire license notice for the JavaScript code in this file.
4
- *
5
- * MARC record validators used in Melinda
6
- *
7
- * Copyright (C) 2014-2018 University Of Helsinki (The National Library Of Finland)
8
- *
9
- * This file is part of marc-record-validators-melinda
10
- *
11
- * marc-record-validators-melinda program is free software: you can redistribute it and/or modify
12
- * it under the terms of the GNU Affero General Public License as
13
- * published by the Free Software Foundation, either version 3 of the
14
- * License, or (at your option) any later version.
15
- *
16
- * marc-record-validators-melinda is distributed in the hope that it will be useful,
17
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
- * GNU Affero General Public License for more details.
20
- *
21
- * You should have received a copy of the GNU Affero General Public License
22
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
23
- *
24
- * @licend The above is the entire license notice
25
- * for the JavaScript code in this file.
26
- *
27
- *//* eslint-disable require-await */'use strict';Object.defineProperty(exports,'__esModule',{value:true});var _lodash=require('lodash');function _asyncToGenerator(fn){return function(){var gen=fn.apply(this,arguments);return new Promise(function(resolve,reject){function step(key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{return Promise.resolve(value).then(function(value){step('next',value)},function(err){step('throw',err)})}}return step('next')})}}// Configuration specification
28
- const confSpec={leader:{// Description: Leader pattern
29
- type:'RegExp',excl:['tag','valuePattern','subfields','ind1','ind2']},tag:{// Description: Field tag pattern
30
- type:'RegExp'},valuePattern:{// Description: Pattern to which the field's value must match against
31
- type:'RegExp',excl:['leader','subfields','ind1','ind2']},ind1:{// Description: Indicator-specific configuration object
32
- type:'RegExp',// Array<Indicator>
33
- excl:['leader','value']},ind2:{// Description: Indicator-specific configuration object
34
- type:'RegExp',// Array<Indicator>
35
- excl:['leader','value']},strict:{// Description: Only the specified subfields are allowed if set to true. Defaults to false.
36
- type:'boolean',excl:['leader','valuePattern']},subfields:{// Description: Subfields configuration
37
- type:'object',// Object<String, Subfield> (Keys are subfield codes)
38
- contains:['String','subfieldSpec'],excl:['leader','value']},dependencies:{// Description: Dependencies configuration
39
- type:'array',// Array<Dependency>
40
- contains:'dependencySpec'}};// Subfiled specification
41
- const subSpec={pattern:{// Description: Pattern to which the subfield's value must match against
42
- type:'RegExp'},required:{// Description: Whether the subfield is mandatory or not. Defaults to false
43
- type:'boolean'},maxOccurrence:{// Description: Maximum number of times this subfield can occur. Defaults to unlimited if omitted. The value 0 means that the subfield cannot exist.
44
- type:'number'}};// Dependency specification
45
- const depSpec={tag:{// Description: Field tag pattern
46
- type:RegExp},ind1:{// Description: Pattern to which the indicator must match against
47
- type:RegExp,excl:['value']},ind2:{// Description: Pattern to which the indicator must match against
48
- type:RegExp,excl:['value']},valuePattern:{// Description: Pattern to which the field's value must match agains
49
- type:RegExp,excl:['subfields','ind1','ind2']},subfields:{// Description: An object with subfield codes as keys and RegExp patterns as values. The subfield value must this pattern.
50
- type:Object,// [String, RegExp]
51
- required:false}};exports.default=(()=>{var _ref=_asyncToGenerator(function*(config){if(!Array.isArray(config)){throw new TypeError('Configuration array not provided')}configValid(config);return{description:'Checks whether the configured field-specific objects are valid in the record',validate:(()=>{var _ref2=_asyncToGenerator(function*(record){return{valid:recordMatchesConfig(record,config,false)}});return function validate(_x2){return _ref2.apply(this,arguments)}})()};/// /////////////////////////////////////////
52
- // This checks that configuration is valid
53
- function configValid(config){let excluded=[];config.forEach(obj=>{excluded=[];// Validate fields: check that they are valid to confSpec (exists, correct data type), concat excluded elements
54
- (0,_lodash.forEach)(obj,(val,key)=>{configMatchesSpec(val,key,confSpec);// Concat all excluded elements to array
55
- if(confSpec[key].excl){excluded=excluded.concat(confSpec[key].excl)}});// Check that no excluded elements are in use
56
- (0,_lodash.forEach)(obj,(val,key)=>{if(excluded.includes(key)){throw new Error('Configuration not valid - excluded element')}})})}// Recursive validator
57
- function configMatchesSpec(data,key,spec){// Field not found in configuration spec
58
- if(!spec[key]){throw new Error('Configuration not valid - unidentified value: '+key)}// If configuration type does not match type in configuration spec
59
- if(typeof data!==spec[key].type&&spec[key].type==='RegExp'&&!(data instanceof RegExp)){throw new Error('Configuration not valid - invalid data type for: '+key)}// Check subfields/dependencies recursively
60
- if(key==='subfields'||key==='dependencies'){(0,_lodash.forEach)(data,subObj=>{if(typeof subObj==='object'){(0,_lodash.forEach)(subObj,(subVal,subKey)=>{configMatchesSpec(subVal,subKey,key==='subfields'?subSpec:depSpec)})}else{throw new TypeError('Configuration not valid - '+key+' not object')}})}}/// /////////////////////////////////////////
61
- /// /////////////////////////////////////////
62
- // This is used to validate record against configuration
63
- function recordMatchesConfig(record,conf,dependencies){// Parse trough every element of config array
64
- const res=conf.every(confObj=>{if(confObj.dependencies){return confObj.dependencies.every(dependency=>{return recordMatchesConfigElement(record,dependency.tag,confObj,dependencies)})}return recordMatchesConfigElement(record,confObj.tag,confObj,dependencies)});return res}// Recursive validation function
65
- function recordMatchesConfigElement(record,searchedField,confObj,dependencies){const foundFields=record.get(searchedField);// If data matching configuration is not found
66
- if(foundFields.length===0){return false}// Parse trough record objects matching provided configuration object
67
- return foundFields.every(recordSubObj=>{// Check that every configuration field exists in record and matches configuration
68
- return Object.keys(confObj).every(confField=>{// If configuration field is RegExp, test that record field matches it (valuePattern, leader, tag, ind*)
69
- if(confObj[confField]instanceof RegExp){// 'valuePattern' RegExp in conf spec is used to validate 'value' in marc
70
- if(confField==='valuePattern'){return confObj[confField].test(recordSubObj.value)}if(confField==='leader'){return confObj[confField].test(record.leader)}return confObj[confField].test(recordSubObj[confField])}// Only the specified subfields are allowed if set to true. Defaults to false. (this is checked at subfields)
71
- if(confField==='strict'){return true}// Check that subfield stuff
72
- if(confField==='subfields'){const strict=confObj.strict||false;// Defaults to false
73
- let elementsTotal=0;let matching=[];let valid=true;(0,_lodash.forEach)(confObj.subfields,(val,key)=>{matching=(0,_lodash.filter)(recordSubObj.subfields,{code:key});elementsTotal+=matching.length;// Calculate amount of record objects matching all confObj objects
74
- if(matching.length>val.maxOccurrence){valid=false}if((val.required||dependencies)&&matching.length===0){valid=false}if(val.pattern){(0,_lodash.forEach)(matching,field=>{if(!val.pattern.test(field.value)){valid=false}})}});// Check if there is less valid calculated objects than objects in subfield object => some not matching strict
75
- if(strict&&elementsTotal<recordSubObj.subfields.length){return false}return valid}// Recursive check for dependicies
76
- if(confField==='dependencies'){return recordMatchesConfig(record,confObj[confField],true)}// This should not be reached as configuration is validated
77
- console.log('!!! Configuration field not identified: ',recordSubObj[confField],' | ',typeof recordSubObj[confField]);return false})})}/// /////////////////////////////////////////
78
- });return function(_x){return _ref.apply(this,arguments)}})();
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = _default;
7
+ // Configuration specification
8
+ const confSpec = {
9
+ leader: {
10
+ // Description: Leader pattern
11
+ type: 'RegExp',
12
+ excl: ['tag', 'valuePattern', 'subfields', 'ind1', 'ind2']
13
+ },
14
+ tag: {
15
+ // Description: Field tag pattern
16
+ type: 'RegExp',
17
+ excl: ['leader']
18
+ },
19
+ valuePattern: {
20
+ // Description: Pattern to which the field's value must match against
21
+ type: 'RegExp',
22
+ excl: ['leader', 'subfields', 'ind1', 'ind2']
23
+ },
24
+ ind1: {
25
+ // Description: Indicator-specific configuration object
26
+ type: 'RegExp',
27
+ // Array<Indicator>
28
+ excl: ['leader', 'value']
29
+ },
30
+ ind2: {
31
+ // Description: Indicator-specific configuration object
32
+ type: 'RegExp',
33
+ // Array<Indicator>
34
+ excl: ['leader', 'value']
35
+ },
36
+ strict: {
37
+ // Description: Only the specified subfields are allowed if set to true. Defaults to false.
38
+ type: 'boolean',
39
+ excl: ['leader', 'valuePattern']
40
+ },
41
+ subfields: {
42
+ // Description: Subfields configuration
43
+ type: 'object',
44
+ // Object<String, Subfield> (Keys are subfield codes)
45
+ contains: ['String', 'subfieldSpec'],
46
+ excl: ['leader', 'value']
47
+ },
48
+ dependencies: {
49
+ // Description: Dependencies configuration
50
+ type: 'array',
51
+ // Array<Dependency>
52
+ contains: 'dependencySpec'
53
+ }
54
+ };
55
+
56
+ // Subfiled specification
57
+ const subSpec = {
58
+ pattern: {
59
+ // Description: Pattern to which the subfield's value must match against
60
+ type: 'RegExp'
61
+ },
62
+ required: {
63
+ // Description: Whether the subfield is mandatory or not. Defaults to false
64
+ type: 'boolean'
65
+ },
66
+ maxOccurrence: {
67
+ // Description: Maximum number of times this subfield can occur. Defaults to unlimited if omitted. The value 0 means that the subfield cannot exist.
68
+ type: 'number'
69
+ }
70
+ };
71
+
72
+ // Dependency specification
73
+ const depSpec = {
74
+ leader: {
75
+ // Description: Leader pattern
76
+ type: 'RegExp',
77
+ excl: ['tag', 'valuePattern', 'subfields', 'ind1', 'ind2']
78
+ },
79
+ tag: {
80
+ // Description: Field tag pattern
81
+ type: RegExp,
82
+ excl: ['leader']
83
+ },
84
+ ind1: {
85
+ // Description: Pattern to which the indicator must match against
86
+ type: RegExp,
87
+ excl: ['value', 'leader']
88
+ },
89
+ ind2: {
90
+ // Description: Pattern to which the indicator must match against
91
+ type: RegExp,
92
+ excl: ['value', 'leader']
93
+ },
94
+ valuePattern: {
95
+ // Description: Pattern to which the field's value must match agains
96
+ type: RegExp,
97
+ excl: ['subfields', 'ind1', 'ind2', 'leader']
98
+ },
99
+ subfields: {
100
+ // Description: An object with subfield codes as keys and RegExp patterns as values. The subfield value must this pattern.
101
+ type: Object,
102
+ // [String, RegExp]
103
+ required: false
104
+ }
105
+ };
106
+ function forEach(obj, fun) {
107
+ Object.entries(obj).forEach(fun);
108
+ }
109
+ function _default(config) {
110
+ if (!Array.isArray(config)) {
111
+ throw new TypeError('Configuration array not provided');
112
+ }
113
+ configValid(config);
114
+ return {
115
+ description: 'Check whether the configured fields have valid structure',
116
+ validate: record => ({
117
+ valid: recordMatchesConfig(record, config, false)
118
+ })
119
+ };
120
+
121
+ // This checks that configuration is valid
122
+ function configValid(config) {
123
+ config.forEach(obj => {
124
+ const excluded = []; // Validate fields: check that they are valid to confSpec (exists, correct data type), concat excluded elements
125
+
126
+ forEach(obj, ([key, val]) => {
127
+ configMatchesSpec(val, key, confSpec);
128
+
129
+ // Concat all excluded elements to array
130
+ if (confSpec[key].excl) {
131
+ // eslint-disable-line functional/no-conditional-statements
132
+ excluded.push(...confSpec[key].excl); // eslint-disable-line functional/immutable-data
133
+ }
134
+ });
135
+
136
+ // Check that no excluded elements are in use
137
+ forEach(obj, ([key]) => {
138
+ if (excluded.includes(key)) {
139
+ throw new Error('Configuration not valid - excluded element');
140
+ }
141
+ });
142
+ });
143
+ }
144
+
145
+ // Recursive validator
146
+ function configMatchesSpec(data, key, spec) {
147
+ // Field not found in configuration spec
148
+ if (!spec[key]) {
149
+ throw new Error(`Configuration not valid - unidentified value: ${key}`);
150
+ }
151
+
152
+ // If configuration type does not match type in configuration spec
153
+ if (typeof data !== spec[key].type && spec[key].type === 'RegExp' && !(data instanceof RegExp)) {
154
+ throw new Error(`Configuration not valid - invalid data type for: ${key}`);
155
+ }
156
+
157
+ // Check subfields/dependencies recursively
158
+ if (key === 'subfields' || key === 'dependencies') {
159
+ // eslint-disable-line functional/no-conditional-statements
160
+ forEach(data, ([, subObj]) => {
161
+ if (typeof subObj === 'object') {
162
+ // eslint-disable-line functional/no-conditional-statements
163
+ forEach(subObj, ([subKey, subVal]) => {
164
+ configMatchesSpec(subVal, subKey, key === 'subfields' ? subSpec : depSpec);
165
+ });
166
+ } else {
167
+ throw new TypeError(`Configuration not valid - ${key} not object`);
168
+ }
169
+ });
170
+ }
171
+ }
172
+ /// /////////////////////////////////////////
173
+
174
+ /// /////////////////////////////////////////
175
+ // This is used to validate record against configuration
176
+ function recordMatchesConfig(record, conf, dependencies) {
177
+ // Parse trough every element of config array
178
+ const res = conf.every(confObj => {
179
+ if (confObj.dependencies) {
180
+ if (confObj.dependencies.every(dependency => recordMatchesConfigElement(record, dependency.tag, dependency, dependencies))) {
181
+ return recordMatchesConfigElement(record, confObj.tag, confObj, dependencies);
182
+ }
183
+ return true;
184
+ }
185
+ return recordMatchesConfigElement(record, confObj.tag, confObj, dependencies);
186
+ });
187
+ return res;
188
+ }
189
+
190
+ // Recursive validation function
191
+ function recordMatchesConfigElement(record, searchedField, confObj, dependencies) {
192
+ const foundFields = record.get(searchedField);
193
+ // If field has dependencies and fields matching configuration is not found
194
+ if (foundFields.length === 0 && confObj.dependencies) {
195
+ return false;
196
+ }
197
+
198
+ // Parse trough record objects matching provided configuration object
199
+ // Check that every configuration field exists in record and matches configuration
200
+ return foundFields.every(recordSubObj => Object.keys(confObj).every(confField => {
201
+ // If configuration field is RegExp, test that record field matches it (valuePattern, leader, tag, ind*)
202
+ if (confObj[confField] instanceof RegExp) {
203
+ // 'valuePattern' RegExp in conf spec is used to validate 'value' in marc
204
+ if (confField === 'valuePattern') {
205
+ return confObj[confField].test(recordSubObj.value);
206
+ }
207
+ if (confField === 'leader') {
208
+ return confObj[confField].test(record.leader);
209
+ }
210
+ return confObj[confField].test(recordSubObj[confField]);
211
+ }
212
+
213
+ // Only the specified subfields are allowed if set to true. Defaults to false. (this is checked at subfields)
214
+ if (confField === 'strict') {
215
+ return true;
216
+ }
217
+
218
+ // Check that subfield stuff
219
+ if (confField === 'subfields') {
220
+ const strict = confObj.strict || false; // Defaults to false
221
+ let elementsTotal = 0; // eslint-disable-line functional/no-let
222
+ const valid = !Object.entries(confObj.subfields).some(([key, val]) => {
223
+ const matching = recordSubObj.subfields.filter(({
224
+ code
225
+ }) => code === key);
226
+ elementsTotal += matching.length; // Calculate amount of record objects matching all confObj objects
227
+
228
+ const maxOccurrenceFine = matching.length > val.maxOccurrence;
229
+ const isRequiredFine = (val.required || dependencies) && matching.length === 0;
230
+ const valuePatternFine = val.pattern && !matching.every(field => val.pattern.test(field.value));
231
+ return maxOccurrenceFine || isRequiredFine || valuePatternFine;
232
+ });
233
+
234
+ // Check if there is less valid calculated objects than objects in subfield object => some not matching strict
235
+ return !(strict && elementsTotal < recordSubObj.subfields.length) && valid;
236
+ }
237
+
238
+ // Recursive check for dependicies
239
+ if (confField === 'dependencies') {
240
+ return recordMatchesConfig(record, confObj[confField], true);
241
+ }
242
+
243
+ // This should not be reached as configuration is validated
244
+
245
+ console.log('!!! Configuration field not identified: ', recordSubObj[confField], ' | ', typeof recordSubObj[confField]); // eslint-disable-line no-console
246
+ return false;
247
+ }));
248
+ }
249
+ }
79
250
  //# sourceMappingURL=field-structure.js.map