@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/dist/sort-tags.js CHANGED
@@ -1,28 +1,54 @@
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 _ref3=_asyncToGenerator(function*(record,tagPattern){const compareArrays=(0,_lodash.isEqual)(record.fields,(yield sort(record.fields,tagPattern)));return compareArrays?{valid:true,messages:[]}:{valid:false,messages:['Fields are in incorrect order']}});return function validate(_x3,_x4){return _ref3.apply(this,arguments)}})();return{description:'Handles field ordering',validate,fix:(()=>{var _ref2=_asyncToGenerator(function*(record){return{fix:yield sort(record,tagPattern)}});return function fix(_x2){return _ref2.apply(this,arguments)}})()};function sort(record,tagPattern){if(tagPattern){return sortPatternFields(record,tagPattern)}return sortFields(record)}});return function(_x){return _ref.apply(this,arguments)}})();function sortPatternFields(record,tagPattern){const matchingTags=record.fields.map(field=>{return tagPattern.some(pattern=>pattern.test(field.tag))?field:null}).filter(tag=>tag);const sortedArray=sortFields(record.fields);const fixedArray=(0,_lodash.reject)(sortedArray,field=>tagPattern.some(pattern=>pattern.test(field.tag)));fixedArray.splice(index(sortedArray,tagPattern),0,...matchingTags);record.fields=fixedArray}function sortFields(fields){return(0,_lodash.orderBy)(fields,['tag'])}function index(fields,tagPattern){return fields.findIndex(field=>{return tagPattern.some(pattern=>pattern.test(field.tag))})}
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = _default;
7
+ var _marcRecord = require("@natlibfi/marc-record");
8
+ function _default(tagPattern) {
9
+ return {
10
+ description: 'Handles field ordering',
11
+ validate,
12
+ fix: async record => ({
13
+ fix: await sort(record, tagPattern)
14
+ })
15
+ };
16
+ function validate(record, tagPattern) {
17
+ return _marcRecord.MarcRecord.isEqual(record.fields, sort(record.fields, tagPattern)) ? {
18
+ valid: true,
19
+ messages: []
20
+ } : {
21
+ valid: false,
22
+ messages: ['Fields are in incorrect order']
23
+ };
24
+ }
25
+ function sort(record, tagPattern) {
26
+ if (tagPattern) {
27
+ return sortPatternFields(record, tagPattern);
28
+ }
29
+ return sortFields(record);
30
+ }
31
+ }
32
+ function sortPatternFields(record, tagPattern) {
33
+ const matchingTags = record.fields.map(field => tagPattern.some(pattern => pattern.test(field.tag)) ? field : null).filter(tag => tag);
34
+ const sortedArray = sortFields(record.fields);
35
+ const fixedArray = sortedArray.filter(field => !tagPattern.some(pattern => pattern.test(field.tag)));
36
+ fixedArray.splice(index(sortedArray, tagPattern), 0, ...matchingTags); // eslint-disable-line functional/immutable-data
37
+ record.fields = fixedArray; // eslint-disable-line functional/immutable-data
38
+ }
39
+
40
+ function sortFields(fields) {
41
+ return [...fields].sort((a, b) => {
42
+ if (a.tag > b.tag) {
43
+ return 1;
44
+ }
45
+ if (b.tag > a.tag) {
46
+ return -1;
47
+ }
48
+ return 0;
49
+ });
50
+ }
51
+ function index(fields, tagPattern) {
52
+ return fields.findIndex(field => tagPattern.some(pattern => pattern.test(field.tag)));
53
+ }
28
54
  //# sourceMappingURL=sort-tags.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/sort-tags.js"],"names":["tagPattern","record","compareArrays","fields","sort","valid","messages","validate","description","fix","sortPatternFields","sortFields","matchingTags","map","field","some","pattern","test","tag","filter","sortedArray","fixedArray","splice","index","findIndex"],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BA,kCACA,a,yDACA,8B,2bAEe,UAAgBA,UAAhB,CAA4B,gDAU1C,UAAwBC,MAAxB,CAAgCD,UAAhC,CAA4C,CAC3C,KAAME,eAAgB,oBAAQD,OAAOE,MAAf,EAAuB,KAAMC,MAAKH,OAAOE,MAAZ,CAAoBH,UAApB,CAA7B,EAAtB,CACA,MAAOE,eAAgB,CAACG,MAAO,IAAR,CAAcC,SAAU,EAAxB,CAAhB,CAA8C,CAACD,MAAO,KAAR,CAAeC,SAAU,CAAC,+BAAD,CAAzB,CACrD,CAbyC,iBAU3BC,SAV2B,kDAC1C,MAAO,CACNC,YACE,wBAFI,CAGND,QAHM,CAINE,sCAAK,UAAMR,MAAN,QAAiB,CACrBQ,IAAK,KAAML,MAAKH,MAAL,CAAaD,UAAb,CADU,CAAjB,CAAL,kEAJM,CAAP,CAcA,QAASI,KAAT,CAAcH,MAAd,CAAsBD,UAAtB,CAAkC,CACjC,GAAIA,UAAJ,CAAgB,CACf,MAAOU,mBAAkBT,MAAlB,CAA0BD,UAA1B,CACP,CACD,MAAOW,YAAWV,MAAX,CACP,CACD,C,6DAED,QAASS,kBAAT,CAA2BT,MAA3B,CAAmCD,UAAnC,CAA+C,CAC9C,KAAMY,cAAeX,OAAOE,MAAP,CAAcU,GAAd,CAAkBC,OAAS,CAC/C,MAAOd,YAAWe,IAAX,CAAgBC,SAAWA,QAAQC,IAAR,CAAaH,MAAMI,GAAnB,CAA3B,EAAsDJ,KAAtD,CAA8D,IACrE,CAFoB,EAElBK,MAFkB,CAEXD,KAAOA,GAFI,CAArB,CAGA,KAAME,aAAcT,WAAWV,OAAOE,MAAlB,CAApB,CACA,KAAMkB,YAAa,mBAAOD,WAAP,CAAqBN,OAASd,WAAWe,IAAX,CAAgBC,SAAWA,QAAQC,IAAR,CAAaH,MAAMI,GAAnB,CAA3B,CAA9B,CAAnB,CACAG,WAAWC,MAAX,CAAkBC,MAAMH,WAAN,CAAmBpB,UAAnB,CAAlB,CAAkD,CAAlD,CAAqD,GAAGY,YAAxD,EACAX,OAAOE,MAAP,CAAgBkB,UAChB,CAED,QAASV,WAAT,CAAoBR,MAApB,CAA4B,CAC3B,MAAO,oBAAQA,MAAR,CAAgB,CAAC,KAAD,CAAhB,CACP,CAED,QAASoB,MAAT,CAAepB,MAAf,CAAuBH,UAAvB,CAAmC,CAClC,MAAOG,QAAOqB,SAAP,CAAiBV,OAAS,CAChC,MAAOd,YAAWe,IAAX,CAAgBC,SAAWA,QAAQC,IAAR,CAAaH,MAAMI,GAAnB,CAA3B,CACP,CAFM,CAGP","file":"sort-tags.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 {orderBy, isEqual, reject} from 'lodash';\n\nexport default async function (tagPattern) {\n\treturn {\n\t\tdescription:\n\t\t\t\t'Handles field ordering',\n\t\tvalidate,\n\t\tfix: async record => ({\n\t\t\tfix: await sort(record, tagPattern)\n\t\t})\n\t};\n\n\tasync function validate(record, tagPattern) {\n\t\tconst compareArrays = isEqual(record.fields, await sort(record.fields, tagPattern));\n\t\treturn compareArrays ? {valid: true, messages: []} : {valid: false, messages: ['Fields are in incorrect order']};\n\t}\n\n\tfunction sort(record, tagPattern) {\n\t\tif (tagPattern) {\n\t\t\treturn sortPatternFields(record, tagPattern);\n\t\t}\n\t\treturn sortFields(record);\n\t}\n}\n\nfunction sortPatternFields(record, tagPattern) {\n\tconst matchingTags = record.fields.map(field => {\n\t\treturn tagPattern.some(pattern => pattern.test(field.tag)) ? field : null;\n\t}).filter(tag => tag);\n\tconst sortedArray = sortFields(record.fields);\n\tconst fixedArray = reject(sortedArray, (field => tagPattern.some(pattern => pattern.test(field.tag))));\n\tfixedArray.splice(index(sortedArray, tagPattern), 0, ...matchingTags);\n\trecord.fields = fixedArray;\n}\n\nfunction sortFields(fields) {\n\treturn orderBy(fields, ['tag']);\n}\n\nfunction index(fields, tagPattern) {\n\treturn fields.findIndex(field => {\n\t\treturn tagPattern.some(pattern => pattern.test(field.tag));\n\t});\n}\n"]}
1
+ {"version":3,"file":"sort-tags.js","names":["_marcRecord","require","_default","tagPattern","description","validate","fix","record","sort","MarcRecord","isEqual","fields","valid","messages","sortPatternFields","sortFields","matchingTags","map","field","some","pattern","test","tag","filter","sortedArray","fixedArray","splice","index","a","b","findIndex"],"sources":["../src/sort-tags.js"],"sourcesContent":["import {MarcRecord} from '@natlibfi/marc-record';\n\nexport default function (tagPattern) {\n return {\n description:\n 'Handles field ordering',\n validate,\n fix: async record => ({\n fix: await sort(record, tagPattern)\n })\n };\n\n function validate(record, tagPattern) {\n return MarcRecord.isEqual(record.fields, sort(record.fields, tagPattern)) ? {valid: true, messages: []} : {valid: false, messages: ['Fields are in incorrect order']};\n }\n\n function sort(record, tagPattern) {\n if (tagPattern) {\n return sortPatternFields(record, tagPattern);\n }\n\n return sortFields(record);\n }\n}\n\nfunction sortPatternFields(record, tagPattern) {\n const matchingTags = record.fields.map(field => tagPattern.some(pattern => pattern.test(field.tag)) ? field : null).filter(tag => tag);\n const sortedArray = sortFields(record.fields);\n const fixedArray = sortedArray.filter(field => !tagPattern.some(pattern => pattern.test(field.tag)));\n fixedArray.splice(index(sortedArray, tagPattern), 0, ...matchingTags); // eslint-disable-line functional/immutable-data\n record.fields = fixedArray; // eslint-disable-line functional/immutable-data\n}\n\nfunction sortFields(fields) {\n return [...fields].sort((a, b) => {\n if (a.tag > b.tag) {\n return 1;\n }\n if (b.tag > a.tag) {\n return -1;\n }\n return 0;\n });\n}\n\nfunction index(fields, tagPattern) {\n return fields.findIndex(field => tagPattern.some(pattern => pattern.test(field.tag)));\n}\n"],"mappings":";;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AAEe,SAAAC,SAAUC,UAAU,EAAE;EACnC,OAAO;IACLC,WAAW,EACT,wBAAwB;IAC1BC,QAAQ;IACRC,GAAG,EAAE,MAAMC,MAAM,KAAK;MACpBD,GAAG,EAAE,MAAME,IAAI,CAACD,MAAM,EAAEJ,UAAU;IACpC,CAAC;EACH,CAAC;EAED,SAASE,QAAQA,CAACE,MAAM,EAAEJ,UAAU,EAAE;IACpC,OAAOM,sBAAU,CAACC,OAAO,CAACH,MAAM,CAACI,MAAM,EAAEH,IAAI,CAACD,MAAM,CAACI,MAAM,EAAER,UAAU,CAAC,CAAC,GAAG;MAACS,KAAK,EAAE,IAAI;MAAEC,QAAQ,EAAE;IAAE,CAAC,GAAG;MAACD,KAAK,EAAE,KAAK;MAAEC,QAAQ,EAAE,CAAC,+BAA+B;IAAC,CAAC;EACvK;EAEA,SAASL,IAAIA,CAACD,MAAM,EAAEJ,UAAU,EAAE;IAChC,IAAIA,UAAU,EAAE;MACd,OAAOW,iBAAiB,CAACP,MAAM,EAAEJ,UAAU,CAAC;IAC9C;IAEA,OAAOY,UAAU,CAACR,MAAM,CAAC;EAC3B;AACF;AAEA,SAASO,iBAAiBA,CAACP,MAAM,EAAEJ,UAAU,EAAE;EAC7C,MAAMa,YAAY,GAAGT,MAAM,CAACI,MAAM,CAACM,GAAG,CAACC,KAAK,IAAIf,UAAU,CAACgB,IAAI,CAACC,OAAO,IAAIA,OAAO,CAACC,IAAI,CAACH,KAAK,CAACI,GAAG,CAAC,CAAC,GAAGJ,KAAK,GAAG,IAAI,CAAC,CAACK,MAAM,CAACD,GAAG,IAAIA,GAAG,CAAC;EACtI,MAAME,WAAW,GAAGT,UAAU,CAACR,MAAM,CAACI,MAAM,CAAC;EAC7C,MAAMc,UAAU,GAAGD,WAAW,CAACD,MAAM,CAACL,KAAK,IAAI,CAACf,UAAU,CAACgB,IAAI,CAACC,OAAO,IAAIA,OAAO,CAACC,IAAI,CAACH,KAAK,CAACI,GAAG,CAAC,CAAC,CAAC;EACpGG,UAAU,CAACC,MAAM,CAACC,KAAK,CAACH,WAAW,EAAErB,UAAU,CAAC,EAAE,CAAC,EAAE,GAAGa,YAAY,CAAC,CAAC,CAAC;EACvET,MAAM,CAACI,MAAM,GAAGc,UAAU,CAAC,CAAC;AAC9B;;AAEA,SAASV,UAAUA,CAACJ,MAAM,EAAE;EAC1B,OAAO,CAAC,GAAGA,MAAM,CAAC,CAACH,IAAI,CAAC,CAACoB,CAAC,EAAEC,CAAC,KAAK;IAChC,IAAID,CAAC,CAACN,GAAG,GAAGO,CAAC,CAACP,GAAG,EAAE;MACjB,OAAO,CAAC;IACV;IACA,IAAIO,CAAC,CAACP,GAAG,GAAGM,CAAC,CAACN,GAAG,EAAE;MACjB,OAAO,CAAC,CAAC;IACX;IACA,OAAO,CAAC;EACV,CAAC,CAAC;AACJ;AAEA,SAASK,KAAKA,CAAChB,MAAM,EAAER,UAAU,EAAE;EACjC,OAAOQ,MAAM,CAACmB,SAAS,CAACZ,KAAK,IAAIf,UAAU,CAACgB,IAAI,CAACC,OAAO,IAAIA,OAAO,CAACC,IAAI,CAACH,KAAK,CAACI,GAAG,CAAC,CAAC,CAAC;AACvF"}
@@ -1,28 +1,207 @@
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
- */'use strict';var _chai=require('chai');var _marcRecord=require('@natlibfi/marc-record');var _sortTags=require('../src/sort-tags');var _sortTags2=_interopRequireDefault(_sortTags);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('sort-tags',()=>{it('Creates a validator',_asyncToGenerator(function*(){const validator=yield(0,_sortTags2.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,_sortTags2.default)();const record=new _marcRecord.MarcRecord({fields:[{tag:'001',value:'100'},{tag:'008',value:'bar'},{tag:'100',ind1:' ',ind2:' ',subfields:[{code:'a',value:'Foo Bar'}]},{tag:'245',ind1:' ',ind2:' ',subfields:[{code:'a',value:'Fubar'}]}]});const result=yield validator.validate(record);(0,_chai.expect)(result).to.eql({valid:true,messages:[]})}));it('Finds the record invalid',_asyncToGenerator(function*(){const validator=yield(0,_sortTags2.default)();const record=new _marcRecord.MarcRecord({fields:[{tag:'008',value:'bar'},{tag:'001',value:'100'},{tag:'245',ind1:' ',ind2:' ',subfields:[{code:'a',value:'Fubar'}]},{tag:'100',ind1:' ',ind2:' ',subfields:[{code:'a',value:'Foo Bar'}]}]});const result=yield validator.validate(record);(0,_chai.expect)(result).to.eql({valid:false,messages:['Fields are in incorrect order']})}))});describe('#fix',()=>{it('Sorts with exclusion',_asyncToGenerator(function*(){const validator=yield(0,_sortTags2.default)([/^5..$/,/^7..$/]);const record=new _marcRecord.MarcRecord({fields:[{tag:'001',value:'100'},{tag:'530',value:'bar'},{tag:'30',value:'bar'},{tag:'c',ind1:' ',ind2:' ',subfields:[{code:'a',value:'Fubar'}]},{tag:'520',ind1:' ',ind2:' ',subfields:[{code:'a',value:'asdassdaasdsadsasad'}]},{tag:'a',ind1:' ',ind2:' ',subfields:[{code:'a',value:'qweweqewqqweweqwq'}]},{tag:'700',ind1:' ',ind2:' ',subfields:[{code:'a',value:'Bar Foo'}]},{tag:'711',ind1:' ',ind2:' ',subfields:[{code:'a',value:'Foo'}]},{tag:'710',ind1:' ',ind2:' ',subfields:[{code:'w',value:'Bar'}]}]});yield validator.fix(record);(0,_chai.expect)(record.fields).to.eql([{tag:'001',value:'100'},{tag:'30',value:'bar'},{tag:'530',value:'bar'},{tag:'520',ind1:' ',ind2:' ',subfields:[{code:'a',value:'asdassdaasdsadsasad'}]},{tag:'700',ind1:' ',ind2:' ',subfields:[{code:'a',value:'Bar Foo'}]},{tag:'711',ind1:' ',ind2:' ',subfields:[{code:'a',value:'Foo'}]},{tag:'710',ind1:' ',ind2:' ',subfields:[{code:'w',value:'Bar'}]},{tag:'a',ind1:' ',ind2:' ',subfields:[{code:'a',value:'qweweqewqqweweqwq'}]},{tag:'c',ind1:' ',ind2:' ',subfields:[{code:'a',value:'Fubar'}]}])}))})});
1
+ "use strict";
2
+
3
+ var _chai = require("chai");
4
+ var _marcRecord = require("@natlibfi/marc-record");
5
+ var _sortTags = _interopRequireDefault(require("../src/sort-tags"));
6
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
7
+ describe('sort-tags', () => {
8
+ it('Creates a validator', async () => {
9
+ const validator = await (0, _sortTags.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, _sortTags.default)();
17
+ const record = new _marcRecord.MarcRecord({
18
+ fields: [{
19
+ tag: '001',
20
+ value: '100'
21
+ }, {
22
+ tag: '008',
23
+ value: 'bar'
24
+ }, {
25
+ tag: '100',
26
+ ind1: ' ',
27
+ ind2: ' ',
28
+ subfields: [{
29
+ code: 'a',
30
+ value: 'Foo Bar'
31
+ }]
32
+ }, {
33
+ tag: '245',
34
+ ind1: ' ',
35
+ ind2: ' ',
36
+ subfields: [{
37
+ code: 'a',
38
+ value: 'Fubar'
39
+ }]
40
+ }]
41
+ });
42
+ const result = await validator.validate(record);
43
+ (0, _chai.expect)(result).to.eql({
44
+ valid: true,
45
+ messages: []
46
+ });
47
+ });
48
+ it('Finds the record invalid', async () => {
49
+ const validator = await (0, _sortTags.default)();
50
+ const record = new _marcRecord.MarcRecord({
51
+ fields: [{
52
+ tag: '008',
53
+ value: 'bar'
54
+ }, {
55
+ tag: '001',
56
+ value: '100'
57
+ }, {
58
+ tag: '245',
59
+ ind1: ' ',
60
+ ind2: ' ',
61
+ subfields: [{
62
+ code: 'a',
63
+ value: 'Fubar'
64
+ }]
65
+ }, {
66
+ tag: '100',
67
+ ind1: ' ',
68
+ ind2: ' ',
69
+ subfields: [{
70
+ code: 'a',
71
+ value: 'Foo Bar'
72
+ }]
73
+ }]
74
+ });
75
+ const result = await validator.validate(record);
76
+ (0, _chai.expect)(result).to.eql({
77
+ valid: false,
78
+ messages: ['Fields are in incorrect order']
79
+ });
80
+ });
81
+ });
82
+ describe('#fix', () => {
83
+ it('Sorts with exclusion', async () => {
84
+ const validator = await (0, _sortTags.default)([/^5..$/u, /^7..$/u]);
85
+ const record = new _marcRecord.MarcRecord({
86
+ fields: [{
87
+ tag: '001',
88
+ value: '100'
89
+ }, {
90
+ tag: '530',
91
+ value: 'bar'
92
+ }, {
93
+ tag: '30',
94
+ value: 'bar'
95
+ }, {
96
+ tag: 'c',
97
+ ind1: ' ',
98
+ ind2: ' ',
99
+ subfields: [{
100
+ code: 'a',
101
+ value: 'Fubar'
102
+ }]
103
+ }, {
104
+ tag: '520',
105
+ ind1: ' ',
106
+ ind2: ' ',
107
+ subfields: [{
108
+ code: 'a',
109
+ value: 'asdassdaasdsadsasad'
110
+ }]
111
+ }, {
112
+ tag: 'a',
113
+ ind1: ' ',
114
+ ind2: ' ',
115
+ subfields: [{
116
+ code: 'a',
117
+ value: 'qweweqewqqweweqwq'
118
+ }]
119
+ }, {
120
+ tag: '700',
121
+ ind1: ' ',
122
+ ind2: ' ',
123
+ subfields: [{
124
+ code: 'a',
125
+ value: 'Bar Foo'
126
+ }]
127
+ }, {
128
+ tag: '711',
129
+ ind1: ' ',
130
+ ind2: ' ',
131
+ subfields: [{
132
+ code: 'a',
133
+ value: 'Foo'
134
+ }]
135
+ }, {
136
+ tag: '710',
137
+ ind1: ' ',
138
+ ind2: ' ',
139
+ subfields: [{
140
+ code: 'w',
141
+ value: 'Bar'
142
+ }]
143
+ }]
144
+ });
145
+ await validator.fix(record);
146
+ (0, _chai.expect)(record.fields).to.eql([{
147
+ tag: '001',
148
+ value: '100'
149
+ }, {
150
+ tag: '30',
151
+ value: 'bar'
152
+ }, {
153
+ tag: '530',
154
+ value: 'bar'
155
+ }, {
156
+ tag: '520',
157
+ ind1: ' ',
158
+ ind2: ' ',
159
+ subfields: [{
160
+ code: 'a',
161
+ value: 'asdassdaasdsadsasad'
162
+ }]
163
+ }, {
164
+ tag: '700',
165
+ ind1: ' ',
166
+ ind2: ' ',
167
+ subfields: [{
168
+ code: 'a',
169
+ value: 'Bar Foo'
170
+ }]
171
+ }, {
172
+ tag: '711',
173
+ ind1: ' ',
174
+ ind2: ' ',
175
+ subfields: [{
176
+ code: 'a',
177
+ value: 'Foo'
178
+ }]
179
+ }, {
180
+ tag: '710',
181
+ ind1: ' ',
182
+ ind2: ' ',
183
+ subfields: [{
184
+ code: 'w',
185
+ value: 'Bar'
186
+ }]
187
+ }, {
188
+ tag: 'a',
189
+ ind1: ' ',
190
+ ind2: ' ',
191
+ subfields: [{
192
+ code: 'a',
193
+ value: 'qweweqewqqweweqwq'
194
+ }]
195
+ }, {
196
+ tag: 'c',
197
+ ind1: ' ',
198
+ ind2: ' ',
199
+ subfields: [{
200
+ code: 'a',
201
+ value: 'Fubar'
202
+ }]
203
+ }]);
204
+ });
205
+ });
206
+ });
28
207
  //# sourceMappingURL=sort-tags.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/sort-tags.spec.js"],"names":["describe","it","validator","to","be","an","that","has","any","keys","description","a","validate","record","MarcRecord","fields","tag","value","ind1","ind2","subfields","code","result","eql","valid","messages","fix"],"mappings":"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","file":"sort-tags.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'use strict';\n\nimport {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/sort-tags';\n\ndescribe('sort-tags', () => {\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: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttag: '001',\n\t\t\t\t\t\tvalue: '100'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttag: '008',\n\t\t\t\t\t\tvalue: 'bar'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttag: '100',\n\t\t\t\t\t\tind1: ' ',\n\t\t\t\t\t\tind2: ' ',\n\t\t\t\t\t\tsubfields: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tcode: 'a',\n\t\t\t\t\t\t\t\tvalue: 'Foo Bar'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttag: '245',\n\t\t\t\t\t\tind1: ' ',\n\t\t\t\t\t\tind2: ' ',\n\t\t\t\t\t\tsubfields: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tcode: 'a',\n\t\t\t\t\t\t\t\tvalue: 'Fubar'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t\t);\n\t\t\tconst result = await validator.validate(record);\n\n\t\t\texpect(result).to.eql({valid: true, messages: []});\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\t{\n\t\t\t\t\tfields: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttag: '008',\n\t\t\t\t\t\t\tvalue: 'bar'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttag: '001',\n\t\t\t\t\t\t\tvalue: '100'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttag: '245',\n\t\t\t\t\t\t\tind1: ' ',\n\t\t\t\t\t\t\tind2: ' ',\n\t\t\t\t\t\t\tsubfields: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tcode: 'a',\n\t\t\t\t\t\t\t\t\tvalue: 'Fubar'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttag: '100',\n\t\t\t\t\t\t\tind1: ' ',\n\t\t\t\t\t\t\tind2: ' ',\n\t\t\t\t\t\t\tsubfields: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tcode: 'a',\n\t\t\t\t\t\t\t\t\tvalue: 'Foo Bar'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t);\n\t\t\tconst result = await validator.validate(record);\n\t\t\texpect(result).to.eql({valid: false, messages: ['Fields are in incorrect order']});\n\t\t});\n\t});\n\n\tdescribe('#fix', () => {\n\t\tit('Sorts with exclusion', async () => {\n\t\t\tconst validator = await validatorFactory([/^5..$/, /^7..$/]);\n\t\t\tconst record = new MarcRecord(\n\t\t\t\t{\n\t\t\t\t\tfields: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttag: '001',\n\t\t\t\t\t\t\tvalue: '100'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttag: '530',\n\t\t\t\t\t\t\tvalue: 'bar'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttag: '30',\n\t\t\t\t\t\t\tvalue: 'bar'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttag: 'c',\n\t\t\t\t\t\t\tind1: ' ',\n\t\t\t\t\t\t\tind2: ' ',\n\t\t\t\t\t\t\tsubfields: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tcode: 'a',\n\t\t\t\t\t\t\t\t\tvalue: 'Fubar'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttag: '520',\n\t\t\t\t\t\t\tind1: ' ',\n\t\t\t\t\t\t\tind2: ' ',\n\t\t\t\t\t\t\tsubfields: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tcode: 'a',\n\t\t\t\t\t\t\t\t\tvalue: 'asdassdaasdsadsasad'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttag: 'a',\n\t\t\t\t\t\t\tind1: ' ',\n\t\t\t\t\t\t\tind2: ' ',\n\t\t\t\t\t\t\tsubfields: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tcode: 'a',\n\t\t\t\t\t\t\t\t\tvalue: 'qweweqewqqweweqwq'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttag: '700',\n\t\t\t\t\t\t\tind1: ' ',\n\t\t\t\t\t\t\tind2: ' ',\n\t\t\t\t\t\t\tsubfields: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tcode: 'a',\n\t\t\t\t\t\t\t\t\tvalue: 'Bar Foo'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttag: '711',\n\t\t\t\t\t\t\tind1: ' ',\n\t\t\t\t\t\t\tind2: ' ',\n\t\t\t\t\t\t\tsubfields: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tcode: 'a',\n\t\t\t\t\t\t\t\t\tvalue: 'Foo'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttag: '710',\n\t\t\t\t\t\t\tind1: ' ',\n\t\t\t\t\t\t\tind2: ' ',\n\t\t\t\t\t\t\tsubfields: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tcode: 'w',\n\t\t\t\t\t\t\t\t\tvalue: 'Bar'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t);\n\t\t\tawait validator.fix(record);\n\t\t\texpect(record.fields).to.eql([\n\t\t\t\t{\n\t\t\t\t\ttag: '001',\n\t\t\t\t\tvalue: '100'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttag: '30',\n\t\t\t\t\tvalue: 'bar'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttag: '530',\n\t\t\t\t\tvalue: 'bar'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttag: '520',\n\t\t\t\t\tind1: ' ',\n\t\t\t\t\tind2: ' ',\n\t\t\t\t\tsubfields: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcode: 'a',\n\t\t\t\t\t\t\tvalue: 'asdassdaasdsadsasad'\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\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: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcode: 'a',\n\t\t\t\t\t\t\tvalue: 'Bar Foo'\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttag: '711',\n\t\t\t\t\tind1: ' ',\n\t\t\t\t\tind2: ' ',\n\t\t\t\t\tsubfields: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcode: 'a',\n\t\t\t\t\t\t\tvalue: 'Foo'\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttag: '710',\n\t\t\t\t\tind1: ' ',\n\t\t\t\t\tind2: ' ',\n\t\t\t\t\tsubfields: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcode: 'w',\n\t\t\t\t\t\t\tvalue: 'Bar'\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttag: 'a',\n\t\t\t\t\tind1: ' ',\n\t\t\t\t\tind2: ' ',\n\t\t\t\t\tsubfields: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcode: 'a',\n\t\t\t\t\t\t\tvalue: 'qweweqewqqweweqwq'\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttag: 'c',\n\t\t\t\t\tind1: ' ',\n\t\t\t\t\tind2: ' ',\n\t\t\t\t\tsubfields: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcode: 'a',\n\t\t\t\t\t\t\tvalue: 'Fubar'\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]);\n\t\t});\n\t});\n});\n"]}
1
+ {"version":3,"file":"sort-tags.spec.js","names":["_chai","require","_marcRecord","_sortTags","_interopRequireDefault","obj","__esModule","default","describe","it","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","record","MarcRecord","fields","tag","value","ind1","ind2","subfields","code","result","eql","valid","messages","fix"],"sources":["../src/sort-tags.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/sort-tags';\n\ndescribe('sort-tags', () => {\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: [\n {\n tag: '001',\n value: '100'\n },\n {\n tag: '008',\n value: 'bar'\n },\n {\n tag: '100',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'Foo Bar'\n }\n ]\n },\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'Fubar'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true, messages: []});\n });\n it('Finds the record invalid', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '008',\n value: 'bar'\n },\n {\n tag: '001',\n value: '100'\n },\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'Fubar'\n }\n ]\n },\n {\n tag: '100',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'Foo Bar'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n expect(result).to.eql({valid: false, messages: ['Fields are in incorrect order']});\n });\n });\n\n describe('#fix', () => {\n it('Sorts with exclusion', async () => {\n const validator = await validatorFactory([/^5..$/u, /^7..$/u]);\n const record = new MarcRecord({\n fields: [\n {\n tag: '001',\n value: '100'\n },\n {\n tag: '530',\n value: 'bar'\n },\n {\n tag: '30',\n value: 'bar'\n },\n {\n tag: 'c',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'Fubar'\n }\n ]\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'asdassdaasdsadsasad'\n }\n ]\n },\n {\n tag: 'a',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'qweweqewqqweweqwq'\n }\n ]\n },\n {\n tag: '700',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'Bar Foo'\n }\n ]\n },\n {\n tag: '711',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'Foo'\n }\n ]\n },\n {\n tag: '710',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'w',\n value: 'Bar'\n }\n ]\n }\n ]\n });\n await validator.fix(record);\n expect(record.fields).to.eql([\n {\n tag: '001',\n value: '100'\n },\n {\n tag: '30',\n value: 'bar'\n },\n {\n tag: '530',\n value: 'bar'\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'asdassdaasdsadsasad'\n }\n ]\n },\n {\n tag: '700',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'Bar Foo'\n }\n ]\n },\n {\n tag: '711',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'Foo'\n }\n ]\n },\n {\n tag: '710',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'w',\n value: 'Bar'\n }\n ]\n },\n {\n tag: 'a',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'qweweqewqqweweqwq'\n }\n ]\n },\n {\n tag: 'c',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'Fubar'\n }\n ]\n }\n ]);\n });\n });\n});\n"],"mappings":"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"}
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = _default;
7
+ exports.sortAdjacentESubfields = sortAdjacentESubfields;
8
+ var _clone = _interopRequireDefault(require("clone"));
9
+ var _utils = require("./utils");
10
+ var _punctuation = require("./punctuation2");
11
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+ // Validator/fixer for sorting $e relator term subfields
13
+ //
14
+ // Author(s): Nicholas Volk
15
+
16
+ //import createDebugLogger from 'debug';
17
+
18
+ //const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:sortRelatorTerms');
19
+ //const debugData = debug.extend('data');
20
+ const WORST_WORK = 98;
21
+ const relatorTermValues = {
22
+ // The higher, the better
23
+ // More abstract, the earlier it appears.
24
+ // Note that terms with same abstraction level might also have order preferences
25
+ // work/teos > expression/ekspressio > manifestation/manifestaatio
26
+ 'säveltäjä': 100,
27
+ 'kirjoittaja': 99,
28
+ // Viola wants composer/säveltäjä on top (highly unlikely to ever appear together, but...)
29
+ 'taiteilija': 98,
30
+ 'sanoittaja': 90,
31
+ // ekspressio
32
+ 'sovittaja': 80,
33
+ 'toimittaja': 80,
34
+ 'kuvittaja': 75,
35
+ 'editointi': 71,
36
+ 'kääntäjä': 70,
37
+ 'lukija': 61,
38
+ // manifestaatio
39
+ 'esittäjä': 60,
40
+ 'johtaja': 50,
41
+ 'kustantaja': 41,
42
+ 'julkaisija': 40
43
+ };
44
+ function scoreRelatorTerm(term) {
45
+ const normalizedTerm = normalizeValue(term);
46
+ if (normalizedTerm in relatorTermValues) {
47
+ return relatorTermValues[normalizedTerm];
48
+ }
49
+ return 0;
50
+ }
51
+ function _default() {
52
+ return {
53
+ description: 'Sort adjacent $e subfields in field [1678][01]0',
54
+ validate,
55
+ fix
56
+ };
57
+ function fix(record) {
58
+ const res = {
59
+ message: [],
60
+ fix: [],
61
+ valid: true
62
+ };
63
+ record.fields.forEach(field => {
64
+ sortAdjacentESubfields(field);
65
+ });
66
+ return res;
67
+ }
68
+ function validate(record) {
69
+ const res = {
70
+ message: []
71
+ };
72
+ record.fields.forEach(field => {
73
+ const clonedField = (0, _clone.default)(field);
74
+ sortAdjacentESubfields(clonedField);
75
+ const clonedFieldAsString = (0, _utils.fieldToString)(clonedField);
76
+ const fieldAsString = (0, _utils.fieldToString)(field);
77
+ if (fieldAsString !== clonedFieldAsString) {
78
+ // eslint-disable-line functional/no-conditional-statements
79
+ res.message.push(`${fieldAsString} => ${clonedFieldAsString}`); // eslint-disable-line functional/immutable-data
80
+ }
81
+ });
82
+
83
+ res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data
84
+ return res;
85
+ }
86
+ }
87
+ function normalizeValue(value) {
88
+ // Removing last punc char is good enough for our purposes.
89
+ // We don't handle abbreviations here etc.
90
+ // Brackets should not happen either, should they?
91
+ return value.replace(/[.,]$/u, '');
92
+ }
93
+ function swapESubfields(field) {
94
+ if (!field.subfields) {
95
+ return;
96
+ }
97
+ const loopAgain = field.subfields.some((sf, index) => {
98
+ if (index === 0 || sf.code !== 'e') {
99
+ return false;
100
+ }
101
+ const currScore = scoreRelatorTerm(sf.value);
102
+ const prevSubfield = field.subfields[index - 1];
103
+ if (currScore === 0 || prevSubfield.code !== 'e') {
104
+ return false;
105
+ }
106
+ const prevScore = scoreRelatorTerm(prevSubfield.value);
107
+
108
+ // If this subfield maps to a Work, then subfields can be swapped, even if we don't have a score for the prev subfield!
109
+ if (prevScore === 0 && currScore < WORST_WORK) {
110
+ return false;
111
+ }
112
+ if (currScore > prevScore) {
113
+ // Swap:
114
+ const tmp = field.subfields[index - 1];
115
+ field.subfields[index - 1] = sf; // eslint-disable-line functional/immutable-data
116
+ field.subfields[index] = tmp; // eslint-disable-line functional/immutable-data
117
+ (0, _punctuation.fieldFixPunctuation)(field);
118
+ return true;
119
+ }
120
+ return false;
121
+ });
122
+ if (loopAgain) {
123
+ swapESubfields(field); // uh, evil recursion...
124
+ return;
125
+ }
126
+ return;
127
+ }
128
+ function sortAdjacentESubfields(field) {
129
+ if (!field.subfields) {
130
+ return field;
131
+ }
132
+ swapESubfields(field);
133
+ return field;
134
+ }
135
+ //# sourceMappingURL=sortRelatorTerms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sortRelatorTerms.js","names":["_clone","_interopRequireDefault","require","_utils","_punctuation","obj","__esModule","default","WORST_WORK","relatorTermValues","scoreRelatorTerm","term","normalizedTerm","normalizeValue","_default","description","validate","fix","record","res","message","valid","fields","forEach","field","sortAdjacentESubfields","clonedField","clone","clonedFieldAsString","fieldToString","fieldAsString","push","length","value","replace","swapESubfields","subfields","loopAgain","some","sf","index","code","currScore","prevSubfield","prevScore","tmp","fieldFixPunctuation"],"sources":["../src/sortRelatorTerms.js"],"sourcesContent":["// Validator/fixer for sorting $e relator term subfields\n//\n// Author(s): Nicholas Volk\n\nimport clone from 'clone';\n//import createDebugLogger from 'debug';\nimport {fieldToString} from './utils';\nimport {fieldFixPunctuation} from './punctuation2';\n//const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:sortRelatorTerms');\n//const debugData = debug.extend('data');\n\nconst WORST_WORK = 98;\n\nconst relatorTermValues = { // The higher, the better\n // More abstract, the earlier it appears.\n // Note that terms with same abstraction level might also have order preferences\n // work/teos > expression/ekspressio > manifestation/manifestaatio\n 'säveltäjä': 100,\n 'kirjoittaja': 99, // Viola wants composer/säveltäjä on top (highly unlikely to ever appear together, but...)\n 'taiteilija': 98,\n 'sanoittaja': 90,\n // ekspressio\n 'sovittaja': 80,\n 'toimittaja': 80,\n 'kuvittaja': 75,\n 'editointi': 71,\n 'kääntäjä': 70,\n 'lukija': 61,\n // manifestaatio\n 'esittäjä': 60,\n 'johtaja': 50,\n 'kustantaja': 41,\n 'julkaisija': 40\n\n};\n\nfunction scoreRelatorTerm(term) {\n const normalizedTerm = normalizeValue(term);\n if (normalizedTerm in relatorTermValues) {\n return relatorTermValues[normalizedTerm];\n }\n return 0;\n}\n\nexport default function () {\n\n return {\n description: 'Sort adjacent $e subfields in field [1678][01]0',\n validate, fix\n };\n\n function fix(record) {\n const res = {message: [], fix: [], valid: true};\n\n record.fields.forEach(field => {\n sortAdjacentESubfields(field);\n });\n\n return res;\n }\n\n function validate(record) {\n const res = {message: []};\n\n record.fields.forEach(field => {\n const clonedField = clone(field);\n sortAdjacentESubfields(clonedField);\n const clonedFieldAsString = fieldToString(clonedField);\n const fieldAsString = fieldToString(field);\n if (fieldAsString !== clonedFieldAsString) { // eslint-disable-line functional/no-conditional-statements\n res.message.push(`${fieldAsString} => ${clonedFieldAsString}`); // eslint-disable-line functional/immutable-data\n }\n });\n\n res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data\n return res;\n }\n}\n\n\nfunction normalizeValue(value) {\n // Removing last punc char is good enough for our purposes.\n // We don't handle abbreviations here etc.\n // Brackets should not happen either, should they?\n return value.replace(/[.,]$/u, '');\n}\n\n\nfunction swapESubfields(field) {\n if (!field.subfields) {\n return;\n }\n\n const loopAgain = field.subfields.some((sf, index) => {\n if (index === 0 || sf.code !== 'e') {\n return false;\n }\n const currScore = scoreRelatorTerm(sf.value);\n\n const prevSubfield = field.subfields[index - 1];\n if (currScore === 0 || prevSubfield.code !== 'e') {\n return false;\n }\n const prevScore = scoreRelatorTerm(prevSubfield.value);\n\n\n // If this subfield maps to a Work, then subfields can be swapped, even if we don't have a score for the prev subfield!\n if (prevScore === 0 && currScore < WORST_WORK) {\n return false;\n }\n\n if (currScore > prevScore) {\n // Swap:\n const tmp = field.subfields[index - 1];\n field.subfields[index - 1] = sf; // eslint-disable-line functional/immutable-data\n field.subfields[index] = tmp; // eslint-disable-line functional/immutable-data\n fieldFixPunctuation(field);\n return true;\n }\n\n return false;\n\n });\n\n if (loopAgain) {\n swapESubfields(field); // uh, evil recursion...\n return;\n }\n\n return;\n\n}\n\nexport function sortAdjacentESubfields(field) {\n if (!field.subfields) {\n return field;\n }\n swapESubfields(field);\n\n return field;\n}\n\n"],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+
3
+ var _chai = require("chai");
4
+ var _marcRecord = require("@natlibfi/marc-record");
5
+ var _sortRelatorTerms = _interopRequireDefault(require("./sortRelatorTerms"));
6
+ var _fixura = require("@natlibfi/fixura");
7
+ var _fixugen = _interopRequireDefault(require("@natlibfi/fixugen"));
8
+ var _debug = _interopRequireDefault(require("debug"));
9
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ (0, _fixugen.default)({
11
+ callback,
12
+ path: [__dirname, '..', 'test-fixtures', 'sort-relator-terms'],
13
+ useMetadataFile: true,
14
+ recurse: false,
15
+ fixura: {
16
+ reader: _fixura.READERS.JSON
17
+ },
18
+ mocha: {
19
+ before: () => testValidatorFactory()
20
+ }
21
+ });
22
+ const debug = (0, _debug.default)('@natlibfi/marc-record-validators-melinda/sortRelatorTerms:test');
23
+ async function testValidatorFactory() {
24
+ const validator = await (0, _sortRelatorTerms.default)();
25
+ (0, _chai.expect)(validator).to.be.an('object').that.has.any.keys('description', 'validate');
26
+ (0, _chai.expect)(validator.description).to.be.a('string');
27
+ (0, _chai.expect)(validator.validate).to.be.a('function');
28
+ }
29
+ async function callback({
30
+ getFixture,
31
+ enabled = true,
32
+ fix = false
33
+ }) {
34
+ if (enabled === false) {
35
+ debug('TEST SKIPPED!');
36
+ return;
37
+ }
38
+ const validator = await (0, _sortRelatorTerms.default)();
39
+ const record = new _marcRecord.MarcRecord(getFixture('record.json'));
40
+ const expectedResult = getFixture('expectedResult.json');
41
+ // console.log(expectedResult); // eslint-disable-line
42
+
43
+ if (!fix) {
44
+ const result = await validator.validate(record);
45
+ (0, _chai.expect)(result).to.eql(expectedResult);
46
+ return;
47
+ }
48
+ await validator.fix(record);
49
+ (0, _chai.expect)(record).to.eql(expectedResult);
50
+ }
51
+ //# sourceMappingURL=sortRelatorTerms.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sortRelatorTerms.spec.js","names":["_chai","require","_marcRecord","_sortRelatorTerms","_interopRequireDefault","_fixura","_fixugen","_debug","obj","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","debug","createDebugLogger","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","getFixture","enabled","fix","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/sortRelatorTerms.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './sortRelatorTerms';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\nimport createDebugLogger from 'debug';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'sort-relator-terms'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/sortRelatorTerms:test');\n\nasync function testValidatorFactory() {\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\nasync function callback({getFixture, enabled = true, fix = false}) {\n if (enabled === false) {\n debug('TEST SKIPPED!');\n return;\n }\n\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,iBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AACA,IAAAM,MAAA,GAAAH,sBAAA,CAAAH,OAAA;AAAsC,SAAAG,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEtC,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,oBAAoB,CAAC;EAC9DC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AACF,MAAMC,KAAK,GAAG,IAAAC,cAAiB,EAAC,gEAAgE,CAAC;AAEjG,eAAeF,oBAAoBA,CAAA,EAAG;EACpC,MAAMG,SAAS,GAAG,MAAM,IAAAC,yBAAgB,EAAC,CAAC;EAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAChD;AAEA,eAAezB,QAAQA,CAAC;EAAC2B,UAAU;EAAEC,OAAO,GAAG,IAAI;EAAEC,GAAG,GAAG;AAAK,CAAC,EAAE;EACjE,IAAID,OAAO,KAAK,KAAK,EAAE;IACrBhB,KAAK,CAAC,eAAe,CAAC;IACtB;EACF;EAEA,MAAME,SAAS,GAAG,MAAM,IAAAC,yBAAgB,EAAC,CAAC;EAC1C,MAAMe,MAAM,GAAG,IAAIC,sBAAU,CAACJ,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMK,cAAc,GAAGL,UAAU,CAAC,qBAAqB,CAAC;EACxD;;EAEA,IAAI,CAACE,GAAG,EAAE;IACR,MAAMI,MAAM,GAAG,MAAMnB,SAAS,CAACY,QAAQ,CAACI,MAAM,CAAC;IAC/C,IAAAd,YAAM,EAACiB,MAAM,CAAC,CAAChB,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMlB,SAAS,CAACe,GAAG,CAACC,MAAM,CAAC;EAC3B,IAAAd,YAAM,EAACc,MAAM,CAAC,CAACb,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;AACvC"}