@natlibfi/marc-record-validators-melinda 11.0.0-alpha.1 → 11.1.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (309) hide show
  1. package/dist/addMissingField336.js +272 -0
  2. package/dist/addMissingField336.js.map +1 -0
  3. package/dist/addMissingField336.spec.js +45 -0
  4. package/dist/addMissingField336.spec.js.map +1 -0
  5. package/dist/addMissingField337.js +177 -0
  6. package/dist/addMissingField337.js.map +1 -0
  7. package/dist/addMissingField337.spec.js +43 -0
  8. package/dist/addMissingField337.spec.js.map +1 -0
  9. package/dist/addMissingField338.js +424 -0
  10. package/dist/addMissingField338.js.map +1 -0
  11. package/dist/addMissingField338.spec.js +45 -0
  12. package/dist/addMissingField338.spec.js.map +1 -0
  13. package/dist/cyrillux-usemarcon-replacement.js +370 -0
  14. package/dist/cyrillux-usemarcon-replacement.js.map +1 -0
  15. package/dist/cyrillux-usemarcon-replacement.spec.js +45 -0
  16. package/dist/cyrillux-usemarcon-replacement.spec.js.map +1 -0
  17. package/dist/field33XUtils.js +529 -0
  18. package/dist/field33XUtils.js.map +1 -0
  19. package/dist/fix-33X.js +484 -0
  20. package/dist/fix-33X.js.map +1 -0
  21. package/dist/fix-33X.spec.js +45 -0
  22. package/dist/fix-33X.spec.js.map +1 -0
  23. package/dist/fix-language-codes.js +109 -0
  24. package/dist/fix-language-codes.js.map +1 -0
  25. package/dist/fix-language-codes.spec.js +44 -0
  26. package/dist/fix-language-codes.spec.js.map +1 -0
  27. package/dist/fixRelatorTerms.js +1 -1
  28. package/dist/fixRelatorTerms.js.map +1 -1
  29. package/dist/punctuation2.js +4 -3
  30. package/dist/punctuation2.js.map +1 -1
  31. package/dist/resolvable-ext-references-melinda.spec.js +1 -1
  32. package/dist/resolvable-ext-references-melinda.spec.js.map +1 -1
  33. package/dist/sanitize-vocabulary-source-codes.js +7 -10
  34. package/dist/sanitize-vocabulary-source-codes.js.map +1 -1
  35. package/dist/utils.js +13 -8
  36. package/dist/utils.js.map +1 -1
  37. package/package.json +7 -7
  38. package/src/addMissingField336.js +260 -0
  39. package/src/addMissingField336.spec.js +46 -0
  40. package/src/addMissingField337.js +132 -0
  41. package/src/addMissingField337.spec.js +45 -0
  42. package/src/addMissingField338.js +446 -0
  43. package/src/addMissingField338.spec.js +46 -0
  44. package/src/cyrillux-usemarcon-replacement.js +410 -0
  45. package/src/cyrillux-usemarcon-replacement.spec.js +47 -0
  46. package/src/field33XUtils.js +156 -0
  47. package/src/fix-33X.js +473 -0
  48. package/src/fix-33X.spec.js +46 -0
  49. package/src/fix-language-codes.js +121 -0
  50. package/src/fix-language-codes.spec.js +45 -0
  51. package/src/fixRelatorTerms.js +1 -1
  52. package/src/punctuation2.js +3 -3
  53. package/src/sanitize-vocabulary-source-codes.js +9 -11
  54. package/src/utils.js +13 -8
  55. package/test-fixtures/addMissingField336/01/expectedResult.json +6 -0
  56. package/test-fixtures/addMissingField336/01/metadata.json +7 -0
  57. package/test-fixtures/addMissingField336/01/record.json +8 -0
  58. package/test-fixtures/addMissingField336/02/expectedResult.json +4 -0
  59. package/test-fixtures/addMissingField336/02/metadata.json +7 -0
  60. package/test-fixtures/addMissingField336/02/record.json +13 -0
  61. package/test-fixtures/addMissingField336/cod/expectedResult.json +12 -0
  62. package/test-fixtures/addMissingField336/cod/metadata.json +6 -0
  63. package/test-fixtures/addMissingField336/cod/record.json +6 -0
  64. package/test-fixtures/addMissingField336/cop/expectedResult.json +12 -0
  65. package/test-fixtures/addMissingField336/cop/metadata.json +6 -0
  66. package/test-fixtures/addMissingField336/cop/record.json +6 -0
  67. package/test-fixtures/addMissingField336/cop2/expectedResult.json +13 -0
  68. package/test-fixtures/addMissingField336/cop2/metadata.json +6 -0
  69. package/test-fixtures/addMissingField336/cop2/record.json +7 -0
  70. package/test-fixtures/addMissingField336/crf/expectedResult.json +12 -0
  71. package/test-fixtures/addMissingField336/crf/metadata.json +6 -0
  72. package/test-fixtures/addMissingField336/crf/record.json +6 -0
  73. package/test-fixtures/addMissingField336/cri/expectedResult.json +12 -0
  74. package/test-fixtures/addMissingField336/cri/metadata.json +6 -0
  75. package/test-fixtures/addMissingField336/cri/record.json +6 -0
  76. package/test-fixtures/addMissingField336/crt/expectedResult.json +13 -0
  77. package/test-fixtures/addMissingField336/crt/metadata.json +6 -0
  78. package/test-fixtures/addMissingField336/crt/record.json +7 -0
  79. package/test-fixtures/addMissingField336/f01/expectedResult.json +17 -0
  80. package/test-fixtures/addMissingField336/f01/metadata.json +6 -0
  81. package/test-fixtures/addMissingField336/f01/record.json +11 -0
  82. package/test-fixtures/addMissingField336/f02/expectedResult.json +15 -0
  83. package/test-fixtures/addMissingField336/f02/metadata.json +6 -0
  84. package/test-fixtures/addMissingField336/f02/record.json +9 -0
  85. package/test-fixtures/addMissingField336/mixed2txt/expectedResult.json +12 -0
  86. package/test-fixtures/addMissingField336/mixed2txt/metadata.json +6 -0
  87. package/test-fixtures/addMissingField336/mixed2txt/record.json +6 -0
  88. package/test-fixtures/addMissingField336/mixed2xxx/expectedResult.json +12 -0
  89. package/test-fixtures/addMissingField336/mixed2xxx/metadata.json +6 -0
  90. package/test-fixtures/addMissingField336/mixed2xxx/record.json +6 -0
  91. package/test-fixtures/addMissingField336/ntm/expectedResult.json +12 -0
  92. package/test-fixtures/addMissingField336/ntm/metadata.json +6 -0
  93. package/test-fixtures/addMissingField336/ntm/record.json +6 -0
  94. package/test-fixtures/addMissingField336/snd/expectedResult.json +12 -0
  95. package/test-fixtures/addMissingField336/snd/metadata.json +6 -0
  96. package/test-fixtures/addMissingField336/snd/record.json +6 -0
  97. package/test-fixtures/addMissingField336/spw/expectedResult.json +12 -0
  98. package/test-fixtures/addMissingField336/spw/metadata.json +6 -0
  99. package/test-fixtures/addMissingField336/spw/record.json +6 -0
  100. package/test-fixtures/addMissingField336/spw2/expectedResult.json +13 -0
  101. package/test-fixtures/addMissingField336/spw2/metadata.json +6 -0
  102. package/test-fixtures/addMissingField336/spw2/record.json +7 -0
  103. package/test-fixtures/addMissingField336/spw_txt/expectedResult.json +18 -0
  104. package/test-fixtures/addMissingField336/spw_txt/metadata.json +6 -0
  105. package/test-fixtures/addMissingField336/spw_txt/record.json +7 -0
  106. package/test-fixtures/addMissingField336/sti/expectedResult.json +12 -0
  107. package/test-fixtures/addMissingField336/sti/metadata.json +6 -0
  108. package/test-fixtures/addMissingField336/sti/record.json +6 -0
  109. package/test-fixtures/addMissingField336/sti_projected/expectedResult.json +13 -0
  110. package/test-fixtures/addMissingField336/sti_projected/metadata.json +6 -0
  111. package/test-fixtures/addMissingField336/sti_projected/record.json +7 -0
  112. package/test-fixtures/addMissingField336/tci/expectedResult.json +12 -0
  113. package/test-fixtures/addMissingField336/tci/metadata.json +6 -0
  114. package/test-fixtures/addMissingField336/tci/record.json +6 -0
  115. package/test-fixtures/addMissingField336/tcm/expectedResult.json +12 -0
  116. package/test-fixtures/addMissingField336/tcm/metadata.json +6 -0
  117. package/test-fixtures/addMissingField336/tcm/record.json +6 -0
  118. package/test-fixtures/addMissingField336/tdf/expectedResult.json +12 -0
  119. package/test-fixtures/addMissingField336/tdf/metadata.json +6 -0
  120. package/test-fixtures/addMissingField336/tdf/record.json +6 -0
  121. package/test-fixtures/addMissingField336/tdi/expectedResult.json +13 -0
  122. package/test-fixtures/addMissingField336/tdi/metadata.json +6 -0
  123. package/test-fixtures/addMissingField336/tdi/record.json +7 -0
  124. package/test-fixtures/addMissingField336/txt/expectedResult.json +12 -0
  125. package/test-fixtures/addMissingField336/txt/metadata.json +6 -0
  126. package/test-fixtures/addMissingField336/txt/record.json +6 -0
  127. package/test-fixtures/addMissingField336/zzz/expectedResult.json +13 -0
  128. package/test-fixtures/addMissingField336/zzz/metadata.json +6 -0
  129. package/test-fixtures/addMissingField336/zzz/record.json +7 -0
  130. package/test-fixtures/addMissingField337/c1/expectedResult.json +12 -0
  131. package/test-fixtures/addMissingField337/c1/metadata.json +6 -0
  132. package/test-fixtures/addMissingField337/c1/record.json +7 -0
  133. package/test-fixtures/addMissingField337/g1/expectedResult.json +13 -0
  134. package/test-fixtures/addMissingField337/g1/metadata.json +6 -0
  135. package/test-fixtures/addMissingField337/g1/record.json +7 -0
  136. package/test-fixtures/addMissingField337/n1/expectedResult.json +12 -0
  137. package/test-fixtures/addMissingField337/n1/metadata.json +6 -0
  138. package/test-fixtures/addMissingField337/n1/record.json +6 -0
  139. package/test-fixtures/addMissingField337/no_action_required/expectedResult.json +12 -0
  140. package/test-fixtures/addMissingField337/no_action_required/metadata.json +7 -0
  141. package/test-fixtures/addMissingField337/no_action_required/record.json +11 -0
  142. package/test-fixtures/addMissingField337/p1/expectedResult.json +12 -0
  143. package/test-fixtures/addMissingField337/p1/metadata.json +6 -0
  144. package/test-fixtures/addMissingField337/p1/record.json +6 -0
  145. package/test-fixtures/addMissingField337/validate_x1/expectedResult.json +6 -0
  146. package/test-fixtures/addMissingField337/validate_x1/metadata.json +6 -0
  147. package/test-fixtures/addMissingField337/validate_x1/record.json +6 -0
  148. package/test-fixtures/addMissingField338/cb/expectedResult.json +14 -0
  149. package/test-fixtures/addMissingField338/cb/metadata.json +6 -0
  150. package/test-fixtures/addMissingField338/cb/record.json +8 -0
  151. package/test-fixtures/addMissingField338/cd/expectedResult.json +14 -0
  152. package/test-fixtures/addMissingField338/cd/metadata.json +6 -0
  153. package/test-fixtures/addMissingField338/cd/record.json +8 -0
  154. package/test-fixtures/addMissingField338/ck/expectedResult.json +14 -0
  155. package/test-fixtures/addMissingField338/ck/metadata.json +6 -0
  156. package/test-fixtures/addMissingField338/ck/record.json +8 -0
  157. package/test-fixtures/addMissingField338/cr/expectedResult.json +15 -0
  158. package/test-fixtures/addMissingField338/cr/metadata.json +6 -0
  159. package/test-fixtures/addMissingField338/cr/record.json +9 -0
  160. package/test-fixtures/addMissingField338/cr2/expectedResult.json +14 -0
  161. package/test-fixtures/addMissingField338/cr2/metadata.json +6 -0
  162. package/test-fixtures/addMissingField338/cr2/record.json +8 -0
  163. package/test-fixtures/addMissingField338/cr3/expectedResult.json +18 -0
  164. package/test-fixtures/addMissingField338/cr3/metadata.json +6 -0
  165. package/test-fixtures/addMissingField338/cr3/record.json +12 -0
  166. package/test-fixtures/addMissingField338/cr4/expectedResult.json +15 -0
  167. package/test-fixtures/addMissingField338/cr4/metadata.json +6 -0
  168. package/test-fixtures/addMissingField338/cr4/record.json +9 -0
  169. package/test-fixtures/addMissingField338/gc/expectedResult.json +12 -0
  170. package/test-fixtures/addMissingField338/gc/metadata.json +6 -0
  171. package/test-fixtures/addMissingField338/gc/record.json +7 -0
  172. package/test-fixtures/addMissingField338/gd/expectedResult.json +13 -0
  173. package/test-fixtures/addMissingField338/gd/metadata.json +6 -0
  174. package/test-fixtures/addMissingField338/gd/record.json +8 -0
  175. package/test-fixtures/addMissingField338/gf/expectedResult.json +13 -0
  176. package/test-fixtures/addMissingField338/gf/metadata.json +6 -0
  177. package/test-fixtures/addMissingField338/gf/record.json +8 -0
  178. package/test-fixtures/addMissingField338/gs/expectedResult.json +15 -0
  179. package/test-fixtures/addMissingField338/gs/metadata.json +6 -0
  180. package/test-fixtures/addMissingField338/gs/record.json +9 -0
  181. package/test-fixtures/addMissingField338/gt/expectedResult.json +15 -0
  182. package/test-fixtures/addMissingField338/gt/metadata.json +6 -0
  183. package/test-fixtures/addMissingField338/gt/record.json +9 -0
  184. package/test-fixtures/addMissingField338/hd/expectedResult.json +16 -0
  185. package/test-fixtures/addMissingField338/hd/metadata.json +6 -0
  186. package/test-fixtures/addMissingField338/hd/record.json +10 -0
  187. package/test-fixtures/addMissingField338/he/expectedResult.json +15 -0
  188. package/test-fixtures/addMissingField338/he/metadata.json +6 -0
  189. package/test-fixtures/addMissingField338/he/record.json +9 -0
  190. package/test-fixtures/addMissingField338/he2/expectedResult.json +12 -0
  191. package/test-fixtures/addMissingField338/he2/metadata.json +6 -0
  192. package/test-fixtures/addMissingField338/he2/record.json +6 -0
  193. package/test-fixtures/addMissingField338/hg/expectedResult.json +15 -0
  194. package/test-fixtures/addMissingField338/hg/metadata.json +7 -0
  195. package/test-fixtures/addMissingField338/hg/record.json +9 -0
  196. package/test-fixtures/addMissingField338/hg2/expectedResult.json +15 -0
  197. package/test-fixtures/addMissingField338/hg2/metadata.json +6 -0
  198. package/test-fixtures/addMissingField338/hg2/record.json +9 -0
  199. package/test-fixtures/addMissingField338/hj/expectedResult.json +15 -0
  200. package/test-fixtures/addMissingField338/hj/metadata.json +6 -0
  201. package/test-fixtures/addMissingField338/hj/record.json +9 -0
  202. package/test-fixtures/addMissingField338/hj2/expectedResult.json +15 -0
  203. package/test-fixtures/addMissingField338/hj2/metadata.json +6 -0
  204. package/test-fixtures/addMissingField338/hj2/record.json +9 -0
  205. package/test-fixtures/addMissingField338/mo/expectedResult.json +15 -0
  206. package/test-fixtures/addMissingField338/mo/metadata.json +6 -0
  207. package/test-fixtures/addMissingField338/mo/record.json +9 -0
  208. package/test-fixtures/addMissingField338/nc/expectedResult.json +19 -0
  209. package/test-fixtures/addMissingField338/nc/metadata.json +6 -0
  210. package/test-fixtures/addMissingField338/nc/record.json +13 -0
  211. package/test-fixtures/addMissingField338/nr/expectedResult.json +12 -0
  212. package/test-fixtures/addMissingField338/nr/metadata.json +7 -0
  213. package/test-fixtures/addMissingField338/nr/record.json +6 -0
  214. package/test-fixtures/addMissingField338/sd/expectedResult.json +14 -0
  215. package/test-fixtures/addMissingField338/sd/metadata.json +6 -0
  216. package/test-fixtures/addMissingField338/sd/record.json +8 -0
  217. package/test-fixtures/addMissingField338/sd2/expectedResult.json +14 -0
  218. package/test-fixtures/addMissingField338/sd2/metadata.json +6 -0
  219. package/test-fixtures/addMissingField338/sd2/record.json +8 -0
  220. package/test-fixtures/addMissingField338/sd3/expectedResult.json +14 -0
  221. package/test-fixtures/addMissingField338/sd3/metadata.json +6 -0
  222. package/test-fixtures/addMissingField338/sd3/record.json +8 -0
  223. package/test-fixtures/addMissingField338/ss/expectedResult.json +14 -0
  224. package/test-fixtures/addMissingField338/ss/metadata.json +6 -0
  225. package/test-fixtures/addMissingField338/ss/record.json +8 -0
  226. package/test-fixtures/addMissingField338/ss2/expectedResult.json +14 -0
  227. package/test-fixtures/addMissingField338/ss2/metadata.json +6 -0
  228. package/test-fixtures/addMissingField338/ss2/record.json +8 -0
  229. package/test-fixtures/addMissingField338/vd/expectedResult.json +15 -0
  230. package/test-fixtures/addMissingField338/vd/metadata.json +6 -0
  231. package/test-fixtures/addMissingField338/vd/record.json +9 -0
  232. package/test-fixtures/addMissingField338/vd2/expectedResult.json +13 -0
  233. package/test-fixtures/addMissingField338/vd2/metadata.json +6 -0
  234. package/test-fixtures/addMissingField338/vd2/record.json +8 -0
  235. package/test-fixtures/addMissingField338/vf/expectedResult.json +15 -0
  236. package/test-fixtures/addMissingField338/vf/metadata.json +6 -0
  237. package/test-fixtures/addMissingField338/vf/record.json +9 -0
  238. package/test-fixtures/addMissingField338/zu/expectedResult.json +14 -0
  239. package/test-fixtures/addMissingField338/zu/metadata.json +6 -0
  240. package/test-fixtures/addMissingField338/zu/record.json +8 -0
  241. package/test-fixtures/cyrillux-usemarcon-replacement/f01/expectedResult.json +32 -0
  242. package/test-fixtures/cyrillux-usemarcon-replacement/f01/metadata.json +7 -0
  243. package/test-fixtures/cyrillux-usemarcon-replacement/f01/record.json +20 -0
  244. package/test-fixtures/cyrillux-usemarcon-replacement/f02/expectedResult.json +29 -0
  245. package/test-fixtures/cyrillux-usemarcon-replacement/f02/metadata.json +7 -0
  246. package/test-fixtures/cyrillux-usemarcon-replacement/f02/record.json +9 -0
  247. package/test-fixtures/cyrillux-usemarcon-replacement/f03/expectedResult.json +34 -0
  248. package/test-fixtures/cyrillux-usemarcon-replacement/f03/metadata.json +7 -0
  249. package/test-fixtures/cyrillux-usemarcon-replacement/f03/record.json +12 -0
  250. package/test-fixtures/cyrillux-usemarcon-replacement/f04/expectedResult.json +26 -0
  251. package/test-fixtures/cyrillux-usemarcon-replacement/f04/metadata.json +8 -0
  252. package/test-fixtures/cyrillux-usemarcon-replacement/f04/record.json +6 -0
  253. package/test-fixtures/cyrillux-usemarcon-replacement/f05/expectedResult.json +27 -0
  254. package/test-fixtures/cyrillux-usemarcon-replacement/f05/metadata.json +7 -0
  255. package/test-fixtures/cyrillux-usemarcon-replacement/f05/record.json +8 -0
  256. package/test-fixtures/cyrillux-usemarcon-replacement/f06/expectedResult.json +27 -0
  257. package/test-fixtures/cyrillux-usemarcon-replacement/f06/metadata.json +7 -0
  258. package/test-fixtures/cyrillux-usemarcon-replacement/f06/record.json +8 -0
  259. package/test-fixtures/cyrillux-usemarcon-replacement/f07/expectedResult.json +25 -0
  260. package/test-fixtures/cyrillux-usemarcon-replacement/f07/metadata.json +7 -0
  261. package/test-fixtures/cyrillux-usemarcon-replacement/f07/record.json +8 -0
  262. package/test-fixtures/cyrillux-usemarcon-replacement/f08/expectedResult.json +34 -0
  263. package/test-fixtures/cyrillux-usemarcon-replacement/f08/metadata.json +6 -0
  264. package/test-fixtures/cyrillux-usemarcon-replacement/f08/record.json +33 -0
  265. package/test-fixtures/cyrillux-usemarcon-replacement/f09/expectedResult.json +35 -0
  266. package/test-fixtures/cyrillux-usemarcon-replacement/f09/metadata.json +6 -0
  267. package/test-fixtures/cyrillux-usemarcon-replacement/f09/record.json +35 -0
  268. package/test-fixtures/cyrillux-usemarcon-replacement/f10/expectedResult.json +41 -0
  269. package/test-fixtures/cyrillux-usemarcon-replacement/f10/metadata.json +7 -0
  270. package/test-fixtures/cyrillux-usemarcon-replacement/f10/record.json +33 -0
  271. package/test-fixtures/cyrillux-usemarcon-replacement/f11/expectedResult.json +32 -0
  272. package/test-fixtures/cyrillux-usemarcon-replacement/f11/metadata.json +6 -0
  273. package/test-fixtures/cyrillux-usemarcon-replacement/f11/record.json +22 -0
  274. package/test-fixtures/cyrillux-usemarcon-replacement/v01/expectedResult.json +7 -0
  275. package/test-fixtures/cyrillux-usemarcon-replacement/v01/metadata.json +6 -0
  276. package/test-fixtures/cyrillux-usemarcon-replacement/v01/record.json +20 -0
  277. package/test-fixtures/cyrillux-usemarcon-replacement/v02/expectedResult.json +5 -0
  278. package/test-fixtures/cyrillux-usemarcon-replacement/v02/metadata.json +6 -0
  279. package/test-fixtures/cyrillux-usemarcon-replacement/v02/record.json +29 -0
  280. package/test-fixtures/fix-33X/f11/expectedResult.json +29 -0
  281. package/test-fixtures/fix-33X/f11/metadata.json +6 -0
  282. package/test-fixtures/fix-33X/f11/record.json +22 -0
  283. package/test-fixtures/fix-33X/v11/expectedResult.json +9 -0
  284. package/test-fixtures/fix-33X/v11/metadata.json +6 -0
  285. package/test-fixtures/fix-33X/v11/record.json +22 -0
  286. package/test-fixtures/fix-language-codes/01/expectedResult.json +5 -0
  287. package/test-fixtures/fix-language-codes/01/metadata.json +6 -0
  288. package/test-fixtures/fix-language-codes/01/record.json +7 -0
  289. package/test-fixtures/fix-language-codes/02/expectedResult.json +7 -0
  290. package/test-fixtures/fix-language-codes/02/metadata.json +6 -0
  291. package/test-fixtures/fix-language-codes/02/record.json +10 -0
  292. package/test-fixtures/fix-language-codes/03/expectedResult.json +10 -0
  293. package/test-fixtures/fix-language-codes/03/metadata.json +6 -0
  294. package/test-fixtures/fix-language-codes/03/record.json +8 -0
  295. package/test-fixtures/fix-language-codes/04/expectedResult.json +9 -0
  296. package/test-fixtures/fix-language-codes/04/metadata.json +7 -0
  297. package/test-fixtures/fix-language-codes/04/record.json +7 -0
  298. package/test-fixtures/fix-language-codes/05/expectedResult.json +8 -0
  299. package/test-fixtures/fix-language-codes/05/metadata.json +6 -0
  300. package/test-fixtures/fix-language-codes/05/record.json +5 -0
  301. package/test-fixtures/punctuation2/95/expectedResult.json +22 -0
  302. package/test-fixtures/punctuation2/95/metadata.json +6 -0
  303. package/test-fixtures/punctuation2/95/record.json +20 -0
  304. package/test-fixtures/sanitize-vocabulary-source-codes/f03/expectedResult.json +143 -0
  305. package/test-fixtures/sanitize-vocabulary-source-codes/f03/metadata.json +9 -0
  306. package/test-fixtures/sanitize-vocabulary-source-codes/f03/record.json +145 -0
  307. package/test-fixtures/sanitize-vocabulary-source-codes/v03/expectedResult.json +5 -0
  308. package/test-fixtures/sanitize-vocabulary-source-codes/v03/metadata.json +6 -0
  309. package/test-fixtures/sanitize-vocabulary-source-codes/v03/record.json +145 -0
@@ -0,0 +1,272 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = _default;
7
+ var _utils = require("./utils");
8
+ var _field33XUtils = require("./field33XUtils");
9
+ //import createDebugLogger from 'debug';
10
+
11
+ const description = 'Add missing 336 field(s)';
12
+
13
+ // const multimediaRegexp = /multimedia/ui;
14
+
15
+ function _default() {
16
+ return {
17
+ description,
18
+ validate,
19
+ fix
20
+ };
21
+ function fix(record) {
22
+ (0, _utils.nvdebug)(`FIX ${description}...`);
23
+ const newFields = getMissing336s(record);
24
+ (0, _utils.nvdebug)(` GOT ${newFields.length}...`);
25
+ // FFS: we actually need newFields array here! Videogame, for example, might be
26
+ // 336 ## ‡a kaksiulotteinen liikkuva kuva ‡b tdi ‡2 rdacontent
27
+ // 336 ## ‡a tietokoneohjelma ‡b cop ‡2 rdacontent
28
+ const res = {
29
+ message: [],
30
+ fix: [],
31
+ valid: true
32
+ };
33
+ if (newFields.length) {
34
+ newFields.forEach(f => record.insertField(f));
35
+ return res;
36
+ }
37
+ return res;
38
+ }
39
+ function validate(record) {
40
+ (0, _utils.nvdebug)(`VALIDATE ${description}...`);
41
+ const newFields = getMissing336s(record);
42
+ if (newFields.length === 0) {
43
+ return {
44
+ message: [],
45
+ valid: true
46
+ };
47
+ }
48
+ const strings = newFields.map(f => (0, _utils.fieldToString)(f));
49
+ const tmp = strings.join('\', \'');
50
+ const msg = `${description}: '${tmp}'`;
51
+ return {
52
+ message: [msg],
53
+ valid: false
54
+ };
55
+ }
56
+ function guessMissingBsForComputerFile(record) {
57
+ const [field008] = record.get('008');
58
+ const typeOfComputerFile = field008 && field008.value ? field008.value[26] : undefined;
59
+ if (typeOfComputerFile) {
60
+ if (['d', 'e'].includes(typeOfComputerFile)) {
61
+ // d: N=400, e: N=50
62
+ return ['txt'];
63
+ }
64
+ if (typeOfComputerFile === 'g') {
65
+ // Videogame (N=10000+)
66
+ // 2D moving image/tdi is an educated guess. Might be wrong for 3D games and Infocom-style text-based games.
67
+ // Ref.: https://www.kiwi.fi/pages/viewpage.action?pageId=115966063#PelienRDAohje-Pelienjaottelu:videopelitjafyysisetpelit
68
+ return ['tdi', 'cop'];
69
+ }
70
+ if (['b', 'f'].includes(typeOfComputerFile)) {
71
+ // b: N=176, f: N=2
72
+ return ['cop'];
73
+ }
74
+ if (['a', 'c'].includes(typeOfComputerFile)) {
75
+ // c: N=152, a: N=36
76
+ return ['cod'];
77
+ }
78
+ if (typeOfComputerFile === 'h') {
79
+ // h: N=44
80
+ return ['snd'];
81
+ }
82
+ }
83
+
84
+ // ADD 256/300/516/XXX-based educated guesses here
85
+ const guess = guessUsingFileFields();
86
+ if (guess) {
87
+ return guess;
88
+ }
89
+ function guessUsingFileFields() {
90
+ const characteristics = record.get('(256|516)').map(f => (0, _utils.fieldToString)(f));
91
+ if (characteristics.some(str => str.match(/(?:ohjelma)/gui))) {
92
+ return ['cop'];
93
+ }
94
+ if (characteristics.some(str => str.match(/(?:daisy)/gui))) {
95
+ return ['spw', 'txt']; // The convention is to put just 'spw' but this is technically correct
96
+ }
97
+ if (characteristics.some(str => str.match(/(?:äänikirja)/gui))) {
98
+ return ['spw']; // This should be ['spw', 'txt'] but who am I to change conventions...
99
+ }
100
+ if (characteristics.some(str => str.match(/(?:book|e-bok|e-diss|e-avhand|kirja|e-thesis|tekstitiedosto|tidskrift|verkkoartikkeli|verkkokirja|verkkolehti)/gui))) {
101
+ return ['txt'];
102
+ }
103
+ if (characteristics.some(str => str.match(/(?:peli)/gui))) {
104
+ return ['tdi', 'cop'];
105
+ }
106
+ if (characteristics.some(str => str.match(/(?:data|tietokanta)/gui))) {
107
+ return ['cod'];
108
+ }
109
+ if (characteristics.some(str => str.match(/(?:verkkoaineisto.*[0-9]\] s|PDF)/gui)) || characteristics.some(str => str.match(/\b(?:text|tekstiä?)\b/gui))) {
110
+ return ['txt'];
111
+ }
112
+ if (characteristics.some(str => str.match(/(?:elokuva|liikkuva kuva)/gui))) {
113
+ return ['tdi'];
114
+ }
115
+ if (characteristics.some(str => str.match(/(?:kartta)/gui))) {
116
+ return ['cri']; // cri or crd, close enough anyhow, I guess
117
+ }
118
+ if (characteristics.some(str => str.match(/\b(?:kuvi?a)\b/gui))) {
119
+ return ['tdi'];
120
+ }
121
+ return undefined;
122
+ }
123
+ if (['i', 'j', 'm'].includes(typeOfComputerFile)) {
124
+ // (i: N=4800, m: N=566, j: N=111 )
125
+ // Can we use field 300/516/256 to improve guess?
126
+ return ['xxx'];
127
+ }
128
+ return ['zzz']; // unspecified
129
+ }
130
+
131
+ /*
132
+ function deriveLanguageMaterials336sFrom007(record) {
133
+ const categoryOfMaterial = [ // 007/00
134
+ {category: 'a', rdacontent: 'cri'}, // cartographic image <- looks like a MP that has been classified as BK... One more reason to comment these..
135
+ {category: 'c', rdacontent: 'txt'},
136
+ {category: 'g', rdacontent: 'sti'},
137
+ {vategory: 'h', rdacontent: 'txt'},
138
+ {category: 'k', rdacontent: 'sti'},
139
+ {category: 'v', rdacontent: 'tdi'}
140
+ ];
141
+ // What if there are multiple 007 fields?
142
+ const [f007] = record.fields.get('007');
143
+ if (f007) {
144
+ const row = categoryOfMaterial.filter(row => row.category === f007[0]);
145
+ if (row) {
146
+ return [row.rdacontent];
147
+ }
148
+ }
149
+ return [];
150
+ }
151
+ */
152
+
153
+ function guessMissingBsForBookAndContinuingResource(record, formOfItem) {
154
+ // This is from very old crap from usemarcon-cyrillux, but me not like it at all!
155
+ /*
156
+ const f245h = getTitleMedium(record);
157
+ if (f245h && !multimediaRegexp.test(f245h)) {
158
+ const result = deriveLanguageMaterials336sFrom007(record); // Base result on 007/00...
159
+ if (result) {
160
+ return result;
161
+ }
162
+ }
163
+ */
164
+
165
+ //const bibliographicalLevel = record.getBibliograpicLevel(); // Bloody h-drop typo...
166
+ //const isBis = ['b', 'i', 's'].includes(bibliographicalLevel);
167
+ //if (!isBis) {
168
+ if (formOfItem === 'f') {
169
+ return ['tct']; // tactile text
170
+ }
171
+ return ['txt']; // Default BK format is text
172
+ }
173
+ function guessMissingBsForMap(record) {
174
+ const formOfItem = (0, _field33XUtils.getFormOfItem)(record);
175
+ // Is braille and is not a model (we have 0). Changed the original usemarcon rule 007/01!=q to 007/01=q
176
+ if (formOfItem === 'f' && record.fields.some(f => f.tag === '007' && f.value[0] === 'a' && f.value[1] === 'q')) {
177
+ return ['crt']; // Cartographic tactile image
178
+ }
179
+ const [field008] = record.get('008');
180
+ if (field008 && field008.value[25] === 'd') {
181
+ // globe (cool, but we really don't have these)
182
+ return ['crf']; // map 3D form
183
+ }
184
+ return ['cri']; // default cartographic image
185
+ }
186
+ function guessMissing336Bs(record) {
187
+ const typeOfRecord = record.getTypeOfRecord();
188
+ if (typeOfRecord === 'i') {
189
+ return ['spw'];
190
+ }
191
+ if (typeOfRecord === 'j') {
192
+ return ['prm']; // performed music
193
+ }
194
+ if (typeOfRecord === 'e' || typeOfRecord === 'f') {
195
+ return guessMissingBsForMap(record);
196
+ }
197
+ const formOfItem = (0, _field33XUtils.getFormOfItem)(record);
198
+ if (typeOfRecord === 'k') {
199
+ if (formOfItem === 'f') {
200
+ return ['tci']; // tactile image
201
+ }
202
+ return ['sti'];
203
+ }
204
+ if (typeOfRecord === 'c' || typeOfRecord === 'd') {
205
+ if (formOfItem === 'f') {
206
+ return ['tcm']; // tactile notated music
207
+ }
208
+ return ['ntm']; // notated music
209
+ }
210
+ if (typeOfRecord === 'g') {
211
+ if (record.fields.some(f => f.tag === '007' && f.value[0] === 'g')) {
212
+ return ['sti']; // still image
213
+ }
214
+ if (record.fields.some(f => f.tag === '007' && ['m', 'v', 'c'].includes(f.value[0]))) {
215
+ // 'c' is a bit iffy, but I'll tune it only if it makes an error...
216
+ return ['tdi']; // 2d moving pic
217
+ }
218
+ }
219
+ if (typeOfRecord === 'm') {
220
+ // electronic
221
+ return guessMissingBsForComputerFile(record);
222
+ }
223
+ if (typeOfRecord === 'a' || typeOfRecord === 't') {
224
+ return guessMissingBsForBookAndContinuingResource(record, formOfItem);
225
+ }
226
+
227
+ // Note that 245$h should trigger LDR/06:a or t =>o change at some earlier point (outside the scope of this module)
228
+ if (typeOfRecord === 'o' || typeOfRecord === 'p') {
229
+ // o: Kit p: Mixed
230
+ if (['d', 'r'].includes(formOfItem)) {
231
+ // d=isoteksti, r=eye-readable print
232
+ return ['txt'];
233
+ }
234
+ // Not much I can guess from 300 etc
235
+ return ['xxx']; // other
236
+ }
237
+ if (typeOfRecord === 'r') {
238
+ // three-dimensional form
239
+ return ['tdf'];
240
+ }
241
+ return ['zzz']; // unspecified
242
+ }
243
+ function codeToField(b, catLang) {
244
+ const a = (0, _field33XUtils.map336CodeToTerm)(b, catLang);
245
+ const data = {
246
+ tag: '336',
247
+ ind1: ' ',
248
+ ind2: ' ',
249
+ subfields: [{
250
+ code: 'a',
251
+ value: a
252
+ }, {
253
+ code: 'b',
254
+ value: b
255
+ }, {
256
+ code: '2',
257
+ value: 'rdacontent'
258
+ }]
259
+ };
260
+ return data;
261
+ }
262
+ function getMissing336s(record) {
263
+ const f336 = record.get('336');
264
+ if (f336.length > 0) {
265
+ return [];
266
+ }
267
+ const bees = guessMissing336Bs(record); // bees = b-subfields
268
+ (0, _utils.nvdebug)(` WE HAVE ${bees.length} BEES: ${bees.join(', ')}`);
269
+ return bees.map(b => codeToField(b, (0, _utils.getCatalogingLanguage)(record, 'fin')));
270
+ }
271
+ }
272
+ //# sourceMappingURL=addMissingField336.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addMissingField336.js","names":["_utils","require","_field33XUtils","description","_default","validate","fix","record","nvdebug","newFields","getMissing336s","length","res","message","valid","forEach","f","insertField","strings","map","fieldToString","tmp","join","msg","guessMissingBsForComputerFile","field008","get","typeOfComputerFile","value","undefined","includes","guess","guessUsingFileFields","characteristics","some","str","match","guessMissingBsForBookAndContinuingResource","formOfItem","guessMissingBsForMap","getFormOfItem","fields","tag","guessMissing336Bs","typeOfRecord","getTypeOfRecord","codeToField","b","catLang","a","map336CodeToTerm","data","ind1","ind2","subfields","code","f336","bees","getCatalogingLanguage"],"sources":["../src/addMissingField336.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport {fieldToString, getCatalogingLanguage, nvdebug} from './utils';\nimport {getFormOfItem, map336CodeToTerm} from './field33XUtils';\n\nconst description = 'Add missing 336 field(s)';\n\n// const multimediaRegexp = /multimedia/ui;\n\nexport default function () {\n\n return {\n description, validate, fix\n };\n\n function fix(record) {\n nvdebug(`FIX ${description}...`);\n const newFields = getMissing336s(record);\n nvdebug(` GOT ${newFields.length}...`);\n // FFS: we actually need newFields array here! Videogame, for example, might be\n // 336 ## ‡a kaksiulotteinen liikkuva kuva ‡b tdi ‡2 rdacontent\n // 336 ## ‡a tietokoneohjelma ‡b cop ‡2 rdacontent\n const res = {message: [], fix: [], valid: true};\n if (newFields.length) {\n newFields.forEach(f => record.insertField(f));\n return res;\n }\n return res;\n }\n\n function validate(record) {\n nvdebug(`VALIDATE ${description}...`);\n const newFields = getMissing336s(record);\n if (newFields.length === 0) {\n return {message: [], valid: true};\n }\n const strings = newFields.map(f => fieldToString(f));\n const tmp = strings.join('\\', \\'');\n const msg = `${description}: '${tmp}'`;\n return {message: [msg], valid: false};\n }\n\n function guessMissingBsForComputerFile(record) {\n const [field008] = record.get('008');\n const typeOfComputerFile = field008 && field008.value ? field008.value[26] : undefined;\n\n if (typeOfComputerFile) {\n if (['d', 'e'].includes(typeOfComputerFile)) { // d: N=400, e: N=50\n return ['txt'];\n }\n if (typeOfComputerFile === 'g') { // Videogame (N=10000+)\n // 2D moving image/tdi is an educated guess. Might be wrong for 3D games and Infocom-style text-based games.\n // Ref.: https://www.kiwi.fi/pages/viewpage.action?pageId=115966063#PelienRDAohje-Pelienjaottelu:videopelitjafyysisetpelit\n return ['tdi', 'cop'];\n }\n if (['b', 'f'].includes(typeOfComputerFile)) { // b: N=176, f: N=2\n return ['cop'];\n }\n if (['a', 'c'].includes(typeOfComputerFile)) { // c: N=152, a: N=36\n return ['cod'];\n }\n if (typeOfComputerFile === 'h') { // h: N=44\n return ['snd'];\n }\n }\n\n // ADD 256/300/516/XXX-based educated guesses here\n const guess = guessUsingFileFields();\n if (guess) {\n return guess;\n }\n function guessUsingFileFields() {\n const characteristics = record.get('(256|516)').map(f => fieldToString(f));\n if (characteristics.some(str => str.match(/(?:ohjelma)/gui))) {\n return ['cop'];\n }\n if (characteristics.some(str => str.match(/(?:daisy)/gui))) {\n return ['spw', 'txt']; // The convention is to put just 'spw' but this is technically correct\n }\n if (characteristics.some(str => str.match(/(?:äänikirja)/gui))) {\n return ['spw']; // This should be ['spw', 'txt'] but who am I to change conventions...\n }\n if (characteristics.some(str => str.match(/(?:book|e-bok|e-diss|e-avhand|kirja|e-thesis|tekstitiedosto|tidskrift|verkkoartikkeli|verkkokirja|verkkolehti)/gui))) {\n return ['txt'];\n }\n if (characteristics.some(str => str.match(/(?:peli)/gui))) {\n return ['tdi', 'cop'];\n }\n if (characteristics.some(str => str.match(/(?:data|tietokanta)/gui))) {\n return ['cod'];\n }\n if (characteristics.some(str => str.match(/(?:verkkoaineisto.*[0-9]\\] s|PDF)/gui)) || characteristics.some(str => str.match(/\\b(?:text|tekstiä?)\\b/gui))) {\n return ['txt'];\n }\n if (characteristics.some(str => str.match(/(?:elokuva|liikkuva kuva)/gui))) {\n return ['tdi'];\n }\n if (characteristics.some(str => str.match(/(?:kartta)/gui))) {\n return ['cri']; // cri or crd, close enough anyhow, I guess\n }\n if (characteristics.some(str => str.match(/\\b(?:kuvi?a)\\b/gui))) {\n return ['tdi'];\n }\n\n return undefined;\n }\n\n\n if (['i', 'j', 'm'].includes(typeOfComputerFile)) { // (i: N=4800, m: N=566, j: N=111 )\n // Can we use field 300/516/256 to improve guess?\n return ['xxx'];\n }\n return ['zzz']; // unspecified\n }\n\n /*\n function deriveLanguageMaterials336sFrom007(record) {\n const categoryOfMaterial = [ // 007/00\n {category: 'a', rdacontent: 'cri'}, // cartographic image <- looks like a MP that has been classified as BK... One more reason to comment these..\n {category: 'c', rdacontent: 'txt'},\n {category: 'g', rdacontent: 'sti'},\n {vategory: 'h', rdacontent: 'txt'},\n {category: 'k', rdacontent: 'sti'},\n {category: 'v', rdacontent: 'tdi'}\n ];\n\n // What if there are multiple 007 fields?\n const [f007] = record.fields.get('007');\n if (f007) {\n const row = categoryOfMaterial.filter(row => row.category === f007[0]);\n if (row) {\n return [row.rdacontent];\n }\n }\n return [];\n }\n */\n\n function guessMissingBsForBookAndContinuingResource(record, formOfItem) {\n\n\n // This is from very old crap from usemarcon-cyrillux, but me not like it at all!\n /*\n const f245h = getTitleMedium(record);\n if (f245h && !multimediaRegexp.test(f245h)) {\n const result = deriveLanguageMaterials336sFrom007(record); // Base result on 007/00...\n if (result) {\n return result;\n }\n }\n */\n\n //const bibliographicalLevel = record.getBibliograpicLevel(); // Bloody h-drop typo...\n //const isBis = ['b', 'i', 's'].includes(bibliographicalLevel);\n //if (!isBis) {\n if (formOfItem === 'f') {\n return ['tct']; // tactile text\n }\n return ['txt']; // Default BK format is text\n }\n\n function guessMissingBsForMap(record) {\n const formOfItem = getFormOfItem(record);\n // Is braille and is not a model (we have 0). Changed the original usemarcon rule 007/01!=q to 007/01=q\n if (formOfItem === 'f' && record.fields.some(f => f.tag === '007' && f.value[0] === 'a' && f.value[1] === 'q')) {\n return ['crt']; // Cartographic tactile image\n }\n const [field008] = record.get('008');\n if (field008 && field008.value[25] === 'd') { // globe (cool, but we really don't have these)\n return ['crf']; // map 3D form\n }\n return ['cri']; // default cartographic image\n }\n\n function guessMissing336Bs(record) {\n const typeOfRecord = record.getTypeOfRecord();\n\n if (typeOfRecord === 'i') {\n return ['spw'];\n }\n if (typeOfRecord === 'j') {\n return ['prm']; // performed music\n }\n\n if (typeOfRecord === 'e' || typeOfRecord === 'f') {\n return guessMissingBsForMap(record);\n }\n\n const formOfItem = getFormOfItem(record);\n\n if (typeOfRecord === 'k') {\n if (formOfItem === 'f') {\n return ['tci']; // tactile image\n }\n return ['sti'];\n }\n\n if (typeOfRecord === 'c' || typeOfRecord === 'd') {\n if (formOfItem === 'f') {\n return ['tcm']; // tactile notated music\n }\n return ['ntm']; // notated music\n }\n\n if (typeOfRecord === 'g') {\n if (record.fields.some(f => f.tag === '007' && f.value[0] === 'g')) {\n return ['sti']; // still image\n }\n if (record.fields.some(f => f.tag === '007' && ['m', 'v', 'c'].includes(f.value[0]))) { // 'c' is a bit iffy, but I'll tune it only if it makes an error...\n return ['tdi']; // 2d moving pic\n }\n }\n\n if (typeOfRecord === 'm') { // electronic\n return guessMissingBsForComputerFile(record);\n }\n\n if (typeOfRecord === 'a' || typeOfRecord === 't') {\n return guessMissingBsForBookAndContinuingResource(record, formOfItem);\n }\n\n // Note that 245$h should trigger LDR/06:a or t =>o change at some earlier point (outside the scope of this module)\n if (typeOfRecord === 'o' || typeOfRecord === 'p') { // o: Kit p: Mixed\n if (['d', 'r'].includes(formOfItem)) { // d=isoteksti, r=eye-readable print\n return ['txt'];\n }\n // Not much I can guess from 300 etc\n return ['xxx']; // other\n }\n if (typeOfRecord === 'r') { // three-dimensional form\n return ['tdf'];\n }\n return ['zzz']; // unspecified\n }\n\n\n function codeToField(b, catLang) {\n const a = map336CodeToTerm(b, catLang);\n const data = {tag: '336', ind1: ' ', ind2: ' ', subfields: [\n {code: 'a', value: a},\n {code: 'b', value: b},\n {code: '2', value: 'rdacontent'}\n ]};\n\n return data;\n }\n\n function getMissing336s(record) {\n const f336 = record.get('336');\n if (f336.length > 0) {\n return [];\n }\n\n const bees = guessMissing336Bs(record); // bees = b-subfields\n nvdebug(` WE HAVE ${bees.length} BEES: ${bees.join(', ')}`);\n\n\n return bees.map(b => codeToField(b, getCatalogingLanguage(record, 'fin')));\n }\n}\n\n"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,cAAA,GAAAD,OAAA;AAFA;;AAIA,MAAME,WAAW,GAAG,0BAA0B;;AAE9C;;AAEe,SAAAC,SAAA,EAAY;EAEzB,OAAO;IACLD,WAAW;IAAEE,QAAQ;IAAEC;EACzB,CAAC;EAED,SAASA,GAAGA,CAACC,MAAM,EAAE;IACnB,IAAAC,cAAO,EAAE,OAAML,WAAY,KAAI,CAAC;IAChC,MAAMM,SAAS,GAAGC,cAAc,CAACH,MAAM,CAAC;IACxC,IAAAC,cAAO,EAAE,QAAOC,SAAS,CAACE,MAAO,KAAI,CAAC;IACtC;IACA;IACA;IACA,MAAMC,GAAG,GAAG;MAACC,OAAO,EAAE,EAAE;MAAEP,GAAG,EAAE,EAAE;MAAEQ,KAAK,EAAE;IAAI,CAAC;IAC/C,IAAIL,SAAS,CAACE,MAAM,EAAE;MACpBF,SAAS,CAACM,OAAO,CAACC,CAAC,IAAIT,MAAM,CAACU,WAAW,CAACD,CAAC,CAAC,CAAC;MAC7C,OAAOJ,GAAG;IACZ;IACA,OAAOA,GAAG;EACZ;EAEA,SAASP,QAAQA,CAACE,MAAM,EAAE;IACxB,IAAAC,cAAO,EAAE,YAAWL,WAAY,KAAI,CAAC;IACrC,MAAMM,SAAS,GAAGC,cAAc,CAACH,MAAM,CAAC;IACxC,IAAIE,SAAS,CAACE,MAAM,KAAK,CAAC,EAAE;MAC1B,OAAO;QAACE,OAAO,EAAE,EAAE;QAAEC,KAAK,EAAE;MAAI,CAAC;IACnC;IACA,MAAMI,OAAO,GAAGT,SAAS,CAACU,GAAG,CAACH,CAAC,IAAI,IAAAI,oBAAa,EAACJ,CAAC,CAAC,CAAC;IACpD,MAAMK,GAAG,GAAGH,OAAO,CAACI,IAAI,CAAC,QAAQ,CAAC;IAClC,MAAMC,GAAG,GAAI,GAAEpB,WAAY,MAAKkB,GAAI,GAAE;IACtC,OAAO;MAACR,OAAO,EAAE,CAACU,GAAG,CAAC;MAAET,KAAK,EAAE;IAAK,CAAC;EACvC;EAEA,SAASU,6BAA6BA,CAACjB,MAAM,EAAE;IAC7C,MAAM,CAACkB,QAAQ,CAAC,GAAGlB,MAAM,CAACmB,GAAG,CAAC,KAAK,CAAC;IACpC,MAAMC,kBAAkB,GAAGF,QAAQ,IAAIA,QAAQ,CAACG,KAAK,GAAGH,QAAQ,CAACG,KAAK,CAAC,EAAE,CAAC,GAAGC,SAAS;IAEtF,IAAIF,kBAAkB,EAAE;MACtB,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAACG,QAAQ,CAACH,kBAAkB,CAAC,EAAE;QAAE;QAC7C,OAAO,CAAC,KAAK,CAAC;MAChB;MACA,IAAIA,kBAAkB,KAAK,GAAG,EAAE;QAAE;QAChC;QACA;QACA,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;MACvB;MACA,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAACG,QAAQ,CAACH,kBAAkB,CAAC,EAAE;QAAE;QAC7C,OAAO,CAAC,KAAK,CAAC;MAChB;MACA,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAACG,QAAQ,CAACH,kBAAkB,CAAC,EAAE;QAAE;QAC7C,OAAO,CAAC,KAAK,CAAC;MAChB;MACA,IAAIA,kBAAkB,KAAK,GAAG,EAAE;QAAE;QAChC,OAAO,CAAC,KAAK,CAAC;MAChB;IACF;;IAEA;IACA,MAAMI,KAAK,GAAGC,oBAAoB,CAAC,CAAC;IACpC,IAAID,KAAK,EAAE;MACT,OAAOA,KAAK;IACd;IACA,SAASC,oBAAoBA,CAAA,EAAG;MAC9B,MAAMC,eAAe,GAAG1B,MAAM,CAACmB,GAAG,CAAC,WAAW,CAAC,CAACP,GAAG,CAACH,CAAC,IAAI,IAAAI,oBAAa,EAACJ,CAAC,CAAC,CAAC;MAC1E,IAAIiB,eAAe,CAACC,IAAI,CAACC,GAAG,IAAIA,GAAG,CAACC,KAAK,CAAC,gBAAgB,CAAC,CAAC,EAAE;QAC5D,OAAO,CAAC,KAAK,CAAC;MAChB;MACA,IAAIH,eAAe,CAACC,IAAI,CAACC,GAAG,IAAIA,GAAG,CAACC,KAAK,CAAC,cAAc,CAAC,CAAC,EAAE;QAC1D,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;MACzB;MACA,IAAIH,eAAe,CAACC,IAAI,CAACC,GAAG,IAAIA,GAAG,CAACC,KAAK,CAAC,kBAAkB,CAAC,CAAC,EAAE;QAC9D,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;MAClB;MACA,IAAIH,eAAe,CAACC,IAAI,CAACC,GAAG,IAAIA,GAAG,CAACC,KAAK,CAAC,mHAAmH,CAAC,CAAC,EAAE;QAC/J,OAAO,CAAC,KAAK,CAAC;MAChB;MACA,IAAIH,eAAe,CAACC,IAAI,CAACC,GAAG,IAAIA,GAAG,CAACC,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE;QACzD,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;MACvB;MACA,IAAIH,eAAe,CAACC,IAAI,CAACC,GAAG,IAAIA,GAAG,CAACC,KAAK,CAAC,wBAAwB,CAAC,CAAC,EAAE;QACpE,OAAO,CAAC,KAAK,CAAC;MAChB;MACA,IAAIH,eAAe,CAACC,IAAI,CAACC,GAAG,IAAIA,GAAG,CAACC,KAAK,CAAC,sCAAsC,CAAC,CAAC,IAAIH,eAAe,CAACC,IAAI,CAACC,GAAG,IAAIA,GAAG,CAACC,KAAK,CAAC,0BAA0B,CAAC,CAAC,EAAE;QACxJ,OAAO,CAAC,KAAK,CAAC;MAChB;MACA,IAAIH,eAAe,CAACC,IAAI,CAACC,GAAG,IAAIA,GAAG,CAACC,KAAK,CAAC,8BAA8B,CAAC,CAAC,EAAE;QAC1E,OAAO,CAAC,KAAK,CAAC;MAChB;MACA,IAAIH,eAAe,CAACC,IAAI,CAACC,GAAG,IAAIA,GAAG,CAACC,KAAK,CAAC,eAAe,CAAC,CAAC,EAAE;QAC3D,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;MAClB;MACA,IAAIH,eAAe,CAACC,IAAI,CAACC,GAAG,IAAIA,GAAG,CAACC,KAAK,CAAC,mBAAmB,CAAC,CAAC,EAAE;QAC/D,OAAO,CAAC,KAAK,CAAC;MAChB;MAEA,OAAOP,SAAS;IAClB;IAGA,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAACC,QAAQ,CAACH,kBAAkB,CAAC,EAAE;MAAE;MAClD;MACA,OAAO,CAAC,KAAK,CAAC;IAChB;IACA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;EAClB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAGE,SAASU,0CAA0CA,CAAC9B,MAAM,EAAE+B,UAAU,EAAE;IAGtE;IACA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IAEI;IACA;IACA;IACA,IAAIA,UAAU,KAAK,GAAG,EAAE;MACtB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAClB;IACA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;EAClB;EAEA,SAASC,oBAAoBA,CAAChC,MAAM,EAAE;IACpC,MAAM+B,UAAU,GAAG,IAAAE,4BAAa,EAACjC,MAAM,CAAC;IACxC;IACA,IAAI+B,UAAU,KAAK,GAAG,IAAI/B,MAAM,CAACkC,MAAM,CAACP,IAAI,CAAClB,CAAC,IAAIA,CAAC,CAAC0B,GAAG,KAAK,KAAK,IAAI1B,CAAC,CAACY,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAIZ,CAAC,CAACY,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE;MAC9G,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAClB;IACA,MAAM,CAACH,QAAQ,CAAC,GAAGlB,MAAM,CAACmB,GAAG,CAAC,KAAK,CAAC;IACpC,IAAID,QAAQ,IAAIA,QAAQ,CAACG,KAAK,CAAC,EAAE,CAAC,KAAK,GAAG,EAAE;MAAE;MAC5C,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAClB;IACA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;EAClB;EAEA,SAASe,iBAAiBA,CAACpC,MAAM,EAAE;IACjC,MAAMqC,YAAY,GAAGrC,MAAM,CAACsC,eAAe,CAAC,CAAC;IAE7C,IAAID,YAAY,KAAK,GAAG,EAAE;MACxB,OAAO,CAAC,KAAK,CAAC;IAChB;IACA,IAAIA,YAAY,KAAK,GAAG,EAAE;MACxB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAClB;IAEA,IAAIA,YAAY,KAAK,GAAG,IAAIA,YAAY,KAAK,GAAG,EAAE;MAChD,OAAOL,oBAAoB,CAAChC,MAAM,CAAC;IACrC;IAEA,MAAM+B,UAAU,GAAG,IAAAE,4BAAa,EAACjC,MAAM,CAAC;IAExC,IAAIqC,YAAY,KAAK,GAAG,EAAE;MACxB,IAAIN,UAAU,KAAK,GAAG,EAAE;QACtB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;MAClB;MACA,OAAO,CAAC,KAAK,CAAC;IAChB;IAEA,IAAIM,YAAY,KAAK,GAAG,IAAIA,YAAY,KAAK,GAAG,EAAE;MAChD,IAAIN,UAAU,KAAK,GAAG,EAAE;QACtB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;MAClB;MACA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAClB;IAEA,IAAIM,YAAY,KAAK,GAAG,EAAE;MACxB,IAAIrC,MAAM,CAACkC,MAAM,CAACP,IAAI,CAAClB,CAAC,IAAIA,CAAC,CAAC0B,GAAG,KAAK,KAAK,IAAI1B,CAAC,CAACY,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE;QAClE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;MAClB;MACA,IAAIrB,MAAM,CAACkC,MAAM,CAACP,IAAI,CAAClB,CAAC,IAAIA,CAAC,CAAC0B,GAAG,KAAK,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAACZ,QAAQ,CAACd,CAAC,CAACY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;QAAE;QACtF,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;MAClB;IACF;IAEA,IAAIgB,YAAY,KAAK,GAAG,EAAE;MAAE;MAC1B,OAAOpB,6BAA6B,CAACjB,MAAM,CAAC;IAC9C;IAEA,IAAIqC,YAAY,KAAK,GAAG,IAAIA,YAAY,KAAK,GAAG,EAAE;MAChD,OAAOP,0CAA0C,CAAC9B,MAAM,EAAE+B,UAAU,CAAC;IACvE;;IAEA;IACA,IAAIM,YAAY,KAAK,GAAG,IAAIA,YAAY,KAAK,GAAG,EAAE;MAAE;MAClD,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAACd,QAAQ,CAACQ,UAAU,CAAC,EAAE;QAAE;QACrC,OAAO,CAAC,KAAK,CAAC;MAChB;MACA;MACA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAClB;IACA,IAAIM,YAAY,KAAK,GAAG,EAAE;MAAE;MAC1B,OAAO,CAAC,KAAK,CAAC;IAChB;IACA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;EAClB;EAGA,SAASE,WAAWA,CAACC,CAAC,EAAEC,OAAO,EAAE;IAC/B,MAAMC,CAAC,GAAG,IAAAC,+BAAgB,EAACH,CAAC,EAAEC,OAAO,CAAC;IACtC,MAAMG,IAAI,GAAG;MAACT,GAAG,EAAE,KAAK;MAAEU,IAAI,EAAE,GAAG;MAAEC,IAAI,EAAE,GAAG;MAAEC,SAAS,EAAE,CACzD;QAACC,IAAI,EAAE,GAAG;QAAE3B,KAAK,EAAEqB;MAAC,CAAC,EACrB;QAACM,IAAI,EAAE,GAAG;QAAE3B,KAAK,EAAEmB;MAAC,CAAC,EACrB;QAACQ,IAAI,EAAE,GAAG;QAAE3B,KAAK,EAAE;MAAY,CAAC;IACjC,CAAC;IAEF,OAAOuB,IAAI;EACb;EAEA,SAASzC,cAAcA,CAACH,MAAM,EAAE;IAC9B,MAAMiD,IAAI,GAAGjD,MAAM,CAACmB,GAAG,CAAC,KAAK,CAAC;IAC9B,IAAI8B,IAAI,CAAC7C,MAAM,GAAG,CAAC,EAAE;MACnB,OAAO,EAAE;IACX;IAEA,MAAM8C,IAAI,GAAGd,iBAAiB,CAACpC,MAAM,CAAC,CAAC,CAAC;IACxC,IAAAC,cAAO,EAAE,YAAWiD,IAAI,CAAC9C,MAAO,UAAS8C,IAAI,CAACnC,IAAI,CAAC,IAAI,CAAE,EAAC,CAAC;IAG3D,OAAOmC,IAAI,CAACtC,GAAG,CAAC4B,CAAC,IAAID,WAAW,CAACC,CAAC,EAAE,IAAAW,4BAAqB,EAACnD,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;EAC5E;AACF","ignoreList":[]}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ var _chai = require("chai");
4
+ var _marcRecord = require("@natlibfi/marc-record");
5
+ var _addMissingField = _interopRequireDefault(require("./addMissingField336"));
6
+ var _fixura = require("@natlibfi/fixura");
7
+ var _fixugen = _interopRequireDefault(require("@natlibfi/fixugen"));
8
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ (0, _fixugen.default)({
10
+ callback,
11
+ path: [__dirname, '..', 'test-fixtures', 'addMissingField336'],
12
+ useMetadataFile: true,
13
+ recurse: false,
14
+ fixura: {
15
+ reader: _fixura.READERS.JSON
16
+ },
17
+ mocha: {
18
+ before: () => testValidatorFactory()
19
+ }
20
+ });
21
+ async function testValidatorFactory() {
22
+ const validator = await (0, _addMissingField.default)();
23
+ (0, _chai.expect)(validator).to.be.an('object').that.has.any.keys('description', 'validate');
24
+ (0, _chai.expect)(validator.description).to.be.a('string');
25
+ (0, _chai.expect)(validator.validate).to.be.a('function');
26
+ (0, _chai.expect)(validator.fix).to.be.a('function');
27
+ }
28
+ async function callback({
29
+ getFixture,
30
+ fix = false
31
+ }) {
32
+ const validator = await (0, _addMissingField.default)();
33
+ const record = new _marcRecord.MarcRecord(getFixture('record.json'));
34
+ const expectedResult = getFixture('expectedResult.json');
35
+ // console.log(expectedResult); // eslint-disable-line
36
+
37
+ if (!fix) {
38
+ const result = await validator.validate(record);
39
+ (0, _chai.expect)(result).to.eql(expectedResult);
40
+ return;
41
+ }
42
+ await validator.fix(record);
43
+ (0, _chai.expect)(record).to.eql(expectedResult);
44
+ }
45
+ //# sourceMappingURL=addMissingField336.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addMissingField336.spec.js","names":["_chai","require","_marcRecord","_addMissingField","_interopRequireDefault","_fixura","_fixugen","obj","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","fix","getFixture","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/addMissingField336.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './addMissingField336';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'addMissingField336'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\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 expect(validator.fix).to.be.a('function');\n}\n\nasync function callback({getFixture, fix = false}) {\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,gBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AAA8C,SAAAG,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAE9C,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;AAEF,eAAeA,oBAAoBA,CAAA,EAAG;EACpC,MAAMC,SAAS,GAAG,MAAM,IAAAC,wBAAgB,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;EAC9C,IAAAT,YAAM,EAACF,SAAS,CAACa,GAAG,CAAC,CAACV,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAC3C;AAEA,eAAevB,QAAQA,CAAC;EAAC0B,UAAU;EAAED,GAAG,GAAG;AAAK,CAAC,EAAE;EACjD,MAAMb,SAAS,GAAG,MAAM,IAAAC,wBAAgB,EAAC,CAAC;EAC1C,MAAMc,MAAM,GAAG,IAAIC,sBAAU,CAACF,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMG,cAAc,GAAGH,UAAU,CAAC,qBAAqB,CAAC;EACxD;;EAEA,IAAI,CAACD,GAAG,EAAE;IACR,MAAMK,MAAM,GAAG,MAAMlB,SAAS,CAACY,QAAQ,CAACG,MAAM,CAAC;IAC/C,IAAAb,YAAM,EAACgB,MAAM,CAAC,CAACf,EAAE,CAACgB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMjB,SAAS,CAACa,GAAG,CAACE,MAAM,CAAC;EAC3B,IAAAb,YAAM,EAACa,MAAM,CAAC,CAACZ,EAAE,CAACgB,GAAG,CAACF,cAAc,CAAC;AACvC","ignoreList":[]}
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = _default;
7
+ var _utils = require("./utils");
8
+ var _field33XUtils = require("./field33XUtils");
9
+ //import createDebugLogger from 'debug';
10
+
11
+ const description = 'Add missing 337 field(s)';
12
+
13
+ // Based on https://github.com/NatLibFi/USEMARCON-Cyrillux/blob/master/008-23-337a.tbl . Extended!
14
+ const mappings337B = [{
15
+ formOfItem: ' ',
16
+ rdacontent: 'n'
17
+ },
18
+ // unmediated - käytettävissä ilman laitetta
19
+ {
20
+ formOfItem: '|',
21
+ rdacontent: 'n'
22
+ }, {
23
+ formOfItem: 'a',
24
+ rdacontent: 'h'
25
+ },
26
+ // microform
27
+ {
28
+ formOfItem: 'b',
29
+ rdacontent: 'h'
30
+ }, {
31
+ formOfItem: 'c',
32
+ rdacontent: 'h'
33
+ }, {
34
+ formOfItem: 'd',
35
+ rdacontent: 'n'
36
+ }, {
37
+ formOfItem: 'e',
38
+ rdacontent: 'n'
39
+ }, {
40
+ formOfItem: 'f',
41
+ rdacontent: 'n'
42
+ }, {
43
+ formOfItem: 'o',
44
+ rdacontent: 'c'
45
+ },
46
+ // computer
47
+ {
48
+ formOfItem: 'q',
49
+ rdacontent: 'c'
50
+ }, {
51
+ formOfItem: 'r',
52
+ rdacontent: 'n'
53
+ }, {
54
+ formOfItem: 's',
55
+ rdacontent: 'c'
56
+ }];
57
+ function _default() {
58
+ return {
59
+ description,
60
+ validate,
61
+ fix
62
+ };
63
+ function fix(record) {
64
+ (0, _utils.nvdebug)(`FIX ${description}...`);
65
+ const newField = getMissing337(record);
66
+ const res = {
67
+ message: [],
68
+ fix: [],
69
+ valid: true
70
+ };
71
+ if (newField) {
72
+ record.insertField(newField);
73
+ return res;
74
+ }
75
+ return res;
76
+ }
77
+ function validate(record) {
78
+ (0, _utils.nvdebug)(`VALIDATE ${description}....`);
79
+ const newField = getMissing337(record);
80
+ if (!newField) {
81
+ return {
82
+ message: [],
83
+ valid: true
84
+ };
85
+ }
86
+ const msg = `${description}: '${(0, _utils.fieldToString)(newField)}'`;
87
+ return {
88
+ message: [msg],
89
+ valid: false
90
+ };
91
+ }
92
+ function guessObjectsMissing337B(record) {
93
+ const [field008] = record.get('008');
94
+ if (field008 && field008.value[33] === 'p') {
95
+ return 'p'; // microscopic
96
+ }
97
+ return 'n'; // unmediated
98
+ }
99
+ function guessMissing337B(record) {
100
+ const typeOfRecord = record.getTypeOfRecord();
101
+ if (typeOfRecord === 'm') {
102
+ // LDR/06=m/computer file
103
+ return 'c'; // computer
104
+ }
105
+ if (typeOfRecord === 'o' || typeOfRecord === 'p') {
106
+ return 'x'; // other
107
+ }
108
+ if (typeOfRecord === 'r') {
109
+ // object
110
+ return guessObjectsMissing337B(record);
111
+ }
112
+ const fields007 = record.get('007');
113
+
114
+ // TO DO: type a/t + 245$h (not multimedia): use 007/00 based expection
115
+
116
+ // 007/00 implies that 337$b=c (computer)
117
+ if (typeOfRecord === 'g' || typeOfRecord === 'i' || typeOfRecord === 'j') {
118
+ if (fields007.some(f => f.value[0] === 'c')) {
119
+ // c=computer
120
+ // i and j: should we check 007/05 (audio)=a as well?
121
+ return 'c';
122
+ }
123
+ }
124
+ if (typeOfRecord === 'g') {
125
+ if (fields007.some(f => f.value[0] === 'g')) {
126
+ // g=projected
127
+ return 'g';
128
+ }
129
+ if (fields007.some(f => f.value[0] === 'm' || f.value[0] === 'v')) {
130
+ // m=movie, v=videorecording (cyrillux maps videorecording to 'c'/computer, fix it there?)
131
+ return 'v';
132
+ }
133
+ }
134
+ if (typeOfRecord === 'i' || typeOfRecord === 'j') {
135
+ // Ye olde stuff: 245$h might contain value 'Äänite', which returns 'a'.
136
+ // NB! Cyrillux returns 'c'/com a bit more aggressively for j (music)
137
+ return 's'; // audio
138
+ }
139
+ return mapFormOfItemToField337B((0, _field33XUtils.getFormOfItem)(record));
140
+ }
141
+ function getMissing337(record) {
142
+ const [f337] = record.get('337');
143
+ if (f337) {
144
+ // nvdebug(fieldToString(f337));
145
+ return undefined;
146
+ }
147
+ const b = guessMissing337B(record) || 'z';
148
+ const catLang = (0, _utils.getCatalogingLanguage)(record);
149
+ const catLang2 = catLang ? catLang : 'fin';
150
+ const a = (0, _field33XUtils.map337CodeToTerm)(b, catLang2);
151
+ const data = {
152
+ tag: '337',
153
+ ind1: ' ',
154
+ ind2: ' ',
155
+ subfields: [{
156
+ code: 'a',
157
+ value: a
158
+ }, {
159
+ code: 'b',
160
+ value: b
161
+ }, {
162
+ code: '2',
163
+ value: 'rdamedia'
164
+ }]
165
+ };
166
+ return data;
167
+ }
168
+ }
169
+ function mapFormOfItemToField337B(formOfItem) {
170
+ (0, _utils.nvdebug)(`mapping ${formOfItem} to 337$b`);
171
+ const [result] = mappings337B.filter(row => row.formOfItem === formOfItem);
172
+ if (result) {
173
+ return result.rdacontent;
174
+ }
175
+ return 'z'; // undefined; // How about 'z'/unspecified. Currently done
176
+ }
177
+ //# sourceMappingURL=addMissingField337.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addMissingField337.js","names":["_utils","require","_field33XUtils","description","mappings337B","formOfItem","rdacontent","_default","validate","fix","record","nvdebug","newField","getMissing337","res","message","valid","insertField","msg","fieldToString","guessObjectsMissing337B","field008","get","value","guessMissing337B","typeOfRecord","getTypeOfRecord","fields007","some","f","mapFormOfItemToField337B","getFormOfItem","f337","undefined","b","catLang","getCatalogingLanguage","catLang2","a","map337CodeToTerm","data","tag","ind1","ind2","subfields","code","result","filter","row"],"sources":["../src/addMissingField337.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport {fieldToString, getCatalogingLanguage, nvdebug} from './utils';\nimport {getFormOfItem, map337CodeToTerm} from './field33XUtils';\n\nconst description = 'Add missing 337 field(s)';\n\n// Based on https://github.com/NatLibFi/USEMARCON-Cyrillux/blob/master/008-23-337a.tbl . Extended!\nconst mappings337B = [\n {formOfItem: ' ', rdacontent: 'n'}, // unmediated - käytettävissä ilman laitetta\n {formOfItem: '|', rdacontent: 'n'},\n {formOfItem: 'a', rdacontent: 'h'}, // microform\n {formOfItem: 'b', rdacontent: 'h'},\n {formOfItem: 'c', rdacontent: 'h'},\n {formOfItem: 'd', rdacontent: 'n'},\n {formOfItem: 'e', rdacontent: 'n'},\n {formOfItem: 'f', rdacontent: 'n'},\n {formOfItem: 'o', rdacontent: 'c'}, // computer\n {formOfItem: 'q', rdacontent: 'c'},\n {formOfItem: 'r', rdacontent: 'n'},\n {formOfItem: 's', rdacontent: 'c'}\n];\n\nexport default function () {\n\n return {\n description, validate, fix\n };\n\n function fix(record) {\n nvdebug(`FIX ${description}...`);\n const newField = getMissing337(record);\n const res = {message: [], fix: [], valid: true};\n if (newField) {\n record.insertField(newField);\n return res;\n }\n\n return res;\n }\n\n function validate(record) {\n nvdebug(`VALIDATE ${description}....`);\n const newField = getMissing337(record);\n if (!newField) {\n return {message: [], valid: true};\n }\n const msg = `${description}: '${fieldToString(newField)}'`;\n return {message: [msg], valid: false};\n }\n\n function guessObjectsMissing337B(record) {\n const [field008] = record.get('008');\n if (field008 && field008.value[33] === 'p') {\n return 'p'; // microscopic\n }\n return 'n'; // unmediated\n }\n\n function guessMissing337B(record) {\n const typeOfRecord = record.getTypeOfRecord();\n\n if (typeOfRecord === 'm') { // LDR/06=m/computer file\n return 'c'; // computer\n }\n if (typeOfRecord === 'o' || typeOfRecord === 'p') {\n return 'x'; // other\n }\n if (typeOfRecord === 'r') { // object\n return guessObjectsMissing337B(record);\n }\n const fields007 = record.get('007');\n\n // TO DO: type a/t + 245$h (not multimedia): use 007/00 based expection\n\n // 007/00 implies that 337$b=c (computer)\n if (typeOfRecord === 'g' || typeOfRecord === 'i' || typeOfRecord === 'j') {\n if (fields007.some(f => f.value[0] === 'c')) { // c=computer\n // i and j: should we check 007/05 (audio)=a as well?\n return 'c';\n }\n }\n\n if (typeOfRecord === 'g') {\n if (fields007.some(f => f.value[0] === 'g')) { // g=projected\n return 'g';\n }\n if (fields007.some(f => f.value[0] === 'm' || f.value[0] === 'v')) { // m=movie, v=videorecording (cyrillux maps videorecording to 'c'/computer, fix it there?)\n return 'v';\n }\n }\n\n if (typeOfRecord === 'i' || typeOfRecord === 'j') {\n // Ye olde stuff: 245$h might contain value 'Äänite', which returns 'a'.\n // NB! Cyrillux returns 'c'/com a bit more aggressively for j (music)\n return 's'; // audio\n }\n\n return mapFormOfItemToField337B(getFormOfItem(record));\n }\n\n function getMissing337(record) {\n const [f337] = record.get('337');\n if (f337) {\n // nvdebug(fieldToString(f337));\n return undefined;\n }\n\n const b = guessMissing337B(record) || 'z';\n\n const catLang = getCatalogingLanguage(record);\n const catLang2 = catLang ? catLang : 'fin';\n const a = map337CodeToTerm(b, catLang2);\n\n const data = {tag: '337', ind1: ' ', ind2: ' ', subfields: [\n {code: 'a', value: a},\n {code: 'b', value: b},\n {code: '2', value: 'rdamedia'}\n ]};\n\n return data;\n }\n}\n\nfunction mapFormOfItemToField337B(formOfItem) {\n nvdebug(`mapping ${formOfItem} to 337$b`);\n\n const [result] = mappings337B.filter(row => row.formOfItem === formOfItem);\n if (result) {\n return result.rdacontent;\n }\n return 'z'; // undefined; // How about 'z'/unspecified. Currently done\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+
3
+ var _chai = require("chai");
4
+ var _marcRecord = require("@natlibfi/marc-record");
5
+ var _addMissingField = _interopRequireDefault(require("./addMissingField337"));
6
+ var _fixura = require("@natlibfi/fixura");
7
+ var _fixugen = _interopRequireDefault(require("@natlibfi/fixugen"));
8
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ (0, _fixugen.default)({
10
+ callback,
11
+ path: [__dirname, '..', 'test-fixtures', 'addMissingField337'],
12
+ useMetadataFile: true,
13
+ recurse: false,
14
+ fixura: {
15
+ reader: _fixura.READERS.JSON
16
+ },
17
+ mocha: {
18
+ before: () => testValidatorFactory()
19
+ }
20
+ });
21
+ async function testValidatorFactory() {
22
+ const validator = await (0, _addMissingField.default)();
23
+ (0, _chai.expect)(validator).to.be.an('object').that.has.any.keys('description', 'validate');
24
+ (0, _chai.expect)(validator.description).to.be.a('string');
25
+ (0, _chai.expect)(validator.validate).to.be.a('function');
26
+ (0, _chai.expect)(validator.fix).to.be.a('function');
27
+ }
28
+ async function callback({
29
+ getFixture,
30
+ fix = false
31
+ }) {
32
+ const validator = await (0, _addMissingField.default)();
33
+ const record = new _marcRecord.MarcRecord(getFixture('record.json'));
34
+ const expectedResult = getFixture('expectedResult.json');
35
+ if (!fix) {
36
+ const result = await validator.validate(record);
37
+ (0, _chai.expect)(result).to.eql(expectedResult);
38
+ return;
39
+ }
40
+ await validator.fix(record);
41
+ (0, _chai.expect)(record).to.eql(expectedResult);
42
+ }
43
+ //# sourceMappingURL=addMissingField337.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addMissingField337.spec.js","names":["_chai","require","_marcRecord","_addMissingField","_interopRequireDefault","_fixura","_fixugen","obj","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","fix","getFixture","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/addMissingField337.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './addMissingField337';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'addMissingField337'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\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 expect(validator.fix).to.be.a('function');\n}\n\nasync function callback({getFixture, fix = false}) {\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\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,gBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AAA8C,SAAAG,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAE9C,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;AAEF,eAAeA,oBAAoBA,CAAA,EAAG;EACpC,MAAMC,SAAS,GAAG,MAAM,IAAAC,wBAAgB,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;EAC9C,IAAAT,YAAM,EAACF,SAAS,CAACa,GAAG,CAAC,CAACV,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAC3C;AAEA,eAAevB,QAAQA,CAAC;EAAC0B,UAAU;EAAED,GAAG,GAAG;AAAK,CAAC,EAAE;EACjD,MAAMb,SAAS,GAAG,MAAM,IAAAC,wBAAgB,EAAC,CAAC;EAC1C,MAAMc,MAAM,GAAG,IAAIC,sBAAU,CAACF,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMG,cAAc,GAAGH,UAAU,CAAC,qBAAqB,CAAC;EAExD,IAAI,CAACD,GAAG,EAAE;IACR,MAAMK,MAAM,GAAG,MAAMlB,SAAS,CAACY,QAAQ,CAACG,MAAM,CAAC;IAC/C,IAAAb,YAAM,EAACgB,MAAM,CAAC,CAACf,EAAE,CAACgB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMjB,SAAS,CAACa,GAAG,CAACE,MAAM,CAAC;EAC3B,IAAAb,YAAM,EAACa,MAAM,CAAC,CAACZ,EAAE,CAACgB,GAAG,CAACF,cAAc,CAAC;AACvC","ignoreList":[]}