@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,370 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = _default;
7
+ exports.fixLeader = fixLeader;
8
+ exports.removeFromOldCatalog = removeFromOldCatalog;
9
+ exports.removeOwnershipSubfield5 = removeOwnershipSubfield5;
10
+ var _clone = _interopRequireDefault(require("clone"));
11
+ var _marcRecord = require("@natlibfi/marc-record");
12
+ var _fix33X = _interopRequireDefault(require("./fix-33X"));
13
+ var _addMissingField = _interopRequireDefault(require("./addMissingField336"));
14
+ var _addMissingField2 = _interopRequireDefault(require("./addMissingField337"));
15
+ var _addMissingField3 = _interopRequireDefault(require("./addMissingField338"));
16
+ var _fixCountryCodes = _interopRequireDefault(require("./fix-country-codes"));
17
+ var _fixLanguageCodes = _interopRequireDefault(require("./fix-language-codes"));
18
+ var _fixRelatorTerms = _interopRequireDefault(require("./fixRelatorTerms"));
19
+ var _indicatorFixes = _interopRequireDefault(require("./indicator-fixes"));
20
+ var _punctuation = _interopRequireDefault(require("./punctuation2"));
21
+ var _normalizeQualifyingInformation = _interopRequireDefault(require("./normalize-qualifying-information"));
22
+ var _sortSubfields = require("./sortSubfields");
23
+ var _utils = require("./utils");
24
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
+ /*
26
+ * cyrillux-usemarcon-replacement.js -- implement and improve https://github.com/NatLibFi/USEMARCON-Cyrillux/tree/master
27
+ *
28
+ * Author(s): Nicholas Volk <nicholas.volk@helsinki.fi>
29
+ *
30
+ */
31
+
32
+ // import createDebugLogger from 'debug';
33
+
34
+ // const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/punctuation2');
35
+
36
+ const description = 'Replacement for Cyrillux usemarcon rules';
37
+
38
+ // Extended original list with 541, 561, 562, 583, 584
39
+ const dropTags = ['001', '003', '010', '012', '014', '015', '016', '019', '025', '029', '032', '035', '036', '037', '038', '042', '049', '051', '061', '068', '071', '074', '079', '090', '091', '092', '094', '095', '096', '097', '099', '249', '261', '262', '350', '400', '411', '541', '561', '562', '574', '575', '577', '578', '583', '584', '589', '590', '591', '592', '593', '594', '595', '596', '597', '598', '599', '653', '698', '741', '742', '744', '761', '790', '841', '842', '843', '844', '845', '850', '852', '853', '854', '855', '858', '859', '863', '864', '865', '866', '867', '868', '876', '877', '878', '882', '886', '887', '888', '890', '899'];
40
+ function _default() {
41
+ return {
42
+ description,
43
+ fix,
44
+ validate
45
+ };
46
+ function fix(record) {
47
+ (0, _utils.nvdebug)(`${description}: fix`);
48
+ realFix(record);
49
+ const res = {
50
+ message: [],
51
+ fix: [],
52
+ valid: true
53
+ };
54
+ return res;
55
+ }
56
+ function realFix(record) {
57
+ // Fix leader: standard fixes + update LDR/17 to '4'
58
+ fixLeader(record);
59
+ record.leader = `${record.leader.substring(0, 17)}4${record.leader.substring(18, 24)}`; // eslint-disable-line functional/immutable-data
60
+
61
+ // Remove unwanted fields:
62
+ record.fields = record.fields.filter(f => !dropTags.includes(f.tag)); // eslint-disable-line functional/immutable-data
63
+
64
+ record.fields.forEach(f => fieldSpecificStuff(f));
65
+ function fieldSpecificStuff(field) {
66
+ removeOwnershipSubfield5(field);
67
+ removeFromOldCatalog(field); // Remove LoC phrase "[from old catalog]" from srings
68
+ translateFieldToFinnish(field);
69
+ }
70
+ (0, _fixCountryCodes.default)().fix(record); // 008/15-17
71
+ (0, _fixLanguageCodes.default)().fix(record); // 008/35-37 AND 041 (note that all relevant subfield codes are fixed, not just $a)
72
+
73
+ (0, _normalizeQualifyingInformation.default)().fix(record); // 015, 020, 024 and 028
74
+
75
+ // Field 028: use $b$a, not $a$b:
76
+ const f028 = record.fields.filter(f => f.tag === '028');
77
+ f028.forEach(f => (0, _sortSubfields.sortAdjacentSubfields)(f));
78
+ fixField040(record); // All $b values are changed to 'mul'. As a side effect 33X$b=>$a mappings are in Finnish! Ok in this domain!
79
+
80
+ (0, _fixRelatorTerms.default)().fix(record);
81
+ (0, _fix33X.default)().fix(record); // 33X$a => 33X$a$b$2
82
+ (0, _addMissingField.default)().fix(record);
83
+ (0, _addMissingField2.default)().fix(record);
84
+ (0, _addMissingField3.default)().fix(record);
85
+ record.fields.forEach(f => fieldSpecificStuff2(f));
86
+ function fieldSpecificStuff2(field) {
87
+ removeSubfieldH(field); // only after 33X creation, as 245$h might be useful
88
+
89
+ field260To264s(field, record);
90
+
91
+ // NB! 300 (before or after 33X creation?)
92
+ field410To490And810(field, record);
93
+ field440To490And830(field, record);
94
+ // handle505(field); // not applying them usemarcon-cyrillux rules for field 505 as I can't understand their motivation.
95
+ }
96
+
97
+ // The fixer below implement Cyrillux rules such as 245I1 | 245I1 | If (Exists(@100) Or Exists(@110) Or Exists(@111) Or Exists(@130)) Then '1' Else '0' and plenty of other good stuff:
98
+ (0, _indicatorFixes.default)().fix(record);
99
+ (0, _punctuation.default)().fix(record);
100
+ const res = {
101
+ message: [],
102
+ fix: [],
103
+ valid: true
104
+ };
105
+ return res;
106
+ }
107
+
108
+ // Validation is currently done in subparts
109
+ function validate(record) {
110
+ (0, _utils.nvdebug)(`${description}: validate`);
111
+ const originalString = (0, _utils.recordToString)(record);
112
+ const clonedRecord = new _marcRecord.MarcRecord(record, {
113
+ subfieldValues: false
114
+ });
115
+ realFix(clonedRecord);
116
+ const modifiedString = (0, _utils.recordToString)(clonedRecord);
117
+ if (originalString === modifiedString) {
118
+ return {
119
+ message: [],
120
+ valid: true
121
+ };
122
+ }
123
+ return {
124
+ message: ['Record changed'],
125
+ valid: false
126
+ }; // Less than descriptive but will do...
127
+ }
128
+ }
129
+ function fixField040(record) {
130
+ const f040 = record.fields.filter(f => f.tag === '040');
131
+ const subfieldsBE = [{
132
+ code: 'b',
133
+ value: 'mul'
134
+ }, {
135
+ code: 'e',
136
+ value: 'rda'
137
+ }];
138
+
139
+ // Add 040 if there isn't one:
140
+ if (f040.length === 0) {
141
+ const data = {
142
+ tag: '040',
143
+ ind1: ' ',
144
+ ind2: ' ',
145
+ subfields: subfieldsBE
146
+ };
147
+ record.insertField(data);
148
+ return;
149
+ }
150
+ f040.forEach(f => fixField040Subfields(f));
151
+ function fixField040Subfields(field) {
152
+ field.subfields = field.subfields.filter(sf => !['b', 'e'].includes(sf.code)); // eslint-disable-line functional/immutable-data
153
+ field.subfields.push(subfieldsBE[0]); // eslint-disable-line functional/immutable-data
154
+ field.subfields.push(subfieldsBE[1]); // eslint-disable-line functional/immutable-data
155
+ (0, _sortSubfields.sortAdjacentSubfields)(field); // put $b and $e to their proper places
156
+ }
157
+ }
158
+ function removeFromOldCatalog(field) {
159
+ // See https://catalog.loc.gov/vwebv/ui/en_US/htdocs/help/faqs.html for motivation
160
+ field.subfields?.forEach(sf => removeFromOldCatalogFromSubfield(sf));
161
+ function removeFromOldCatalogFromSubfield(subfield) {
162
+ if (!subfield.value.includes('[from old catalog]')) {
163
+ return;
164
+ }
165
+ subfield.value = subfield.value.replace(/ *\[from old catalog\]/gui, ''); // eslint-disable-line functional/immutable-data
166
+ }
167
+ }
168
+ function removeSubfieldH(field) {
169
+ if (!field.subfields || !['245', '246', '247', '740', '760', '762', '765', '767', '770', '772', '773', '774', '775', '776', '777', '780', '785', '786', '787', '788'].includes(field.tag)) {
170
+ return;
171
+ }
172
+ const filteredFields = field.subfields.filter(sf => sf.code !== 'h');
173
+ if (filteredFields.length > 0) {
174
+ field.subfields = filteredFields; // eslint-disable-line functional/immutable-data
175
+ return;
176
+ }
177
+ }
178
+ function removeOwnershipSubfield5(field) {
179
+ if (!field.subfields || field.subfields.length === 0) {
180
+ return;
181
+ }
182
+ const remainingSubfields = field.subfields.filter(sf => sf.code !== '5');
183
+ if (remainingSubfields.length === 0) {
184
+ // sanity check/robustness
185
+ return;
186
+ }
187
+ field.subfields = remainingSubfields; // eslint-disable-line functional/immutable-data
188
+ }
189
+ function fixLeader(record) {
190
+ record.leader = `${record.leader.substring(0, 9)}a22${record.leader.substring(12, 18)}i${record.leader.substring(19, 20)}4500`; // eslint-disable-line functional/immutable-data
191
+ }
192
+ function field410To490And810(field, record) {
193
+ // might be generic... if so, move to utils...
194
+ if (field.tag !== '410') {
195
+ return;
196
+ }
197
+ const field810 = (0, _clone.default)(field);
198
+ field.tag = '490'; // eslint-disable-line functional/immutable-data
199
+ field.ind1 = '1'; // eslint-disable-line functional/immutable-data
200
+ field.ind2 = ' '; // eslint-disable-line functional/immutable-data
201
+ (0, _sortSubfields.sortAdjacentSubfields)(field);
202
+ // 490: Fix punctuation elsewhere. (Note that the current support is lagging...)
203
+
204
+ field810.tag = '810'; // eslint-disable-line functional/immutable-data
205
+ field810.ind2 = ' '; // eslint-disable-line functional/immutable-data
206
+ // 810: Fix punctuation elsewhere. (Note that the current support is lagging...)
207
+ record.insertField(field810);
208
+ }
209
+ function field440To490And830(field, record) {
210
+ // might be generic... if so, move to utils...
211
+ if (field.tag !== '440') {
212
+ return;
213
+ }
214
+ const field830 = (0, _clone.default)(field);
215
+ field.tag = '490'; // eslint-disable-line functional/immutable-data
216
+ field.ind1 = '1'; // eslint-disable-line functional/immutable-data
217
+ field.ind2 = ' '; // eslint-disable-line functional/immutable-data
218
+ // 490: Fix punctuation elsewhere. (Note that the current support is lagging...)
219
+ field830.tag = '830'; // eslint-disable-line functional/immutable-data
220
+ // 830: Fix punctuation elsewhere. (Note that the current support is lagging...)
221
+ record.insertField(field830);
222
+ }
223
+ function field260To264s(field, record) {
224
+ // might be generic... if so, move to utils...
225
+ // As per my quick reading of usemarcon-cyrillux
226
+ if (field.tag !== '260') {
227
+ return;
228
+ }
229
+ createCopyright264Field(field);
230
+ field.tag = '264'; // eslint-disable-line functional/immutable-data
231
+ field.ind1 = ' '; // eslint-disable-line functional/immutable-data
232
+ field.ind2 = '1'; // eslint-disable-line functional/immutable-data
233
+
234
+ // NB! Usemarcon does not handle 260$e$f$g => 264$a$b$c, so I'm not botherin with it either... (However, we could check our merge reducer code...)
235
+
236
+ function getCopyrightYear(string) {
237
+ if (string.match(/^(?:\[?[Ccp]|[^0-9]*(?:cop|©|℗))[^0-9]*(?:1[789][0-9][0-9]|20[0-2][0-9])[^0-9]*$/u)) {
238
+ return string.replace(/[^0-9]/ug, '');
239
+ }
240
+ return false;
241
+ }
242
+ field.subfields?.forEach(sf => field260To264Normalization(sf));
243
+ function field260To264Normalization(subfield) {
244
+ subfield.value = field260To264Normalization2(subfield); // eslint-disable-line functional/immutable-data
245
+ }
246
+ function createCopyright264Value(field) {
247
+ // Extract/split copyright year to a separate field:
248
+ const [c] = field.subfields.filter(sf => sf.code === 'c');
249
+ if (!c) {
250
+ return undefined;
251
+ }
252
+ const copyrightYear = getCopyrightYear(c.value);
253
+ if (!copyrightYear) {
254
+ return undefined;
255
+ }
256
+ const copType = c.value.match(/(?:^\[?p|℗)/u) ? '℗' : '©';
257
+ const returnValue = c.value.includes('[') ? `[${copType}${copyrightYear}]` : `${copType}${copyrightYear}`;
258
+ // Moidy the original value:
259
+ c.value = `[${copyrightYear}]`; // eslint-disable-line functional/immutable-data
260
+ return returnValue;
261
+ }
262
+ function createCopyright264Field(field) {
263
+ const c = createCopyright264Value(field);
264
+ if (!c) {
265
+ return undefined;
266
+ }
267
+ const data = {
268
+ 'tag': '264',
269
+ 'ind1': ' ',
270
+ 'ind2': '4',
271
+ 'subfields': [{
272
+ 'code': 'c',
273
+ 'value': c
274
+ }]
275
+ };
276
+ record.insertField(data);
277
+ }
278
+ function field260To264Normalization2(subfield) {
279
+ if (subfield.code === 'a') {
280
+ return subfield.value.replace(/\b[Ss]\. ?l\./u, 'Kustannuspaikka tuntematon');
281
+ }
282
+ if (subfield.code === 'b') {
283
+ return subfield.value.replace(/\b[Ss]\. ?n\./u, 'kustantaja tuntematon');
284
+ }
285
+ if (subfield.code === 'c') {
286
+ const year = getCopyrightYear(subfield.value);
287
+ if (year) {
288
+ const c = subfield.value.match(/(?:^p|℗)/u) ? 'p' : 'c';
289
+ if (subfield.value.includes('[')) {
290
+ return `${c}[${year}]`;
291
+ }
292
+ return `${c}${year}`;
293
+ }
294
+ return subfield.value.replace(/\b[Ss]\. ?a\./u, 'julkaisuaika tuntematon');
295
+ }
296
+ return subfield.value;
297
+ }
298
+ }
299
+
300
+ /*
301
+ function handle505(field) {
302
+ if (field.tag !== '505') {
303
+ return;
304
+ }
305
+ // Don't know how/why usemarcon-cyrillux is so sure about ind1...
306
+ field.ind1 = '0'; // eslint-disable-line functional/immutable-data
307
+ // usemarcon-cyrillux drops irrelevant subfields, so we do the same. However, we have included some control subfields in the kept side:
308
+ const keptSubfields = field.subfields.filter(sf => ['a', 'g', 'r', 't', 'u', '6', '8', '9'].includes(sf.code));
309
+
310
+ if (keptSubfields.some(sf => ['a', 'g', 'r', 't', 'u'].includes(sf.code))) {
311
+ field.subfields = keptSubfields; // eslint-disable-line functional/immutable-data
312
+ return;
313
+ }
314
+ }
315
+ */
316
+
317
+ function translateFieldToFinnish(field) {
318
+ if (!['020', '300'].includes(field.tag)) {
319
+ return;
320
+ }
321
+ field.subfields?.forEach(sf => translateSubfieldToFinnish(sf));
322
+ function translateSubfieldToFinnish(subfield) {
323
+ if (field.tag === '020' && ['a', 'q', 'z'].includes(subfield.code)) {
324
+ subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value)))); // eslint-disable-line functional/immutable-data
325
+ return;
326
+ }
327
+ if (field.tag === '300') {
328
+ subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value)))); // eslint-disable-line functional/immutable-data
329
+ return;
330
+ }
331
+ }
332
+ }
333
+ function expandEnglishAbbreviations(value) {
334
+ return value.replace(/\bbk\.\b/gui, 'book').replace(/chiefly col\./ui, 'chiefly color').replace(/col\. ill\./ui, 'color illustrations').replace(/diagrs\./ui, 'diagrams').replace(/\bhbk\.\b/gui, 'hardcover').replace(/\bhbk\b/gui, 'hardcover').
335
+ // expand to MTS-compliant form
336
+ replace(/\bill\./gui, 'illustrated').
337
+ // or illustrations (or Swedish "illustrerad" or...)
338
+ replace(/\billus\./gui, 'illustrated').
339
+ // or illustrations
340
+ replace(/incl\./gui, 'includes').replace(/fold\.? maps/gui, 'folded maps').
341
+ // replace(/\bmin\./gu, 'minutes').
342
+ // replace(/\bmin\b/gu, 'minutes').
343
+ replace(/\bp\.\b/gui, 'pages').replace(/\bp\b/gu, 'pages').replace(/\bpbk\.\b/gui, 'paperback').replace(/\bpbk\b/gui, 'paperback').
344
+ // expand to MTS-compliant form
345
+ replace(/\bports\./gui, 'portraits').replace('sd., col.', 'sound, color').replace(/ *\((?:chiefly col\.|chiefly color|some cols)\)/gui, '').replace(/\b1 hr\./gui, '1 hour');
346
+ }
347
+ function expandFinnishAbbreviations(value) {
348
+ return value.replace(/\bcn\. /gu, 'noin ').
349
+ // replace(/\bmin\./gu, 'minuuttia').
350
+ // replace(/\bmin\b/gu, 'minuuttia').
351
+ replace(/\bnid\./gu, 'nidottu').replace(/\bnid\b/gui, 'nidottu').replace(/\bsid\./gu, 'sidottu').replace(/\bsid\b/gui, 'sidottu').replace(/\bverkkojulk\.\b/gu, 'verkkojulkaisu').replace(/\bverkkojulk\b/gu, 'verkkojulkaisu').replace(/^\(([^)]+)\)$/u, '$1'); // eslint-disable-line prefer-named-capture-group
352
+ // <- removal of brackets above could use a better location
353
+ }
354
+ function expandSwedishAbbreviations(value) {
355
+ return value.replace(/\bca\. /gu, 'circa ').replace(/\bhft\./gui, 'häftad').replace(/\bhft\b/gui, 'häftad');
356
+ // replace(/\bmin\./gu, 'minuter').
357
+ // replace(/\bmin\b/gu, 'minuter');
358
+ }
359
+ function finnishTranslationsAndMappings(value) {
360
+ return value.replace('analog', 'analoginen').replace('approximately', 'noin').replace('audio discs', 'äänilevyä').replace('black and white', 'mustavalkoinen').replace(/\bcharts\b/gui, 'kaavioita').replace('chiefly color illustrations', 'pääosin värikuvitettu').replace('chiefly', 'pääosin').replace('color illustrations', 'värikuvitus').replace(/\bdigital\b/gui, 'digitaalinen').replace(/\belectronic book\b/gui, 'verkkoaineisto').replace(/\bfolded sheet\b/gui, 'taitelehti').replace(/\bhardback\b/gui, 'kovakantinen').replace(/\bhours\b/gui, 'tuntia').replace('illustrated', 'kuvitettu').replace(/illustration\b/gui, 'kuvitus').
361
+ // kuvitus/kuvitettu variation is taken from usemarcon-cyrillux...
362
+ replace('illustrations', 'kuvitettu').replace(/\binsert\b/gui, 'liite').replace(/\binserts\b/gui, 'liitteitä').replace('leaves of plates', 'kuvalehteä').replace(/\bmap\b/gui, 'kartta').replace(/\bmaps\b/gui, 'karttoja').
363
+ // or karttaa?
364
+ replace('minutes', 'minuuttia').replace('online resource', 'verkkoaineisto').replace('pages of plates', 'kuvalehteä').replace(/\bpages\b/gui, 'sivua').replace(/\bpaperback\b/gui, 'pehmeäkantinen').
365
+ // MTS alt
366
+ replace(/\bsoftcover\b/gui, 'pehmeäkantinen').
367
+ // MTS pref
368
+ replace('sound, color', 'äänellinen, värillinen').replace('sound cassettes', 'äänikasettia').replace('sound cassette', 'äänikasetti').replace('sound discs', 'äänilevyä').replace('sound disc', 'äänilevy').replace('unnumbered', 'numeroimatonta').replace(/\bverkkojulkaisu\b/gui, 'verkkoaineisto').replace('videodiscs', 'videolevyä').replace('videodisc', 'videolevy').replace(/\b1 hour\b/gui, '1 tunti');
369
+ }
370
+ //# sourceMappingURL=cyrillux-usemarcon-replacement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cyrillux-usemarcon-replacement.js","names":["_clone","_interopRequireDefault","require","_marcRecord","_fix33X","_addMissingField","_addMissingField2","_addMissingField3","_fixCountryCodes","_fixLanguageCodes","_fixRelatorTerms","_indicatorFixes","_punctuation","_normalizeQualifyingInformation","_sortSubfields","_utils","obj","__esModule","default","description","dropTags","_default","fix","validate","record","nvdebug","realFix","res","message","valid","fixLeader","leader","substring","fields","filter","f","includes","tag","forEach","fieldSpecificStuff","field","removeOwnershipSubfield5","removeFromOldCatalog","translateFieldToFinnish","fixCountryCodes","fixLanguageCodes","fixQualifyingInformation","f028","sortAdjacentSubfields","fixField040","fixRelatorTerms","fix33X","add336","add337","add338","fieldSpecificStuff2","removeSubfieldH","field260To264s","field410To490And810","field440To490And830","fixIndicators","fixPunctuation","originalString","recordToString","clonedRecord","MarcRecord","subfieldValues","modifiedString","f040","subfieldsBE","code","value","length","data","ind1","ind2","subfields","insertField","fixField040Subfields","sf","push","removeFromOldCatalogFromSubfield","subfield","replace","filteredFields","remainingSubfields","field810","clone","field830","createCopyright264Field","getCopyrightYear","string","match","field260To264Normalization","field260To264Normalization2","createCopyright264Value","c","undefined","copyrightYear","copType","returnValue","year","translateSubfieldToFinnish","finnishTranslationsAndMappings","expandFinnishAbbreviations","expandSwedishAbbreviations","expandEnglishAbbreviations"],"sources":["../src/cyrillux-usemarcon-replacement.js"],"sourcesContent":["/*\n* cyrillux-usemarcon-replacement.js -- implement and improve https://github.com/NatLibFi/USEMARCON-Cyrillux/tree/master\n*\n* Author(s): Nicholas Volk <nicholas.volk@helsinki.fi>\n*\n*/\n\nimport clone from 'clone';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport {default as fix33X} from './fix-33X';\nimport {default as add336} from './addMissingField336';\nimport {default as add337} from './addMissingField337';\nimport {default as add338} from './addMissingField338';\nimport {default as fixCountryCodes} from './fix-country-codes';\nimport {default as fixLanguageCodes} from './fix-language-codes';\nimport {default as fixRelatorTerms} from './fixRelatorTerms';\nimport {default as fixIndicators} from './indicator-fixes';\nimport {default as fixPunctuation} from './punctuation2';\nimport {default as fixQualifyingInformation} from './normalize-qualifying-information';\nimport {sortAdjacentSubfields} from './sortSubfields';\n\n\n// import createDebugLogger from 'debug';\nimport {nvdebug, recordToString} from './utils';\n\n// const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/punctuation2');\n\nconst description = 'Replacement for Cyrillux usemarcon rules';\n\n// Extended original list with 541, 561, 562, 583, 584\nconst dropTags = ['001', '003', '010', '012', '014', '015', '016', '019', '025', '029', '032', '035', '036', '037', '038', '042', '049', '051', '061', '068', '071', '074', '079', '090', '091', '092', '094', '095', '096', '097', '099', '249', '261', '262', '350', '400', '411', '541', '561', '562', '574', '575', '577', '578', '583', '584', '589', '590', '591', '592', '593', '594', '595', '596', '597', '598', '599', '653', '698', '741', '742', '744', '761', '790', '841', '842', '843', '844', '845', '850', '852', '853', '854', '855', '858', '859', '863', '864', '865', '866', '867', '868', '876', '877', '878', '882', '886', '887', '888', '890', '899'];\n\nexport default function () {\n return {\n description, fix, validate\n };\n\n function fix(record) {\n nvdebug(`${description}: fix`);\n realFix(record);\n const res = {message: [], fix: [], valid: true};\n return res;\n }\n\n function realFix(record) {\n // Fix leader: standard fixes + update LDR/17 to '4'\n fixLeader(record);\n record.leader = `${record.leader.substring(0, 17)}4${record.leader.substring(18, 24)}`; // eslint-disable-line functional/immutable-data\n\n // Remove unwanted fields:\n record.fields = record.fields.filter(f => !dropTags.includes(f.tag)); // eslint-disable-line functional/immutable-data\n\n record.fields.forEach(f => fieldSpecificStuff(f));\n\n function fieldSpecificStuff(field) {\n removeOwnershipSubfield5(field);\n removeFromOldCatalog(field); // Remove LoC phrase \"[from old catalog]\" from srings\n translateFieldToFinnish(field);\n }\n\n fixCountryCodes().fix(record); // 008/15-17\n fixLanguageCodes().fix(record); // 008/35-37 AND 041 (note that all relevant subfield codes are fixed, not just $a)\n\n fixQualifyingInformation().fix(record); // 015, 020, 024 and 028\n\n // Field 028: use $b$a, not $a$b:\n const f028 = record.fields.filter(f => f.tag === '028');\n f028.forEach(f => sortAdjacentSubfields(f));\n\n fixField040(record); // All $b values are changed to 'mul'. As a side effect 33X$b=>$a mappings are in Finnish! Ok in this domain!\n\n fixRelatorTerms().fix(record);\n\n fix33X().fix(record); // 33X$a => 33X$a$b$2\n add336().fix(record);\n add337().fix(record);\n add338().fix(record);\n\n record.fields.forEach(f => fieldSpecificStuff2(f));\n\n function fieldSpecificStuff2(field) {\n removeSubfieldH(field); // only after 33X creation, as 245$h might be useful\n\n field260To264s(field, record);\n\n // NB! 300 (before or after 33X creation?)\n field410To490And810(field, record);\n field440To490And830(field, record);\n // handle505(field); // not applying them usemarcon-cyrillux rules for field 505 as I can't understand their motivation.\n\n }\n\n // The fixer below implement Cyrillux rules such as 245I1 | 245I1 | If (Exists(@100) Or Exists(@110) Or Exists(@111) Or Exists(@130)) Then '1' Else '0' and plenty of other good stuff:\n fixIndicators().fix(record);\n\n fixPunctuation().fix(record);\n\n const res = {message: [], fix: [], valid: true};\n return res;\n }\n\n // Validation is currently done in subparts\n function validate(record) {\n nvdebug(`${description}: validate`);\n const originalString = recordToString(record);\n const clonedRecord = new MarcRecord(record, {subfieldValues: false});\n realFix(clonedRecord);\n const modifiedString = recordToString(clonedRecord);\n\n if (originalString === modifiedString) {\n return {message: [], valid: true};\n }\n\n return {message: ['Record changed'], valid: false}; // Less than descriptive but will do...\n\n }\n}\n\nfunction fixField040(record) {\n const f040 = record.fields.filter(f => f.tag === '040');\n\n const subfieldsBE = [\n {code: 'b', value: 'mul'},\n {code: 'e', value: 'rda'}\n ];\n\n // Add 040 if there isn't one:\n if (f040.length === 0) {\n const data = {tag: '040', ind1: ' ', ind2: ' ', subfields: subfieldsBE};\n\n record.insertField(data);\n return;\n }\n\n f040.forEach(f => fixField040Subfields(f));\n\n function fixField040Subfields(field) {\n field.subfields = field.subfields.filter(sf => !['b', 'e'].includes(sf.code)); // eslint-disable-line functional/immutable-data\n field.subfields.push(subfieldsBE[0]); // eslint-disable-line functional/immutable-data\n field.subfields.push(subfieldsBE[1]); // eslint-disable-line functional/immutable-data\n sortAdjacentSubfields(field); // put $b and $e to their proper places\n }\n\n}\n\nexport function removeFromOldCatalog(field) {\n // See https://catalog.loc.gov/vwebv/ui/en_US/htdocs/help/faqs.html for motivation\n field.subfields?.forEach(sf => removeFromOldCatalogFromSubfield(sf));\n\n function removeFromOldCatalogFromSubfield(subfield) {\n if (!subfield.value.includes('[from old catalog]')) {\n return;\n }\n subfield.value = subfield.value.replace(/ *\\[from old catalog\\]/gui, ''); // eslint-disable-line functional/immutable-data\n }\n}\n\nfunction removeSubfieldH(field) {\n if (!field.subfields || !['245', '246', '247', '740', '760', '762', '765', '767', '770', '772', '773', '774', '775', '776', '777', '780', '785', '786', '787', '788'].includes(field.tag)) {\n return;\n }\n\n const filteredFields = field.subfields.filter(sf => sf.code !== 'h');\n if (filteredFields.length > 0) {\n field.subfields = filteredFields; // eslint-disable-line functional/immutable-data\n return;\n }\n\n}\n\nexport function removeOwnershipSubfield5(field) {\n if (!field.subfields || field.subfields.length === 0) {\n return;\n }\n const remainingSubfields = field.subfields.filter(sf => sf.code !== '5');\n if (remainingSubfields.length === 0) { // sanity check/robustness\n return;\n }\n field.subfields = remainingSubfields; // eslint-disable-line functional/immutable-data\n}\n\nexport function fixLeader(record) {\n record.leader = `${record.leader.substring(0, 9)}a22${record.leader.substring(12, 18)}i${record.leader.substring(19, 20)}4500`; // eslint-disable-line functional/immutable-data\n}\n\nfunction field410To490And810(field, record) { // might be generic... if so, move to utils...\n if (field.tag !== '410') {\n return;\n }\n\n const field810 = clone(field);\n\n field.tag = '490'; // eslint-disable-line functional/immutable-data\n field.ind1 = '1'; // eslint-disable-line functional/immutable-data\n field.ind2 = ' '; // eslint-disable-line functional/immutable-data\n sortAdjacentSubfields(field);\n // 490: Fix punctuation elsewhere. (Note that the current support is lagging...)\n\n\n field810.tag = '810'; // eslint-disable-line functional/immutable-data\n field810.ind2 = ' '; // eslint-disable-line functional/immutable-data\n // 810: Fix punctuation elsewhere. (Note that the current support is lagging...)\n record.insertField(field810);\n}\n\nfunction field440To490And830(field, record) { // might be generic... if so, move to utils...\n if (field.tag !== '440') {\n return;\n }\n\n const field830 = clone(field);\n\n field.tag = '490'; // eslint-disable-line functional/immutable-data\n field.ind1 = '1'; // eslint-disable-line functional/immutable-data\n field.ind2 = ' '; // eslint-disable-line functional/immutable-data\n // 490: Fix punctuation elsewhere. (Note that the current support is lagging...)\n field830.tag = '830'; // eslint-disable-line functional/immutable-data\n // 830: Fix punctuation elsewhere. (Note that the current support is lagging...)\n record.insertField(field830);\n}\n\n\nfunction field260To264s(field, record) { // might be generic... if so, move to utils...\n // As per my quick reading of usemarcon-cyrillux\n if (field.tag !== '260') {\n return;\n }\n\n createCopyright264Field(field);\n\n field.tag = '264'; // eslint-disable-line functional/immutable-data\n field.ind1 = ' '; // eslint-disable-line functional/immutable-data\n field.ind2 = '1'; // eslint-disable-line functional/immutable-data\n\n // NB! Usemarcon does not handle 260$e$f$g => 264$a$b$c, so I'm not botherin with it either... (However, we could check our merge reducer code...)\n\n function getCopyrightYear(string) {\n if (string.match(/^(?:\\[?[Ccp]|[^0-9]*(?:cop|©|℗))[^0-9]*(?:1[789][0-9][0-9]|20[0-2][0-9])[^0-9]*$/u)) {\n return string.replace(/[^0-9]/ug, '');\n }\n return false;\n }\n\n field.subfields?.forEach(sf => field260To264Normalization(sf));\n\n function field260To264Normalization(subfield) {\n subfield.value = field260To264Normalization2(subfield); // eslint-disable-line functional/immutable-data\n }\n\n function createCopyright264Value(field) {\n // Extract/split copyright year to a separate field:\n const [c] = field.subfields.filter(sf => sf.code === 'c');\n if (!c) {\n return undefined;\n }\n const copyrightYear = getCopyrightYear(c.value);\n if (!copyrightYear) {\n return undefined;\n }\n const copType = c.value.match(/(?:^\\[?p|℗)/u) ? '℗' : '©';\n const returnValue = c.value.includes('[') ? `[${copType}${copyrightYear}]` : `${copType}${copyrightYear}`;\n // Moidy the original value:\n c.value = `[${copyrightYear}]`; // eslint-disable-line functional/immutable-data\n return returnValue;\n }\n\n function createCopyright264Field(field) {\n const c = createCopyright264Value(field);\n if (!c) {\n return undefined;\n }\n const data = {'tag': '264', 'ind1': ' ', 'ind2': '4', 'subfields': [{'code': 'c', 'value': c}]};\n record.insertField(data);\n }\n\n function field260To264Normalization2(subfield) {\n if (subfield.code === 'a') {\n return subfield.value.replace(/\\b[Ss]\\. ?l\\./u, 'Kustannuspaikka tuntematon');\n }\n if (subfield.code === 'b') {\n return subfield.value.replace(/\\b[Ss]\\. ?n\\./u, 'kustantaja tuntematon');\n }\n if (subfield.code === 'c') {\n const year = getCopyrightYear(subfield.value);\n if (year) {\n const c = subfield.value.match(/(?:^p|℗)/u) ? 'p' : 'c';\n if (subfield.value.includes('[')) {\n return `${c}[${year}]`;\n }\n return `${c}${year}`;\n }\n return subfield.value.replace(/\\b[Ss]\\. ?a\\./u, 'julkaisuaika tuntematon');\n }\n return subfield.value;\n }\n\n\n}\n\n/*\nfunction handle505(field) {\n if (field.tag !== '505') {\n return;\n }\n // Don't know how/why usemarcon-cyrillux is so sure about ind1...\n field.ind1 = '0'; // eslint-disable-line functional/immutable-data\n // usemarcon-cyrillux drops irrelevant subfields, so we do the same. However, we have included some control subfields in the kept side:\n const keptSubfields = field.subfields.filter(sf => ['a', 'g', 'r', 't', 'u', '6', '8', '9'].includes(sf.code));\n\n if (keptSubfields.some(sf => ['a', 'g', 'r', 't', 'u'].includes(sf.code))) {\n field.subfields = keptSubfields; // eslint-disable-line functional/immutable-data\n return;\n }\n}\n*/\n\nfunction translateFieldToFinnish(field) {\n if (!['020', '300'].includes(field.tag)) {\n return;\n }\n field.subfields?.forEach(sf => translateSubfieldToFinnish(sf));\n\n function translateSubfieldToFinnish(subfield) {\n if (field.tag === '020' && ['a', 'q', 'z'].includes(subfield.code)) {\n subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value)))); // eslint-disable-line functional/immutable-data\n return;\n }\n if (field.tag === '300') {\n subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value)))); // eslint-disable-line functional/immutable-data\n return;\n }\n }\n}\n\nfunction expandEnglishAbbreviations(value) {\n return value.replace(/\\bbk\\.\\b/gui, 'book').\n replace(/chiefly col\\./ui, 'chiefly color').\n replace(/col\\. ill\\./ui, 'color illustrations').\n replace(/diagrs\\./ui, 'diagrams').\n replace(/\\bhbk\\.\\b/gui, 'hardcover').replace(/\\bhbk\\b/gui, 'hardcover'). // expand to MTS-compliant form\n replace(/\\bill\\./gui, 'illustrated'). // or illustrations (or Swedish \"illustrerad\" or...)\n replace(/\\billus\\./gui, 'illustrated'). // or illustrations\n replace(/incl\\./gui, 'includes').\n replace(/fold\\.? maps/gui, 'folded maps').\n // replace(/\\bmin\\./gu, 'minutes').\n // replace(/\\bmin\\b/gu, 'minutes').\n replace(/\\bp\\.\\b/gui, 'pages').replace(/\\bp\\b/gu, 'pages').\n replace(/\\bpbk\\.\\b/gui, 'paperback').replace(/\\bpbk\\b/gui, 'paperback'). // expand to MTS-compliant form\n replace(/\\bports\\./gui, 'portraits').\n replace('sd., col.', 'sound, color').\n replace(/ *\\((?:chiefly col\\.|chiefly color|some cols)\\)/gui, '').\n replace(/\\b1 hr\\./gui, '1 hour');\n}\n\nfunction expandFinnishAbbreviations(value) {\n return value.replace(/\\bcn\\. /gu, 'noin ').\n // replace(/\\bmin\\./gu, 'minuuttia').\n // replace(/\\bmin\\b/gu, 'minuuttia').\n replace(/\\bnid\\./gu, 'nidottu').replace(/\\bnid\\b/gui, 'nidottu').\n replace(/\\bsid\\./gu, 'sidottu').replace(/\\bsid\\b/gui, 'sidottu').\n replace(/\\bverkkojulk\\.\\b/gu, 'verkkojulkaisu').replace(/\\bverkkojulk\\b/gu, 'verkkojulkaisu').\n replace(/^\\(([^)]+)\\)$/u, '$1'); // eslint-disable-line prefer-named-capture-group\n // <- removal of brackets above could use a better location\n}\n\nfunction expandSwedishAbbreviations(value) {\n return value.replace(/\\bca\\. /gu, 'circa ').\n replace(/\\bhft\\./gui, 'häftad').replace(/\\bhft\\b/gui, 'häftad');\n // replace(/\\bmin\\./gu, 'minuter').\n // replace(/\\bmin\\b/gu, 'minuter');\n}\n\nfunction finnishTranslationsAndMappings(value) {\n return value.replace('analog', 'analoginen').\n replace('approximately', 'noin').\n replace('audio discs', 'äänilevyä').\n replace('black and white', 'mustavalkoinen').\n replace(/\\bcharts\\b/gui, 'kaavioita').\n replace('chiefly color illustrations', 'pääosin värikuvitettu').\n replace('chiefly', 'pääosin').\n replace('color illustrations', 'värikuvitus').\n replace(/\\bdigital\\b/gui, 'digitaalinen').\n replace(/\\belectronic book\\b/gui, 'verkkoaineisto').\n replace(/\\bfolded sheet\\b/gui, 'taitelehti').\n replace(/\\bhardback\\b/gui, 'kovakantinen').\n replace(/\\bhours\\b/gui, 'tuntia').\n replace('illustrated', 'kuvitettu').\n replace(/illustration\\b/gui, 'kuvitus'). // kuvitus/kuvitettu variation is taken from usemarcon-cyrillux...\n replace('illustrations', 'kuvitettu').\n replace(/\\binsert\\b/gui, 'liite').\n replace(/\\binserts\\b/gui, 'liitteitä').\n replace('leaves of plates', 'kuvalehteä').\n replace(/\\bmap\\b/gui, 'kartta').\n replace(/\\bmaps\\b/gui, 'karttoja'). // or karttaa?\n replace('minutes', 'minuuttia').\n replace('online resource', 'verkkoaineisto').\n replace('pages of plates', 'kuvalehteä').\n replace(/\\bpages\\b/gui, 'sivua').\n replace(/\\bpaperback\\b/gui, 'pehmeäkantinen'). // MTS alt\n replace(/\\bsoftcover\\b/gui, 'pehmeäkantinen'). // MTS pref\n replace('sound, color', 'äänellinen, värillinen').\n replace('sound cassettes', 'äänikasettia').replace('sound cassette', 'äänikasetti').\n replace('sound discs', 'äänilevyä').replace('sound disc', 'äänilevy').\n replace('unnumbered', 'numeroimatonta').\n replace(/\\bverkkojulkaisu\\b/gui, 'verkkoaineisto').\n replace('videodiscs', 'videolevyä').\n replace('videodisc', 'videolevy').\n replace(/\\b1 hour\\b/gui, '1 tunti');\n\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ var _chai = require("chai");
4
+ var _marcRecord = require("@natlibfi/marc-record");
5
+ var _cyrilluxUsemarconReplacement = _interopRequireDefault(require("./cyrillux-usemarcon-replacement"));
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', 'cyrillux-usemarcon-replacement'],
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, _cyrilluxUsemarconReplacement.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, _cyrilluxUsemarconReplacement.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=cyrillux-usemarcon-replacement.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cyrillux-usemarcon-replacement.spec.js","names":["_chai","require","_marcRecord","_cyrilluxUsemarconReplacement","_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/cyrillux-usemarcon-replacement.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './cyrillux-usemarcon-replacement';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'cyrillux-usemarcon-replacement'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\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,6BAAA,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,gCAAgC,CAAC;EAC1EC,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;AAGF,eAAeA,oBAAoBA,CAAA,EAAG;EACpC,MAAMC,SAAS,GAAG,MAAM,IAAAC,qCAAgB,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,qCAAgB,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":[]}