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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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
package/README.md CHANGED
@@ -1,9 +1,8 @@
1
- # MARC record validators used in Melinda [![NPM Version](https://img.shields.io/npm/v/@natlibfi/marc-record-validators-melinda.svg)](https://npmjs.org/package/@natlibfi/marc-record-validators-melinda) [![Build Status](https://travis-ci.org/NatLibFi/marc-record-validators-melinda.svg)](https://travis-ci.org/NatLibFi/marc-record-validators-melinda) [![Test Coverage](https://codeclimate.com/github/NatLibFi/marc-record-validators-melinda/badges/coverage.svg)](https://codeclimate.com/github/NatLibFi/marc-record-validators-melinda/coverage)
2
-
3
- MARC record validators used in Melinda
1
+ # MARC record validators used in Melinda [![NPM Version](https://img.shields.io/npm/v/@natlibfi/marc-record-validators-melinda.svg)](https://npmjs.org/package/@natlibfi/marc-record-validators-melinda)
2
+ MARC record validators used in Melinda. See [wiki](https://github.com/NatLibFi/marc-record-validators-melinda/wiki) for documentation.
4
3
 
5
4
  ## License and copyright
6
5
 
7
- Copyright (c) 2014-2018 **University Of Helsinki (The National Library Of Finland)**
6
+ Copyright (c) 2014-2023 **University Of Helsinki (The National Library Of Finland)**
8
7
 
9
- This project's source code is licensed under the terms of **GNU Affero General Public License Version 3** or any later version.
8
+ This project's source code is licensed under the terms of **MIT** or any later version.
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = _default;
7
+ var _utils = require("./utils");
8
+ function _default() {
9
+ const sf506 = [{
10
+ code: 'a',
11
+ value: /aineisto on käytettävissä vapaakappalekirjastoissa/ui
12
+ }];
13
+ const sf540 = [{
14
+ code: 'c',
15
+ value: /laki kulttuuriaineistojen tallettamisesta ja säilyttämisestä/ui
16
+ }];
17
+ function fix(record) {
18
+ // If printed do nothing
19
+
20
+ // If material is electronic add theis if missing
21
+ if (!hasTag(record, '506', sf506)) {
22
+ // eslint-disable-line functional/no-conditional-statements
23
+ record.insertField({
24
+ tag: '506',
25
+ ind1: '1',
26
+ subfields: [{
27
+ code: 'a',
28
+ value: 'Aineisto on käytettävissä vapaakappalekirjastoissa.'
29
+ }, {
30
+ code: 'f',
31
+ value: 'Online access with authorization'
32
+ }, {
33
+ code: '2',
34
+ value: 'star'
35
+ }, {
36
+ code: '5',
37
+ value: 'FI-Vapaa'
38
+ }, {
39
+ code: '9',
40
+ value: 'FENNI<KEEP>'
41
+ }]
42
+ });
43
+ }
44
+ if (!hasTag(record, '540', sf540)) {
45
+ // eslint-disable-line functional/no-conditional-statements
46
+ record.insertField({
47
+ tag: '540',
48
+ subfields: [{
49
+ code: 'a',
50
+ value: 'Aineisto on käytettävissä tutkimus- ja muihin tarkoituksiin;'
51
+ }, {
52
+ code: 'b',
53
+ value: 'Kansalliskirjasto;'
54
+ }, {
55
+ code: 'c',
56
+ value: 'Laki kulttuuriaineistojen tallettamisesta ja säilyttämisestä'
57
+ }, {
58
+ code: 'u',
59
+ value: 'http://www.finlex.fi/fi/laki/ajantasa/2007/20071433'
60
+ }, {
61
+ code: '5',
62
+ value: 'FI-Vapaa'
63
+ }, {
64
+ code: '9',
65
+ value: 'FENNI<KEEP>'
66
+ }]
67
+ });
68
+ }
69
+ return true;
70
+ }
71
+ function validate(record) {
72
+ // if not electronic skip this validator
73
+ if (!(0, _utils.isElectronicMaterial)(record)) {
74
+ return {
75
+ valid: true
76
+ };
77
+ }
78
+ return {
79
+ valid: hasTag(record, '506', sf506) && hasTag(record, '540', sf540)
80
+ };
81
+ }
82
+ return {
83
+ description: 'Adds access rights fields for a record (if not existing)',
84
+ validate,
85
+ fix
86
+ };
87
+ function hasTag(rec, tag, sfcv) {
88
+ return rec.fields.some(f => f.tag === tag && sfcv.every(({
89
+ code,
90
+ value
91
+ }) => f.subfields.some(sf => sf.code === code && value.test(sf.value))));
92
+ }
93
+ }
94
+ //# sourceMappingURL=access-rights.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access-rights.js","names":["_utils","require","_default","sf506","code","value","sf540","fix","record","hasTag","insertField","tag","ind1","subfields","validate","isElectronicMaterial","valid","description","rec","sfcv","fields","some","f","every","sf","test"],"sources":["../src/access-rights.js"],"sourcesContent":["import {isElectronicMaterial} from './utils';\n\nexport default function () {\n const sf506 = [{code: 'a', value: /aineisto on käytettävissä vapaakappalekirjastoissa/ui}];\n const sf540 = [{code: 'c', value: /laki kulttuuriaineistojen tallettamisesta ja säilyttämisestä/ui}];\n\n function fix(record) {\n // If printed do nothing\n\n // If material is electronic add theis if missing\n if (!hasTag(record, '506', sf506)) { // eslint-disable-line functional/no-conditional-statements\n record.insertField({\n tag: '506',\n ind1: '1',\n subfields: [\n {\n code: 'a',\n value: 'Aineisto on käytettävissä vapaakappalekirjastoissa.'\n }, {\n code: 'f',\n value: 'Online access with authorization'\n }, {\n code: '2',\n value: 'star'\n }, {\n code: '5',\n value: 'FI-Vapaa'\n }, {\n code: '9',\n value: 'FENNI<KEEP>'\n }\n ]\n });\n }\n\n if (!hasTag(record, '540', sf540)) { // eslint-disable-line functional/no-conditional-statements\n record.insertField({\n tag: '540',\n subfields: [\n {\n code: 'a',\n value: 'Aineisto on käytettävissä tutkimus- ja muihin tarkoituksiin;'\n }, {\n code: 'b',\n value: 'Kansalliskirjasto;'\n }, {\n code: 'c',\n value: 'Laki kulttuuriaineistojen tallettamisesta ja säilyttämisestä'\n }, {\n code: 'u',\n value: 'http://www.finlex.fi/fi/laki/ajantasa/2007/20071433'\n }, {\n code: '5',\n value: 'FI-Vapaa'\n }, {\n code: '9',\n value: 'FENNI<KEEP>'\n }\n ]\n });\n }\n\n return true;\n }\n\n function validate(record) {\n // if not electronic skip this validator\n if (!isElectronicMaterial(record)) {\n return {valid: true};\n }\n\n return {valid: hasTag(record, '506', sf506) && hasTag(record, '540', sf540)};\n }\n\n return {\n description: 'Adds access rights fields for a record (if not existing)',\n validate,\n fix\n };\n\n function hasTag(rec, tag, sfcv) {\n return rec.fields.some(f => f.tag === tag && sfcv.every(({code, value}) => f.subfields.some(sf => sf.code === code && value.test(sf.value))));\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEe,SAAAC,SAAA,EAAY;EACzB,MAAMC,KAAK,GAAG,CAAC;IAACC,IAAI,EAAE,GAAG;IAAEC,KAAK,EAAE;EAAsD,CAAC,CAAC;EAC1F,MAAMC,KAAK,GAAG,CAAC;IAACF,IAAI,EAAE,GAAG;IAAEC,KAAK,EAAE;EAAgE,CAAC,CAAC;EAEpG,SAASE,GAAGA,CAACC,MAAM,EAAE;IACnB;;IAEA;IACA,IAAI,CAACC,MAAM,CAACD,MAAM,EAAE,KAAK,EAAEL,KAAK,CAAC,EAAE;MAAE;MACnCK,MAAM,CAACE,WAAW,CAAC;QACjBC,GAAG,EAAE,KAAK;QACVC,IAAI,EAAE,GAAG;QACTC,SAAS,EAAE,CACT;UACET,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC,EAAE;UACDD,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC,EAAE;UACDD,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC,EAAE;UACDD,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC,EAAE;UACDD,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC;MAEL,CAAC,CAAC;IACJ;IAEA,IAAI,CAACI,MAAM,CAACD,MAAM,EAAE,KAAK,EAAEF,KAAK,CAAC,EAAE;MAAE;MACnCE,MAAM,CAACE,WAAW,CAAC;QACjBC,GAAG,EAAE,KAAK;QACVE,SAAS,EAAE,CACT;UACET,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC,EAAE;UACDD,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC,EAAE;UACDD,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC,EAAE;UACDD,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC,EAAE;UACDD,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC,EAAE;UACDD,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC;MAEL,CAAC,CAAC;IACJ;IAEA,OAAO,IAAI;EACb;EAEA,SAASS,QAAQA,CAACN,MAAM,EAAE;IACxB;IACA,IAAI,CAAC,IAAAO,2BAAoB,EAACP,MAAM,CAAC,EAAE;MACjC,OAAO;QAACQ,KAAK,EAAE;MAAI,CAAC;IACtB;IAEA,OAAO;MAACA,KAAK,EAAEP,MAAM,CAACD,MAAM,EAAE,KAAK,EAAEL,KAAK,CAAC,IAAIM,MAAM,CAACD,MAAM,EAAE,KAAK,EAAEF,KAAK;IAAC,CAAC;EAC9E;EAEA,OAAO;IACLW,WAAW,EAAE,0DAA0D;IACvEH,QAAQ;IACRP;EACF,CAAC;EAED,SAASE,MAAMA,CAACS,GAAG,EAAEP,GAAG,EAAEQ,IAAI,EAAE;IAC9B,OAAOD,GAAG,CAACE,MAAM,CAACC,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACX,GAAG,KAAKA,GAAG,IAAIQ,IAAI,CAACI,KAAK,CAAC,CAAC;MAACnB,IAAI;MAAEC;IAAK,CAAC,KAAKiB,CAAC,CAACT,SAAS,CAACQ,IAAI,CAACG,EAAE,IAAIA,EAAE,CAACpB,IAAI,KAAKA,IAAI,IAAIC,KAAK,CAACoB,IAAI,CAACD,EAAE,CAACnB,KAAK,CAAC,CAAC,CAAC,CAAC;EAC/I;AACF"}
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+
3
+ var _chai = require("chai");
4
+ var _marcRecord = require("@natlibfi/marc-record");
5
+ var _accessRights = _interopRequireDefault(require("../src/access-rights"));
6
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
7
+ describe('access-rights', async () => {
8
+ // Fields
9
+ const f337 = {
10
+ tag: '337',
11
+ ind1: ' ',
12
+ ind2: ' ',
13
+ subfields: [{
14
+ code: 'b',
15
+ value: 'c'
16
+ }, {
17
+ code: '2',
18
+ value: 'rdamedia'
19
+ }]
20
+ };
21
+ const ldf5061 = {
22
+ tag: '506',
23
+ ind1: '1',
24
+ ind2: ' ',
25
+ subfields: [{
26
+ code: 'a',
27
+ value: 'Aineisto on käytettävissä vapaakappalekirjastoissa.'
28
+ }, {
29
+ code: 'f',
30
+ value: 'Online access with authorization'
31
+ }, {
32
+ code: '2',
33
+ value: 'star'
34
+ }, {
35
+ code: '5',
36
+ value: 'FI-Vapaa'
37
+ }, {
38
+ code: '9',
39
+ value: 'FENNI<KEEP>'
40
+ }]
41
+ };
42
+ const ldf540 = {
43
+ tag: '540',
44
+ ind1: ' ',
45
+ ind2: ' ',
46
+ subfields: [{
47
+ code: 'a',
48
+ value: 'Aineisto on käytettävissä tutkimus- ja muihin tarkoituksiin;'
49
+ }, {
50
+ code: 'b',
51
+ value: 'Kansalliskirjasto;'
52
+ }, {
53
+ code: 'c',
54
+ value: 'Laki kulttuuriaineistojen tallettamisesta ja säilyttämisestä'
55
+ }, {
56
+ code: 'u',
57
+ value: 'http://www.finlex.fi/fi/laki/ajantasa/2007/20071433'
58
+ }, {
59
+ code: '5',
60
+ value: 'FI-Vapaa'
61
+ }, {
62
+ code: '9',
63
+ value: 'FENNI<KEEP>'
64
+ }]
65
+ };
66
+ const f5060 = {
67
+ tag: '506',
68
+ ind1: '0',
69
+ ind2: ' ',
70
+ subfields: [{
71
+ code: 'a',
72
+ value: 'Aineisto on vapaasti saatavissa.'
73
+ }, {
74
+ code: 'f',
75
+ value: 'Unrestricted online access'
76
+ }, {
77
+ code: '2',
78
+ value: 'star'
79
+ }, {
80
+ code: '9',
81
+ value: 'FENNI<KEEP>'
82
+ }]
83
+ };
84
+ const f540 = {
85
+ tag: '540',
86
+ ind1: ' ',
87
+ ind2: ' ',
88
+ subfields: [{
89
+ code: 'c',
90
+ value: 'This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.'
91
+ }]
92
+ };
93
+ it('Creates a validator', async () => {
94
+ const validator = await (0, _accessRights.default)();
95
+ (0, _chai.expect)(validator).to.be.an('object').that.has.any.keys('description', 'validate');
96
+ (0, _chai.expect)(validator.description).to.be.a('string');
97
+ (0, _chai.expect)(validator.validate).to.be.a('function');
98
+ });
99
+
100
+ // Tests
101
+ const test = await (async () => {
102
+ const validator = await (0, _accessRights.default)();
103
+ return {
104
+ validate: async (valid, ...recfields) => {
105
+ const result = await validator.validate(new _marcRecord.MarcRecord({
106
+ fields: recfields
107
+ }));
108
+ (0, _chai.expect)(result).to.eql({
109
+ valid
110
+ });
111
+ },
112
+ fix: async (recfields, resfields) => {
113
+ const record = new _marcRecord.MarcRecord({
114
+ fields: recfields
115
+ });
116
+ await validator.fix(record);
117
+ (0, _chai.expect)(record.fields).to.eql(resfields);
118
+ }
119
+ };
120
+ })();
121
+ describe('#validate', () => {
122
+ it('Finds the record valid; Legal deposit fields 5061 and 540', async () => {
123
+ await test.validate(true, ldf5061, ldf540);
124
+ });
125
+ it('Finds the record invalid; Missing 5061', async () => {
126
+ await test.validate(false, f337, f5060, ldf540);
127
+ });
128
+ it('Finds the record invalid; Missing 540', async () => {
129
+ await test.validate(false, f337, ldf5061, f540);
130
+ });
131
+ it('Finds the record invalid; Missing 5061 and 540', async () => {
132
+ await test.validate(false, f337, f5060, f540);
133
+ });
134
+ });
135
+ describe('#fix', () => {
136
+ it('Legal deposit fields 5061 and 540; Nothing to add', async () => {
137
+ await test.fix([ldf5061, ldf540], [ldf5061, ldf540]);
138
+ });
139
+ it('540 but missing 5061; Adds 5061', async () => {
140
+ await test.fix([f5060, ldf540], [f5060, ldf5061, ldf540]);
141
+ });
142
+ it('5061 but missing 540; Adds 540', async () => {
143
+ await test.fix([ldf5061, f540], [ldf5061, ldf540, f540]);
144
+ });
145
+ it('Both, 5061 and 540, missing; Adds 5061 and 540', async () => {
146
+ await test.fix([f5060, f540], [f5060, ldf5061, ldf540, f540]);
147
+ });
148
+ });
149
+ });
150
+ //# sourceMappingURL=access-rights.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access-rights.spec.js","names":["_chai","require","_marcRecord","_accessRights","_interopRequireDefault","obj","__esModule","default","describe","f337","tag","ind1","ind2","subfields","code","value","ldf5061","ldf540","f5060","f540","it","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","test","valid","recfields","result","MarcRecord","fields","eql","fix","resfields","record"],"sources":["../src/access-rights.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/access-rights';\n\ndescribe('access-rights', async () => {\n // Fields\n const f337 = {\n tag: '337',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'b', value: 'c'},\n {code: '2', value: 'rdamedia'}\n ]\n };\n\n const ldf5061 = {\n tag: '506',\n ind1: '1',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Aineisto on käytettävissä vapaakappalekirjastoissa.'},\n {code: 'f', value: 'Online access with authorization'},\n {code: '2', value: 'star'},\n {code: '5', value: 'FI-Vapaa'},\n {code: '9', value: 'FENNI<KEEP>'}\n ]\n };\n\n const ldf540 = {\n tag: '540',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Aineisto on käytettävissä tutkimus- ja muihin tarkoituksiin;'},\n {code: 'b', value: 'Kansalliskirjasto;'},\n {code: 'c', value: 'Laki kulttuuriaineistojen tallettamisesta ja säilyttämisestä'},\n {code: 'u', value: 'http://www.finlex.fi/fi/laki/ajantasa/2007/20071433'},\n {code: '5', value: 'FI-Vapaa'},\n {code: '9', value: 'FENNI<KEEP>'}\n ]\n };\n\n const f5060 = {\n tag: '506',\n ind1: '0',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Aineisto on vapaasti saatavissa.'},\n {code: 'f', value: 'Unrestricted online access'},\n {code: '2', value: 'star'},\n {code: '9', value: 'FENNI<KEEP>'}\n ]\n };\n\n const f540 = {\n tag: '540',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'c', value: 'This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.'}]\n };\n\n it('Creates a validator', async () => {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n });\n\n // Tests\n const test = await (async () => {\n const validator = await validatorFactory();\n return {\n validate: async (valid, ...recfields) => {\n const result = await validator.validate(new MarcRecord({fields: recfields}));\n expect(result).to.eql({valid});\n },\n\n fix: async (recfields, resfields) => {\n const record = new MarcRecord({fields: recfields});\n await validator.fix(record);\n expect(record.fields).to.eql(resfields);\n }\n };\n })();\n\n describe('#validate', () => {\n it('Finds the record valid; Legal deposit fields 5061 and 540', async () => {\n await test.validate(true, ldf5061, ldf540);\n });\n\n it('Finds the record invalid; Missing 5061', async () => {\n await test.validate(false, f337, f5060, ldf540);\n });\n\n it('Finds the record invalid; Missing 540', async () => {\n await test.validate(false, f337, ldf5061, f540);\n });\n\n it('Finds the record invalid; Missing 5061 and 540', async () => {\n await test.validate(false, f337, f5060, f540);\n });\n });\n\n describe('#fix', () => {\n it('Legal deposit fields 5061 and 540; Nothing to add', async () => {\n await test.fix([ldf5061, ldf540], [ldf5061, ldf540]);\n });\n\n it('540 but missing 5061; Adds 5061', async () => {\n await test.fix([f5060, ldf540], [f5060, ldf5061, ldf540]);\n });\n\n it('5061 but missing 540; Adds 540', async () => {\n await test.fix([ldf5061, f540], [ldf5061, ldf540, f540]);\n });\n\n it('Both, 5061 and 540, missing; Adds 5061 and 540', async () => {\n await test.fix([f5060, f540], [f5060, ldf5061, ldf540, f540]);\n });\n });\n});\n"],"mappings":"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"}
@@ -1,28 +1,18 @@
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});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')})}}exports.default=_asyncToGenerator(function*(){return{description:'Handle double commas in 700$e-subfields',validate:(()=>{var _ref2=_asyncToGenerator(function*(record){return{valid:!record.get(/^700$/).some(function(f){return f.subfields.every(function(sf){return sf.code==='e'&&/,,/.test(sf.value)})})}});return function validate(_x){return _ref2.apply(this,arguments)}})(),fix:(()=>{var _ref3=_asyncToGenerator(function*(record){return record.get(/^700$/).forEach(function(f){return f.subfields.filter(function(sf){return sf.code==='e'}).forEach(function(sf){sf.value=sf.value.replace(/,,/,',')})})});return function fix(_x2){return _ref3.apply(this,arguments)}})()}});
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = _default;
7
+ function _default() {
8
+ return {
9
+ description: 'Handle double commas in 700$e-subfields',
10
+ validate: record => ({
11
+ valid: !record.get(/^700$/u).some(f => f.subfields.every(sf => sf.code === 'e' && /,,/u.test(sf.value)))
12
+ }),
13
+ fix: record => record.get(/^700$/u).forEach(f => f.subfields.filter(sf => sf.code === 'e').forEach(sf => {
14
+ sf.value = sf.value.replace(/,,/u, ','); // eslint-disable-line functional/immutable-data
15
+ }))
16
+ };
17
+ }
28
18
  //# sourceMappingURL=double-commas.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/double-commas.js"],"names":["description","validate","record","valid","get","some","f","subfields","every","sf","code","test","value","fix","forEach","filter","replace"],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BA,kCAEA,a,qeAEe,WAAkB,CAChC,MAAO,CACNA,YAAa,yCADP,CAENC,2CAAU,UAAMC,MAAN,QAAiB,CAC1BC,MAAO,CAACD,OACNE,GADM,CACF,OADE,EAENC,IAFM,CAED,kBACLC,GAAEC,SAAF,CAAYC,KAAZ,CAAkB,mBAAMC,IAAGC,IAAH,GAAY,GAAZ,EAAmB,KAAKC,IAAL,CAAUF,GAAGG,KAAb,CAAzB,CAAlB,CADK,CAFC,CADkB,CAAjB,CAAV,sEAFM,CASNC,sCAAK,UAAMX,MAAN,QACJA,QAAOE,GAAP,CAAW,OAAX,EAAoBU,OAApB,CAA4B,kBAC3BR,GAAEC,SAAF,CAAYQ,MAAZ,CAAmB,mBAAMN,IAAGC,IAAH,GAAY,GAAlB,CAAnB,EAA0CI,OAA1C,CAAkD,YAAM,CACvDL,GAAGG,KAAH,CAAWH,GAAGG,KAAH,CAASI,OAAT,CAAiB,IAAjB,CAAuB,GAAvB,CACX,CAFD,CAD2B,CAA5B,CADI,CAAL,kEATM,CAgBP,C","file":"double-commas.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 require-await */\n\n'use strict';\n\nexport default async function () {\n\treturn {\n\t\tdescription: 'Handle double commas in 700$e-subfields',\n\t\tvalidate: async record => ({\n\t\t\tvalid: !record\n\t\t\t\t.get(/^700$/)\n\t\t\t\t.some(f =>\n\t\t\t\t\tf.subfields.every(sf => sf.code === 'e' && /,,/.test(sf.value))\n\t\t\t\t)\n\t\t}),\n\t\tfix: async record =>\n\t\t\trecord.get(/^700$/).forEach(f =>\n\t\t\t\tf.subfields.filter(sf => sf.code === 'e').forEach(sf => {\n\t\t\t\t\tsf.value = sf.value.replace(/,,/, ',');\n\t\t\t\t})\n\t\t\t)\n\t};\n}\n"]}
1
+ {"version":3,"file":"double-commas.js","names":["_default","description","validate","record","valid","get","some","f","subfields","every","sf","code","test","value","fix","forEach","filter","replace"],"sources":["../src/double-commas.js"],"sourcesContent":["export default function () {\n return {\n description: 'Handle double commas in 700$e-subfields',\n validate: record => ({\n valid: !record\n .get(/^700$/u)\n .some(f => f.subfields.every(sf => sf.code === 'e' && (/,,/u).test(sf.value)))\n }),\n fix: record => record.get(/^700$/u).forEach(f => f.subfields.filter(sf => sf.code === 'e').forEach(sf => {\n sf.value = sf.value.replace(/,,/u, ','); // eslint-disable-line functional/immutable-data\n }))\n };\n}\n"],"mappings":";;;;;;AAAe,SAAAA,SAAA,EAAY;EACzB,OAAO;IACLC,WAAW,EAAE,yCAAyC;IACtDC,QAAQ,EAAEC,MAAM,KAAK;MACnBC,KAAK,EAAE,CAACD,MAAM,CACXE,GAAG,CAAC,QAAQ,CAAC,CACbC,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACC,SAAS,CAACC,KAAK,CAACC,EAAE,IAAIA,EAAE,CAACC,IAAI,KAAK,GAAG,IAAK,KAAK,CAAEC,IAAI,CAACF,EAAE,CAACG,KAAK,CAAC,CAAC;IACjF,CAAC,CAAC;IACFC,GAAG,EAAEX,MAAM,IAAIA,MAAM,CAACE,GAAG,CAAC,QAAQ,CAAC,CAACU,OAAO,CAACR,CAAC,IAAIA,CAAC,CAACC,SAAS,CAACQ,MAAM,CAACN,EAAE,IAAIA,EAAE,CAACC,IAAI,KAAK,GAAG,CAAC,CAACI,OAAO,CAACL,EAAE,IAAI;MACvGA,EAAE,CAACG,KAAK,GAAGH,EAAE,CAACG,KAAK,CAACI,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC;EACJ,CAAC;AACH"}
@@ -1,28 +1,73 @@
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 no-undef, max-nested-callbacks, no-unused-expressions */'use strict';var _chai=require('chai');var _marcRecord=require('@natlibfi/marc-record');var _doubleCommas=require('../src/double-commas');var _doubleCommas2=_interopRequireDefault(_doubleCommas);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}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')})}}describe('double-commas',()=>{it('Creates a validator',_asyncToGenerator(function*(){const validator=yield(0,_doubleCommas2.default)();(0,_chai.expect)(validator).to.be.an('object').that.has.any.keys('description','validate');(0,_chai.expect)(validator.description).to.be.a('string');(0,_chai.expect)(validator.validate).to.be.a('function')}));describe('#validate',()=>{it('Finds the record valid',_asyncToGenerator(function*(){const validator=yield(0,_doubleCommas2.default)();const record=new _marcRecord.MarcRecord({fields:[{tag:'700',subfields:[{code:'e',value:'foo,bar'}]}]});const result=yield validator.validate(record);(0,_chai.expect)(result).to.eql({valid:true})}));it('Finds the record invalid',_asyncToGenerator(function*(){const validator=yield(0,_doubleCommas2.default)();const record=new _marcRecord.MarcRecord({fields:[{tag:'700',subfields:[{code:'e',value:'foo,,bar'}]}]});const result=yield validator.validate(record);(0,_chai.expect)(result).to.eql({valid:false})}))});describe('#fix',()=>{it('Fixes the record',_asyncToGenerator(function*(){const validator=yield(0,_doubleCommas2.default)();const record=new _marcRecord.MarcRecord({fields:[{tag:'700',subfields:[{code:'e',value:'foo,,bar'}]}]});yield validator.fix(record);(0,_chai.expect)(record.fields).to.eql([{tag:'700',ind1:' ',ind2:' ',subfields:[{code:'e',value:'foo,bar'}]}])}))})});
1
+ "use strict";
2
+
3
+ var _chai = require("chai");
4
+ var _marcRecord = require("@natlibfi/marc-record");
5
+ var _doubleCommas = _interopRequireDefault(require("../src/double-commas"));
6
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
7
+ describe('double-commas', () => {
8
+ it('Creates a validator', async () => {
9
+ const validator = await (0, _doubleCommas.default)();
10
+ (0, _chai.expect)(validator).to.be.an('object').that.has.any.keys('description', 'validate');
11
+ (0, _chai.expect)(validator.description).to.be.a('string');
12
+ (0, _chai.expect)(validator.validate).to.be.a('function');
13
+ });
14
+ describe('#validate', () => {
15
+ it('Finds the record valid', async () => {
16
+ const validator = await (0, _doubleCommas.default)();
17
+ const record = new _marcRecord.MarcRecord({
18
+ fields: [{
19
+ tag: '700',
20
+ subfields: [{
21
+ code: 'e',
22
+ value: 'foo,bar'
23
+ }]
24
+ }]
25
+ });
26
+ const result = await validator.validate(record);
27
+ (0, _chai.expect)(result).to.eql({
28
+ valid: true
29
+ });
30
+ });
31
+ it('Finds the record invalid', async () => {
32
+ const validator = await (0, _doubleCommas.default)();
33
+ const record = new _marcRecord.MarcRecord({
34
+ fields: [{
35
+ tag: '700',
36
+ subfields: [{
37
+ code: 'e',
38
+ value: 'foo,,bar'
39
+ }]
40
+ }]
41
+ });
42
+ const result = await validator.validate(record);
43
+ (0, _chai.expect)(result).to.eql({
44
+ valid: false
45
+ });
46
+ });
47
+ });
48
+ describe('#fix', () => {
49
+ it('Fixes the record', async () => {
50
+ const validator = await (0, _doubleCommas.default)();
51
+ const record = new _marcRecord.MarcRecord({
52
+ fields: [{
53
+ tag: '700',
54
+ subfields: [{
55
+ code: 'e',
56
+ value: 'foo,,bar'
57
+ }]
58
+ }]
59
+ });
60
+ await validator.fix(record);
61
+ (0, _chai.expect)(record.fields).to.eql([{
62
+ tag: '700',
63
+ ind1: ' ',
64
+ ind2: ' ',
65
+ subfields: [{
66
+ code: 'e',
67
+ value: 'foo,bar'
68
+ }]
69
+ }]);
70
+ });
71
+ });
72
+ });
28
73
  //# sourceMappingURL=double-commas.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/double-commas.spec.js"],"names":["describe","it","validator","to","be","an","that","has","any","keys","description","a","validate","record","MarcRecord","fields","tag","subfields","code","value","result","eql","valid","fix","ind1","ind2"],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BA,0EAEA,aAEA,0BACA,iDACA,kD,qhBAEAA,SAAS,eAAT,CAA0B,IAAM,CAC/BC,GAAG,qBAAH,mBAA0B,WAAY,CACrC,KAAMC,WAAY,KAAM,4BAAxB,CAEA,iBAAOA,SAAP,EACEC,EADF,CACKC,EADL,CACQC,EADR,CACW,QADX,EAEEC,IAFF,CAEOC,GAFP,CAEWC,GAFX,CAEeC,IAFf,CAEoB,aAFpB,CAEmC,UAFnC,EAIA,iBAAOP,UAAUQ,WAAjB,EAA8BP,EAA9B,CAAiCC,EAAjC,CAAoCO,CAApC,CAAsC,QAAtC,EACA,iBAAOT,UAAUU,QAAjB,EAA2BT,EAA3B,CAA8BC,EAA9B,CAAiCO,CAAjC,CAAmC,UAAnC,CACA,CATD,GAWAX,SAAS,WAAT,CAAsB,IAAM,CAC3BC,GAAG,wBAAH,mBAA6B,WAAY,CACxC,KAAMC,WAAY,KAAM,4BAAxB,CACA,KAAMW,QAAS,GAAIC,uBAAJ,CAAe,CAC7BC,OAAQ,CAAC,CAACC,IAAK,KAAN,CAAaC,UAAW,CAAC,CAACC,KAAM,GAAP,CAAYC,MAAO,SAAnB,CAAD,CAAxB,CAAD,CADqB,CAAf,CAAf,CAGA,KAAMC,QAAS,KAAMlB,WAAUU,QAAV,CAAmBC,MAAnB,CAArB,CAEA,iBAAOO,MAAP,EAAejB,EAAf,CAAkBkB,GAAlB,CAAsB,CAACC,MAAO,IAAR,CAAtB,CACA,CARD,GASArB,GAAG,0BAAH,mBAA+B,WAAY,CAC1C,KAAMC,WAAY,KAAM,4BAAxB,CACA,KAAMW,QAAS,GAAIC,uBAAJ,CAAe,CAC7BC,OAAQ,CAAC,CAACC,IAAK,KAAN,CAAaC,UAAW,CAAC,CAACC,KAAM,GAAP,CAAYC,MAAO,UAAnB,CAAD,CAAxB,CAAD,CADqB,CAAf,CAAf,CAGA,KAAMC,QAAS,KAAMlB,WAAUU,QAAV,CAAmBC,MAAnB,CAArB,CAEA,iBAAOO,MAAP,EAAejB,EAAf,CAAkBkB,GAAlB,CAAsB,CAACC,MAAO,KAAR,CAAtB,CACA,CARD,EASA,CAnBD,EAqBAtB,SAAS,MAAT,CAAiB,IAAM,CACtBC,GAAG,kBAAH,mBAAuB,WAAY,CAClC,KAAMC,WAAY,KAAM,4BAAxB,CACA,KAAMW,QAAS,GAAIC,uBAAJ,CAAe,CAC7BC,OAAQ,CAAC,CAACC,IAAK,KAAN,CAAaC,UAAW,CAAC,CAACC,KAAM,GAAP,CAAYC,MAAO,UAAnB,CAAD,CAAxB,CAAD,CADqB,CAAf,CAAf,CAGA,KAAMjB,WAAUqB,GAAV,CAAcV,MAAd,CAAN,CAEA,iBAAOA,OAAOE,MAAd,EAAsBZ,EAAtB,CAAyBkB,GAAzB,CAA6B,CAC5B,CACCL,IAAK,KADN,CAECQ,KAAM,GAFP,CAGCC,KAAM,GAHP,CAICR,UAAW,CAAC,CAACC,KAAM,GAAP,CAAYC,MAAO,SAAnB,CAAD,CAJZ,CAD4B,CAA7B,CAQA,CAfD,EAgBA,CAjBD,CAkBA,CAnDD","file":"double-commas.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 {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/double-commas';\n\ndescribe('double-commas', () => {\n\tit('Creates a validator', async () => {\n\t\tconst validator = await validatorFactory();\n\n\t\texpect(validator)\n\t\t\t.to.be.an('object')\n\t\t\t.that.has.any.keys('description', 'validate');\n\n\t\texpect(validator.description).to.be.a('string');\n\t\texpect(validator.validate).to.be.a('function');\n\t});\n\n\tdescribe('#validate', () => {\n\t\tit('Finds the record valid', async () => {\n\t\t\tconst validator = await validatorFactory();\n\t\t\tconst record = new MarcRecord({\n\t\t\t\tfields: [{tag: '700', subfields: [{code: 'e', value: 'foo,bar'}]}]\n\t\t\t});\n\t\t\tconst result = await validator.validate(record);\n\n\t\t\texpect(result).to.eql({valid: true});\n\t\t});\n\t\tit('Finds the record invalid', async () => {\n\t\t\tconst validator = await validatorFactory();\n\t\t\tconst record = new MarcRecord({\n\t\t\t\tfields: [{tag: '700', subfields: [{code: 'e', value: 'foo,,bar'}]}]\n\t\t\t});\n\t\t\tconst result = await validator.validate(record);\n\n\t\t\texpect(result).to.eql({valid: false});\n\t\t});\n\t});\n\n\tdescribe('#fix', () => {\n\t\tit('Fixes the record', async () => {\n\t\t\tconst validator = await validatorFactory();\n\t\t\tconst record = new MarcRecord({\n\t\t\t\tfields: [{tag: '700', subfields: [{code: 'e', value: 'foo,,bar'}]}]\n\t\t\t});\n\t\t\tawait validator.fix(record);\n\n\t\t\texpect(record.fields).to.eql([\n\t\t\t\t{\n\t\t\t\t\ttag: '700',\n\t\t\t\t\tind1: ' ',\n\t\t\t\t\tind2: ' ',\n\t\t\t\t\tsubfields: [{code: 'e', value: 'foo,bar'}]\n\t\t\t\t}\n\t\t\t]);\n\t\t});\n\t});\n});\n"]}
1
+ {"version":3,"file":"double-commas.spec.js","names":["_chai","require","_marcRecord","_doubleCommas","_interopRequireDefault","obj","__esModule","default","describe","it","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","record","MarcRecord","fields","tag","subfields","code","value","result","eql","valid","fix","ind1","ind2"],"sources":["../src/double-commas.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/double-commas';\n\ndescribe('double-commas', () => {\n it('Creates a validator', async () => {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n });\n\n describe('#validate', () => {\n it('Finds the record valid', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [{tag: '700', subfields: [{code: 'e', value: 'foo,bar'}]}]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true});\n });\n it('Finds the record invalid', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [{tag: '700', subfields: [{code: 'e', value: 'foo,,bar'}]}]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false});\n });\n });\n\n describe('#fix', () => {\n it('Fixes the record', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [{tag: '700', subfields: [{code: 'e', value: 'foo,,bar'}]}]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '700',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'e', value: 'foo,bar'}]\n }\n ]);\n });\n });\n});\n"],"mappings":"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"}
@@ -1,28 +1,48 @@
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')})}}exports.default=(()=>{var _ref=_asyncToGenerator(function*(tagPattern){let validate=(()=>{var _ref2=_asyncToGenerator(function*(record){const invalid=iterateFields(record).find(function(obj){return obj.validation===true});return invalid?{valid:false,messages:[`Multiple ${invalid.obj.tag} fields which only differ in the first indicator`]}:{valid:true,messages:[]}});return function validate(_x2){return _ref2.apply(this,arguments)}})();let fix=(()=>{var _ref3=_asyncToGenerator(function*(record){iterateFields(record).filter(function(item){return item.validation===false}).map(function(item){return(0,_lodash.omit)(item,['validation'])}).forEach(function(field){return record.removeField(field)})});return function fix(_x3){return _ref3.apply(this,arguments)}})();if(tagPattern instanceof RegExp){return{description:'Handles data fields that only differ in the first indicator',validate,fix}}throw new Error('No tagPattern provided');function iterateFields(record){return record.fields.map(obj=>{return{validation:matches(obj,record.fields),obj}})}function matches(field,fields){return tagPattern.test(field.tag)&&field.ind1===' '&&hasDuplicate(field,fields)}function hasDuplicate(fieldA,fields){return fields.some(fieldB=>fieldA!==fieldB&&fieldA.tag===fieldB.tag&&fieldA.ind1!==fieldB.ind1&&fieldA.subfields.length===fieldB.subfields.length&&fieldA.subfields.every(aSf=>fieldB.subfields.some(bSf=>aSf.code===bSf.code&&aSf.value===bSf.value)))}});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
+ function _default(tagPattern) {
8
+ if (tagPattern instanceof RegExp) {
9
+ return {
10
+ description: 'Handles data fields that only differ in the first indicator',
11
+ validate,
12
+ fix
13
+ };
14
+ }
15
+ throw new Error('No tagPattern provided');
16
+ function validate(record) {
17
+ const invalid = iterateFields(record).find(obj => obj.validation === true);
18
+ return invalid ? {
19
+ valid: false,
20
+ messages: [`Multiple ${invalid.obj.tag} fields which only differ in the first indicator`]
21
+ } : {
22
+ valid: true,
23
+ messages: []
24
+ };
25
+ }
26
+ function fix(record) {
27
+ iterateFields(record).filter(item => item.validation === false).map(({
28
+ validation,
29
+ ...item
30
+ }) => item) // eslint-disable-line no-unused-vars
31
+ .forEach(({
32
+ obj
33
+ }) => record.removeField(obj));
34
+ }
35
+ function iterateFields(record) {
36
+ return record.fields.map(obj => ({
37
+ validation: matches(obj, record.fields),
38
+ obj
39
+ }));
40
+ }
41
+ function matches(field, fields) {
42
+ return tagPattern.test(field.tag) && field.ind1 === ' ' && hasDuplicate(field, fields);
43
+ }
44
+ function hasDuplicate(fieldA, fields) {
45
+ return fields.some(fieldB => fieldA !== fieldB && fieldA.tag === fieldB.tag && fieldA.ind1 !== fieldB.ind1 && fieldA.subfields.length === fieldB.subfields.length && fieldA.subfields.every(aSf => fieldB.subfields.some(bSf => aSf.code === bSf.code && aSf.value === bSf.value)));
46
+ }
47
+ }
28
48
  //# sourceMappingURL=duplicates-ind1.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/duplicates-ind1.js"],"names":["tagPattern","record","invalid","iterateFields","find","obj","validation","valid","messages","tag","validate","filter","item","map","forEach","removeField","field","fix","RegExp","description","Error","fields","matches","test","ind1","hasDuplicate","fieldA","some","fieldB","subfields","length","every","aSf","bSf","code","value"],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BA,kCACA,a,yDACA,8B,2bAEe,UAAgBA,UAAhB,CAA4B,gDAW1C,UAAwBC,MAAxB,CAAgC,CAC/B,KAAMC,SAAUC,cAAcF,MAAd,EACdG,IADc,CACT,oBAAOC,KAAIC,UAAJ,GAAmB,IAA1B,CADS,CAAhB,CAEA,MAAOJ,SAAU,CAACK,MAAO,KAAR,CAAeC,SAAU,CAAE,YAAWN,QAAQG,GAAR,CAAYI,GAAI,kDAA7B,CAAzB,CAAV,CAAsH,CAACF,MAAO,IAAR,CAAcC,SAAU,EAAxB,CAC7H,CAfyC,iBAW3BE,SAX2B,wFAiB1C,UAAmBT,MAAnB,CAA2B,CAC1BE,cAAcF,MAAd,EACEU,MADF,CACS,qBAAQC,MAAKN,UAAL,GAAoB,KAA5B,CADT,EAEEO,GAFF,CAEM,qBAAQ,iBAAKD,IAAL,CAAW,CAAC,YAAD,CAAX,CAAR,CAFN,EAGEE,OAHF,CAGU,sBAASb,QAAOc,WAAP,CAAmBC,KAAnB,CAAT,CAHV,CAIA,CAtByC,iBAiB3BC,IAjB2B,8CAC1C,GAAIjB,qBAAsBkB,OAA1B,CAAkC,CACjC,MAAO,CACNC,YACC,6DAFK,CAGNT,QAHM,CAINO,GAJM,CAMP,CACD,KAAM,IAAIG,MAAJ,CAAU,wBAAV,CAAN,CAeA,QAASjB,cAAT,CAAuBF,MAAvB,CAA+B,CAC9B,MAAOA,QAAOoB,MAAP,CAAcR,GAAd,CAAkBR,KAAO,CAC/B,MAAO,CAACC,WAAYgB,QAAQjB,GAAR,CAAaJ,OAAOoB,MAApB,CAAb,CAA0ChB,GAA1C,CACP,CAFM,CAGP,CAED,QAASiB,QAAT,CAAiBN,KAAjB,CAAwBK,MAAxB,CAAgC,CAC/B,MAAOrB,YAAWuB,IAAX,CAAgBP,MAAMP,GAAtB,GAA8BO,MAAMQ,IAAN,GAAe,GAA7C,EAAoDC,aAAaT,KAAb,CAAoBK,MAApB,CAC3D,CAED,QAASI,aAAT,CAAsBC,MAAtB,CAA8BL,MAA9B,CAAsC,CACrC,MAAOA,QAAOM,IAAP,CACNC,QACCF,SAAWE,MAAX,EACAF,OAAOjB,GAAP,GAAemB,OAAOnB,GADtB,EAEAiB,OAAOF,IAAP,GAAgBI,OAAOJ,IAFvB,EAGAE,OAAOG,SAAP,CAAiBC,MAAjB,GAA4BF,OAAOC,SAAP,CAAiBC,MAH7C,EAIAJ,OAAOG,SAAP,CAAiBE,KAAjB,CAAuBC,KACtBJ,OAAOC,SAAP,CAAiBF,IAAjB,CACCM,KAAOD,IAAIE,IAAJ,GAAaD,IAAIC,IAAjB,EAAyBF,IAAIG,KAAJ,GAAcF,IAAIE,KADnD,CADD,CANK,CAYP,CACD,C","file":"duplicates-ind1.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 require-await */\n'use strict';\nimport {omit} from 'lodash';\n\nexport default async function (tagPattern) {\n\tif (tagPattern instanceof RegExp) {\n\t\treturn {\n\t\t\tdescription:\n\t\t\t\t'Handles data fields that only differ in the first indicator',\n\t\t\tvalidate,\n\t\t\tfix\n\t\t};\n\t}\n\tthrow new Error('No tagPattern provided');\n\n\tasync function validate(record) {\n\t\tconst invalid = iterateFields(record)\n\t\t\t.find(obj => obj.validation === true);\n\t\treturn invalid ? {valid: false, messages: [`Multiple ${invalid.obj.tag} fields which only differ in the first indicator`]} : {valid: true, messages: []};\n\t}\n\n\tasync function fix(record) {\n\t\titerateFields(record)\n\t\t\t.filter(item => item.validation === false)\n\t\t\t.map(item => omit(item, ['validation']))\n\t\t\t.forEach(field => record.removeField(field));\n\t}\n\n\tfunction iterateFields(record) {\n\t\treturn record.fields.map(obj => {\n\t\t\treturn {validation: matches(obj, record.fields), obj};\n\t\t});\n\t}\n\n\tfunction matches(field, fields) {\n\t\treturn tagPattern.test(field.tag) && field.ind1 === ' ' && hasDuplicate(field, fields);\n\t}\n\n\tfunction hasDuplicate(fieldA, fields) {\n\t\treturn fields.some(\n\t\t\tfieldB =>\n\t\t\t\tfieldA !== fieldB &&\n\t\t\t\tfieldA.tag === fieldB.tag &&\n\t\t\t\tfieldA.ind1 !== fieldB.ind1 &&\n\t\t\t\tfieldA.subfields.length === fieldB.subfields.length &&\n\t\t\t\tfieldA.subfields.every(aSf =>\n\t\t\t\t\tfieldB.subfields.some(\n\t\t\t\t\t\tbSf => aSf.code === bSf.code && aSf.value === bSf.value\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t);\n\t}\n}\n"]}
1
+ {"version":3,"file":"duplicates-ind1.js","names":["_default","tagPattern","RegExp","description","validate","fix","Error","record","invalid","iterateFields","find","obj","validation","valid","messages","tag","filter","item","map","forEach","removeField","fields","matches","field","test","ind1","hasDuplicate","fieldA","some","fieldB","subfields","length","every","aSf","bSf","code","value"],"sources":["../src/duplicates-ind1.js"],"sourcesContent":["export default function (tagPattern) {\n if (tagPattern instanceof RegExp) {\n return {\n description:\n 'Handles data fields that only differ in the first indicator',\n validate,\n fix\n };\n }\n\n throw new Error('No tagPattern provided');\n\n function validate(record) {\n const invalid = iterateFields(record)\n .find(obj => obj.validation === true);\n return invalid ? {valid: false, messages: [`Multiple ${invalid.obj.tag} fields which only differ in the first indicator`]} : {valid: true, messages: []};\n }\n\n function fix(record) {\n iterateFields(record)\n .filter(item => item.validation === false)\n .map(({validation, ...item}) => item) // eslint-disable-line no-unused-vars\n .forEach(({obj}) => record.removeField(obj));\n }\n\n function iterateFields(record) {\n return record.fields.map(obj => ({validation: matches(obj, record.fields), obj}));\n }\n\n function matches(field, fields) {\n return tagPattern.test(field.tag) && field.ind1 === ' ' && hasDuplicate(field, fields);\n }\n\n function hasDuplicate(fieldA, fields) {\n return fields.some(fieldB => fieldA !== fieldB &&\n fieldA.tag === fieldB.tag &&\n fieldA.ind1 !== fieldB.ind1 &&\n fieldA.subfields.length === fieldB.subfields.length &&\n fieldA.subfields.every(aSf => fieldB.subfields.some(bSf => aSf.code === bSf.code && aSf.value === bSf.value)));\n }\n}\n"],"mappings":";;;;;;AAAe,SAAAA,SAAUC,UAAU,EAAE;EACnC,IAAIA,UAAU,YAAYC,MAAM,EAAE;IAChC,OAAO;MACLC,WAAW,EACT,6DAA6D;MAC/DC,QAAQ;MACRC;IACF,CAAC;EACH;EAEA,MAAM,IAAIC,KAAK,CAAC,wBAAwB,CAAC;EAEzC,SAASF,QAAQA,CAACG,MAAM,EAAE;IACxB,MAAMC,OAAO,GAAGC,aAAa,CAACF,MAAM,CAAC,CAClCG,IAAI,CAACC,GAAG,IAAIA,GAAG,CAACC,UAAU,KAAK,IAAI,CAAC;IACvC,OAAOJ,OAAO,GAAG;MAACK,KAAK,EAAE,KAAK;MAAEC,QAAQ,EAAE,CAAE,YAAWN,OAAO,CAACG,GAAG,CAACI,GAAI,kDAAiD;IAAC,CAAC,GAAG;MAACF,KAAK,EAAE,IAAI;MAAEC,QAAQ,EAAE;IAAE,CAAC;EAC1J;EAEA,SAAST,GAAGA,CAACE,MAAM,EAAE;IACnBE,aAAa,CAACF,MAAM,CAAC,CAClBS,MAAM,CAACC,IAAI,IAAIA,IAAI,CAACL,UAAU,KAAK,KAAK,CAAC,CACzCM,GAAG,CAAC,CAAC;MAACN,UAAU;MAAE,GAAGK;IAAI,CAAC,KAAKA,IAAI,CAAC,CAAC;IAAA,CACrCE,OAAO,CAAC,CAAC;MAACR;IAAG,CAAC,KAAKJ,MAAM,CAACa,WAAW,CAACT,GAAG,CAAC,CAAC;EAChD;EAEA,SAASF,aAAaA,CAACF,MAAM,EAAE;IAC7B,OAAOA,MAAM,CAACc,MAAM,CAACH,GAAG,CAACP,GAAG,KAAK;MAACC,UAAU,EAAEU,OAAO,CAACX,GAAG,EAAEJ,MAAM,CAACc,MAAM,CAAC;MAAEV;IAAG,CAAC,CAAC,CAAC;EACnF;EAEA,SAASW,OAAOA,CAACC,KAAK,EAAEF,MAAM,EAAE;IAC9B,OAAOpB,UAAU,CAACuB,IAAI,CAACD,KAAK,CAACR,GAAG,CAAC,IAAIQ,KAAK,CAACE,IAAI,KAAK,GAAG,IAAIC,YAAY,CAACH,KAAK,EAAEF,MAAM,CAAC;EACxF;EAEA,SAASK,YAAYA,CAACC,MAAM,EAAEN,MAAM,EAAE;IACpC,OAAOA,MAAM,CAACO,IAAI,CAACC,MAAM,IAAIF,MAAM,KAAKE,MAAM,IAC5CF,MAAM,CAACZ,GAAG,KAAKc,MAAM,CAACd,GAAG,IACzBY,MAAM,CAACF,IAAI,KAAKI,MAAM,CAACJ,IAAI,IAC3BE,MAAM,CAACG,SAAS,CAACC,MAAM,KAAKF,MAAM,CAACC,SAAS,CAACC,MAAM,IACnDJ,MAAM,CAACG,SAAS,CAACE,KAAK,CAACC,GAAG,IAAIJ,MAAM,CAACC,SAAS,CAACF,IAAI,CAACM,GAAG,IAAID,GAAG,CAACE,IAAI,KAAKD,GAAG,CAACC,IAAI,IAAIF,GAAG,CAACG,KAAK,KAAKF,GAAG,CAACE,KAAK,CAAC,CAAC,CAAC;EAClH;AACF"}