@natlibfi/marc-record-validators-melinda 11.6.7 → 12.0.0-alpha.12

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 (563) hide show
  1. package/.github/workflows/{melinda-node-tests.yml → melinda-node-tests-and-publish.yml} +37 -12
  2. package/dist/access-rights.js +63 -91
  3. package/dist/access-rights.js.map +7 -1
  4. package/dist/access-rights.test.js +137 -0
  5. package/dist/access-rights.test.js.map +7 -0
  6. package/dist/addMissingField041.js +21 -53
  7. package/dist/addMissingField041.js.map +7 -1
  8. package/dist/addMissingField041.test.js +39 -0
  9. package/dist/addMissingField041.test.js.map +7 -0
  10. package/dist/addMissingField336.js +99 -191
  11. package/dist/addMissingField336.js.map +7 -1
  12. package/dist/addMissingField336.test.js +39 -0
  13. package/dist/addMissingField336.test.js.map +7 -0
  14. package/dist/addMissingField337.js +63 -132
  15. package/dist/addMissingField337.js.map +7 -1
  16. package/dist/addMissingField337.test.js +39 -0
  17. package/dist/addMissingField337.test.js.map +7 -0
  18. package/dist/addMissingField338.js +147 -253
  19. package/dist/addMissingField338.js.map +7 -1
  20. package/dist/addMissingField338.test.js +39 -0
  21. package/dist/addMissingField338.test.js.map +7 -0
  22. package/dist/cyrillux-usemarcon-replacement.js +119 -272
  23. package/dist/cyrillux-usemarcon-replacement.js.map +7 -1
  24. package/dist/cyrillux-usemarcon-replacement.test.js +43 -0
  25. package/dist/cyrillux-usemarcon-replacement.test.js.map +7 -0
  26. package/dist/cyrillux.js +119 -223
  27. package/dist/cyrillux.js.map +7 -1
  28. package/dist/cyrillux.test.js +39 -0
  29. package/dist/cyrillux.test.js.map +7 -0
  30. package/dist/disambiguateSeriesStatements.js +40 -81
  31. package/dist/disambiguateSeriesStatements.js.map +7 -1
  32. package/dist/disambiguateSeriesStatements.test.js +44 -0
  33. package/dist/disambiguateSeriesStatements.test.js.map +7 -0
  34. package/dist/double-commas.js +7 -14
  35. package/dist/double-commas.js.map +7 -1
  36. package/dist/double-commas.test.js +48 -0
  37. package/dist/double-commas.test.js.map +7 -0
  38. package/dist/duplicates-ind1.js +10 -31
  39. package/dist/duplicates-ind1.js.map +7 -1
  40. package/dist/duplicates-ind1.test.js +40 -0
  41. package/dist/duplicates-ind1.test.js.map +7 -0
  42. package/dist/empty-fields.js +10 -22
  43. package/dist/empty-fields.js.map +7 -1
  44. package/dist/empty-fields.test.js +129 -0
  45. package/dist/empty-fields.test.js.map +7 -0
  46. package/dist/ending-punctuation-conf.js +873 -769
  47. package/dist/ending-punctuation-conf.js.map +7 -1
  48. package/dist/ending-punctuation.js +156 -169
  49. package/dist/ending-punctuation.js.map +7 -1
  50. package/dist/ending-punctuation.test.js +2385 -0
  51. package/dist/ending-punctuation.test.js.map +7 -0
  52. package/dist/ending-whitespace.js +10 -35
  53. package/dist/ending-whitespace.js.map +7 -1
  54. package/dist/ending-whitespace.test.js +38 -0
  55. package/dist/ending-whitespace.test.js.map +7 -0
  56. package/dist/field-008-18-34-character-groups.js +40 -125
  57. package/dist/field-008-18-34-character-groups.js.map +7 -1
  58. package/dist/field-008-18-34-character-groups.test.js +45 -0
  59. package/dist/field-008-18-34-character-groups.test.js.map +7 -0
  60. package/dist/field-505-separators.js +19 -39
  61. package/dist/field-505-separators.js.map +7 -1
  62. package/dist/field-505-separators.test.js +45 -0
  63. package/dist/field-505-separators.test.js.map +7 -0
  64. package/dist/field-521-fix.js +19 -47
  65. package/dist/field-521-fix.js.map +7 -1
  66. package/dist/field-521-fix.test.js +44 -0
  67. package/dist/field-521-fix.test.js.map +7 -0
  68. package/dist/field-exclusion.js +37 -91
  69. package/dist/field-exclusion.js.map +7 -1
  70. package/dist/field-exclusion.test.js +821 -0
  71. package/dist/field-exclusion.test.js.map +7 -0
  72. package/dist/field-structure.js +52 -104
  73. package/dist/field-structure.js.map +7 -1
  74. package/dist/field-structure.test.js +587 -0
  75. package/dist/field-structure.test.js.map +7 -0
  76. package/dist/field33XUtils.js +119 -503
  77. package/dist/field33XUtils.js.map +7 -1
  78. package/dist/fields-present.js +11 -23
  79. package/dist/fields-present.js.map +7 -1
  80. package/dist/fields-present.test.js +95 -0
  81. package/dist/fields-present.test.js.map +7 -0
  82. package/dist/fix-33X.js +393 -431
  83. package/dist/fix-33X.js.map +7 -1
  84. package/dist/fix-33X.test.js +39 -0
  85. package/dist/fix-33X.test.js.map +7 -0
  86. package/dist/fix-country-codes.js +20 -50
  87. package/dist/fix-country-codes.js.map +7 -1
  88. package/dist/fix-country-codes.test.js +44 -0
  89. package/dist/fix-country-codes.test.js.map +7 -0
  90. package/dist/fix-language-codes.js +23 -53
  91. package/dist/fix-language-codes.js.map +7 -1
  92. package/dist/fix-language-codes.test.js +38 -0
  93. package/dist/fix-language-codes.test.js.map +7 -0
  94. package/dist/fixRelatorTerms.js +82 -209
  95. package/dist/fixRelatorTerms.js.map +7 -1
  96. package/dist/fixRelatorTerms.test.js +44 -0
  97. package/dist/fixRelatorTerms.test.js.map +7 -0
  98. package/dist/fixed-fields.js +21 -30
  99. package/dist/fixed-fields.js.map +7 -1
  100. package/dist/fixed-fields.test.js +87 -0
  101. package/dist/fixed-fields.test.js.map +7 -0
  102. package/dist/identical-fields.js +8 -24
  103. package/dist/identical-fields.js.map +7 -1
  104. package/dist/identical-fields.test.js +119 -0
  105. package/dist/identical-fields.test.js.map +7 -0
  106. package/dist/index.js +182 -413
  107. package/dist/index.js.map +7 -1
  108. package/dist/indicator-fixes.js +66 -94
  109. package/dist/indicator-fixes.js.map +7 -1
  110. package/dist/indicator-fixes.test.js +42 -0
  111. package/dist/indicator-fixes.test.js.map +7 -0
  112. package/dist/isbn-issn.js +71 -128
  113. package/dist/isbn-issn.js.map +7 -1
  114. package/dist/isbn-issn.test.js +398 -0
  115. package/dist/isbn-issn.test.js.map +7 -0
  116. package/dist/item-language.js +32 -65
  117. package/dist/item-language.js.map +7 -1
  118. package/dist/item-language.test.js +322 -0
  119. package/dist/item-language.test.js.map +7 -0
  120. package/dist/melindaCustomMergeFields.js +5182 -11233
  121. package/dist/melindaCustomMergeFields.js.map +7 -1
  122. package/dist/merge-fields/controlSubfields.js +75 -142
  123. package/dist/merge-fields/controlSubfields.js.map +7 -1
  124. package/dist/merge-fields/counterpartField.js +187 -379
  125. package/dist/merge-fields/counterpartField.js.map +7 -1
  126. package/dist/merge-fields/dataProvenance.js +29 -0
  127. package/dist/merge-fields/dataProvenance.js.map +7 -0
  128. package/dist/merge-fields/index.js +25 -50
  129. package/dist/merge-fields/index.js.map +7 -1
  130. package/dist/merge-fields/mergableIndicator.js +18 -51
  131. package/dist/merge-fields/mergableIndicator.js.map +7 -1
  132. package/dist/merge-fields/mergableTag.js +78 -30
  133. package/dist/merge-fields/mergableTag.js.map +7 -1
  134. package/dist/merge-fields/mergeConfig.js +66 -171
  135. package/dist/merge-fields/mergeConfig.js.map +7 -1
  136. package/dist/merge-fields/mergeConstraints.js +323 -1214
  137. package/dist/merge-fields/mergeConstraints.js.map +7 -1
  138. package/dist/merge-fields/mergeField.js +47 -111
  139. package/dist/merge-fields/mergeField.js.map +7 -1
  140. package/dist/merge-fields/mergeIndicator.js +64 -118
  141. package/dist/merge-fields/mergeIndicator.js.map +7 -1
  142. package/dist/merge-fields/mergeOrAddPostprocess.js +14 -38
  143. package/dist/merge-fields/mergeOrAddPostprocess.js.map +7 -1
  144. package/dist/merge-fields/mergeOrAddSubfield.js +62 -104
  145. package/dist/merge-fields/mergeOrAddSubfield.js.map +7 -1
  146. package/dist/merge-fields/mergeSubfield.js +47 -95
  147. package/dist/merge-fields/mergeSubfield.js.map +7 -1
  148. package/dist/merge-fields/removeDuplicateSubfields.js +18 -31
  149. package/dist/merge-fields/removeDuplicateSubfields.js.map +7 -1
  150. package/dist/merge-fields/worldKnowledge.js +15 -40
  151. package/dist/merge-fields/worldKnowledge.js.map +7 -1
  152. package/dist/merge-fields.test.js +46 -0
  153. package/dist/merge-fields.test.js.map +7 -0
  154. package/dist/mergeField500Lisapainokset.js +27 -56
  155. package/dist/mergeField500Lisapainokset.js.map +7 -1
  156. package/dist/mergeField500Lisapainokset.test.js +44 -0
  157. package/dist/mergeField500Lisapainokset.test.js.map +7 -0
  158. package/dist/mergeRelatorTermFields.js +33 -69
  159. package/dist/mergeRelatorTermFields.js.map +7 -1
  160. package/dist/mergeRelatorTermFields.test.js +44 -0
  161. package/dist/mergeRelatorTermFields.test.js.map +7 -0
  162. package/dist/modernize-502.js +23 -55
  163. package/dist/modernize-502.js.map +7 -1
  164. package/dist/modernize-502.test.js +38 -0
  165. package/dist/modernize-502.test.js.map +7 -0
  166. package/dist/multiple-subfield-0.js +23 -48
  167. package/dist/multiple-subfield-0.js.map +7 -1
  168. package/dist/multiple-subfield-0.test.js +44 -0
  169. package/dist/multiple-subfield-0.test.js.map +7 -0
  170. package/dist/non-breaking-space.js +11 -32
  171. package/dist/non-breaking-space.js.map +7 -1
  172. package/dist/non-breaking-space.test.js +38 -0
  173. package/dist/non-breaking-space.test.js.map +7 -0
  174. package/dist/normalize-dashes.js +18 -37
  175. package/dist/normalize-dashes.js.map +7 -1
  176. package/dist/normalize-dashes.test.js +44 -0
  177. package/dist/normalize-dashes.test.js.map +7 -0
  178. package/dist/normalize-identifiers.js +54 -140
  179. package/dist/normalize-identifiers.js.map +7 -1
  180. package/dist/normalize-identifiers.test.js +44 -0
  181. package/dist/normalize-identifiers.test.js.map +7 -0
  182. package/dist/normalize-qualifying-information.js +23 -48
  183. package/dist/normalize-qualifying-information.js.map +7 -1
  184. package/dist/normalize-qualifying-information.test.js +44 -0
  185. package/dist/normalize-qualifying-information.test.js.map +7 -0
  186. package/dist/normalize-utf8-diacritics.js +19 -105
  187. package/dist/normalize-utf8-diacritics.js.map +7 -1
  188. package/dist/normalize-utf8-diacritics.test.js +44 -0
  189. package/dist/normalize-utf8-diacritics.test.js.map +7 -0
  190. package/dist/normalizeFieldForComparison.js +91 -158
  191. package/dist/normalizeFieldForComparison.js.map +7 -1
  192. package/dist/normalizeSubfieldValueForComparison.js +37 -77
  193. package/dist/normalizeSubfieldValueForComparison.js.map +7 -1
  194. package/dist/prepublicationUtils.js +58 -111
  195. package/dist/prepublicationUtils.js.map +7 -1
  196. package/dist/punctuation/index.js +56 -72
  197. package/dist/punctuation/index.js.map +7 -1
  198. package/dist/punctuation/rules/aut.js +372 -331
  199. package/dist/punctuation/rules/aut.js.map +7 -1
  200. package/dist/punctuation/rules/bib.js +420 -373
  201. package/dist/punctuation/rules/bib.js.map +7 -1
  202. package/dist/punctuation/rules/index.js +7 -21
  203. package/dist/punctuation/rules/index.js.map +7 -1
  204. package/dist/punctuation.test.js +44 -0
  205. package/dist/punctuation.test.js.map +7 -0
  206. package/dist/punctuation2.js +259 -802
  207. package/dist/punctuation2.js.map +7 -1
  208. package/dist/punctuation2.test.js +44 -0
  209. package/dist/punctuation2.test.js.map +7 -0
  210. package/dist/reindexSubfield6OccurenceNumbers.js +61 -96
  211. package/dist/reindexSubfield6OccurenceNumbers.js.map +7 -1
  212. package/dist/reindexSubfield6OccurenceNumbers.test.js +44 -0
  213. package/dist/reindexSubfield6OccurenceNumbers.test.js.map +7 -0
  214. package/dist/removeDuplicateDataFields.js +102 -202
  215. package/dist/removeDuplicateDataFields.js.map +7 -1
  216. package/dist/removeDuplicateDataFields.test.js +44 -0
  217. package/dist/removeDuplicateDataFields.test.js.map +7 -0
  218. package/dist/removeInferiorDataFields.js +104 -227
  219. package/dist/removeInferiorDataFields.js.map +7 -1
  220. package/dist/removeInferiorDataFields.test.js +44 -0
  221. package/dist/removeInferiorDataFields.test.js.map +7 -0
  222. package/dist/resolvable-ext-references-melinda.js +25 -60
  223. package/dist/resolvable-ext-references-melinda.js.map +7 -1
  224. package/dist/resolvable-ext-references-melinda.test.js +160 -0
  225. package/dist/resolvable-ext-references-melinda.test.js.map +7 -0
  226. package/dist/resolveOrphanedSubfield6s.js +32 -63
  227. package/dist/resolveOrphanedSubfield6s.js.map +7 -1
  228. package/dist/resolveOrphanedSubfield6s.test.js +44 -0
  229. package/dist/resolveOrphanedSubfield6s.test.js.map +7 -0
  230. package/dist/sanitize-vocabulary-source-codes.js +27 -55
  231. package/dist/sanitize-vocabulary-source-codes.js.map +7 -1
  232. package/dist/sanitize-vocabulary-source-codes.test.js +45 -0
  233. package/dist/sanitize-vocabulary-source-codes.test.js.map +7 -0
  234. package/dist/sort-tags.js +13 -25
  235. package/dist/sort-tags.js.map +7 -1
  236. package/dist/sort-tags.test.js +261 -0
  237. package/dist/sort-tags.test.js.map +7 -0
  238. package/dist/sortFields.js +152 -222
  239. package/dist/sortFields.js.map +7 -1
  240. package/dist/sortFields.test.js +44 -0
  241. package/dist/sortFields.test.js.map +7 -0
  242. package/dist/sortRelatorTerms.js +30 -68
  243. package/dist/sortRelatorTerms.js.map +7 -1
  244. package/dist/sortRelatorTerms.test.js +44 -0
  245. package/dist/sortRelatorTerms.test.js.map +7 -0
  246. package/dist/sortSubfields.js +102 -255
  247. package/dist/sortSubfields.js.map +7 -1
  248. package/dist/sortSubfields.test.js +44 -0
  249. package/dist/sortSubfields.test.js.map +7 -0
  250. package/dist/stripPunctuation.js +13 -36
  251. package/dist/stripPunctuation.js.map +7 -1
  252. package/dist/stripPunctuation.test.js +44 -0
  253. package/dist/stripPunctuation.test.js.map +7 -0
  254. package/dist/subfield-exclusion.js +28 -75
  255. package/dist/subfield-exclusion.js.map +7 -1
  256. package/dist/subfield-exclusion.test.js +471 -0
  257. package/dist/subfield-exclusion.test.js.map +7 -0
  258. package/dist/subfield6Utils.js +107 -269
  259. package/dist/subfield6Utils.js.map +7 -1
  260. package/dist/subfield8Utils.js +26 -50
  261. package/dist/subfield8Utils.js.map +7 -1
  262. package/dist/subfieldValueNormalizations.js +40 -74
  263. package/dist/subfieldValueNormalizations.js.map +7 -1
  264. package/dist/subfieldValueNormalizations.test.js +45 -0
  265. package/dist/subfieldValueNormalizations.test.js.map +7 -0
  266. package/dist/sync-007-and-300.js +22 -53
  267. package/dist/sync-007-and-300.js.map +7 -1
  268. package/dist/sync-007-and-300.test.js +44 -0
  269. package/dist/sync-007-and-300.test.js.map +7 -0
  270. package/dist/translate-terms.js +67 -155
  271. package/dist/translate-terms.js.map +7 -1
  272. package/dist/translate-terms.test.js +54 -0
  273. package/dist/translate-terms.test.js.map +7 -0
  274. package/dist/typeOfDate-008.js +10 -25
  275. package/dist/typeOfDate-008.js.map +7 -1
  276. package/dist/typeOfDate-008.test.js +40 -0
  277. package/dist/typeOfDate-008.test.js.map +7 -0
  278. package/dist/unicode-decomposition.js +94 -107
  279. package/dist/unicode-decomposition.js.map +7 -1
  280. package/dist/unicode-decomposition.test.js +94 -0
  281. package/dist/unicode-decomposition.test.js.map +7 -0
  282. package/dist/update-field-540.js +30 -75
  283. package/dist/update-field-540.js.map +7 -1
  284. package/dist/update-field-540.test.js +44 -0
  285. package/dist/update-field-540.test.js.map +7 -0
  286. package/dist/urn.js +55 -128
  287. package/dist/urn.js.map +7 -1
  288. package/dist/urn.test.js +44 -0
  289. package/dist/urn.test.js.map +7 -0
  290. package/dist/utils.js +78 -126
  291. package/dist/utils.js.map +7 -1
  292. package/eslint.config.mjs +1 -2
  293. package/package.json +28 -101
  294. package/src/access-rights.js +1 -1
  295. package/src/{access-rights.spec.js → access-rights.test.js} +9 -10
  296. package/src/addMissingField041.js +1 -1
  297. package/src/{addMissingField336.spec.js → addMissingField041.test.js} +13 -14
  298. package/src/addMissingField336.js +3 -3
  299. package/src/{addMissingField041.spec.js → addMissingField336.test.js} +13 -14
  300. package/src/addMissingField337.js +2 -2
  301. package/src/{addMissingField337.spec.js → addMissingField337.test.js} +13 -14
  302. package/src/addMissingField338.js +2 -2
  303. package/src/{addMissingField338.spec.js → addMissingField338.test.js} +13 -14
  304. package/src/cyrillux-usemarcon-replacement.js +18 -18
  305. package/src/{cyrillux-usemarcon-replacement.spec.js → cyrillux-usemarcon-replacement.test.js} +17 -14
  306. package/src/cyrillux.js +19 -12
  307. package/src/{cyrillux.spec.js → cyrillux.test.js} +13 -14
  308. package/src/disambiguateSeriesStatements.js +2 -2
  309. package/src/{disambiguateSeriesStatements.spec.js → disambiguateSeriesStatements.test.js} +12 -13
  310. package/src/double-commas.js +1 -1
  311. package/src/{double-commas.spec.js → double-commas.test.js} +9 -11
  312. package/src/duplicates-ind1.js +1 -1
  313. package/src/{duplicates-ind1.spec.js → duplicates-ind1.test.js} +12 -13
  314. package/src/{empty-fields.spec.js → empty-fields.test.js} +11 -13
  315. package/src/ending-punctuation-conf.js +6 -5
  316. package/src/ending-punctuation.js +115 -24
  317. package/src/{ending-punctuation.spec.js → ending-punctuation.test.js} +357 -275
  318. package/src/{ending-whitespace.spec.js → ending-whitespace.test.js} +12 -13
  319. package/src/field-008-18-34-character-groups.js +2 -2
  320. package/src/{field-008-18-34-character-groups.spec.js → field-008-18-34-character-groups.test.js} +13 -13
  321. package/src/field-505-separators.js +3 -3
  322. package/src/{field-505-separators.spec.js → field-505-separators.test.js} +16 -14
  323. package/src/field-521-fix.js +2 -2
  324. package/src/{field-521-fix.spec.js → field-521-fix.test.js} +12 -13
  325. package/src/field-exclusion.js +1 -1
  326. package/src/{field-exclusion.spec.js → field-exclusion.test.js} +60 -57
  327. package/src/{field-structure.spec.js → field-structure.test.js} +29 -29
  328. package/src/{fields-present.spec.js → fields-present.test.js} +12 -15
  329. package/src/fix-33X.js +4 -4
  330. package/src/{fix-33X.spec.js → fix-33X.test.js} +13 -14
  331. package/src/fix-country-codes.js +1 -1
  332. package/src/{fix-country-codes.spec.js → fix-country-codes.test.js} +12 -13
  333. package/src/fix-language-codes.js +5 -5
  334. package/src/{fix-language-codes.spec.js → fix-language-codes.test.js} +12 -13
  335. package/src/fixRelatorTerms.js +5 -5
  336. package/src/{fixRelatorTerms.spec.js → fixRelatorTerms.test.js} +13 -13
  337. package/src/{fixed-fields.spec.js → fixed-fields.test.js} +11 -14
  338. package/src/identical-fields.js +1 -1
  339. package/src/{identical-fields.spec.js → identical-fields.test.js} +9 -11
  340. package/src/index.js +132 -59
  341. package/src/indicator-fixes.js +17 -4
  342. package/src/{indicator-fixes.spec.js → indicator-fixes.test.js} +9 -12
  343. package/src/isbn-issn.js +12 -7
  344. package/src/{isbn-issn.spec.js → isbn-issn.test.js} +20 -22
  345. package/src/{item-language.spec.js → item-language.test.js} +21 -22
  346. package/src/melindaCustomMergeFields.js +1 -1
  347. package/src/merge-fields/controlSubfields.js +1 -1
  348. package/src/merge-fields/counterpartField.js +14 -9
  349. package/src/merge-fields/dataProvenance.js +41 -0
  350. package/src/merge-fields/index.js +12 -3
  351. package/src/merge-fields/mergableIndicator.js +1 -1
  352. package/src/merge-fields/mergeField.js +8 -8
  353. package/src/merge-fields/mergeIndicator.js +1 -1
  354. package/src/merge-fields/mergeOrAddPostprocess.js +4 -4
  355. package/src/merge-fields/mergeOrAddSubfield.js +2 -2
  356. package/src/merge-fields/mergeSubfield.js +4 -4
  357. package/src/merge-fields/removeDuplicateSubfields.js +2 -2
  358. package/src/{merge-fields.spec.js → merge-fields.test.js} +18 -15
  359. package/src/mergeField500Lisapainokset.js +1 -1
  360. package/src/{mergeField500Lisapainokset.spec.js → mergeField500Lisapainokset.test.js} +12 -13
  361. package/src/mergeRelatorTermFields.js +5 -7
  362. package/src/{mergeRelatorTermFields.spec.js → mergeRelatorTermFields.test.js} +12 -13
  363. package/src/modernize-502.js +1 -1
  364. package/src/{modernize-502.spec.js → modernize-502.test.js} +12 -13
  365. package/src/multiple-subfield-0.js +3 -3
  366. package/src/{multiple-subfield-0.spec.js → multiple-subfield-0.test.js} +13 -13
  367. package/src/{non-breaking-space.spec.js → non-breaking-space.test.js} +12 -13
  368. package/src/normalize-dashes.js +2 -2
  369. package/src/{normalize-dashes.spec.js → normalize-dashes.test.js} +12 -13
  370. package/src/normalize-identifiers.js +1 -1
  371. package/src/{normalize-identifiers.spec.js → normalize-identifiers.test.js} +12 -13
  372. package/src/normalize-qualifying-information.js +2 -2
  373. package/src/{normalize-qualifying-information.spec.js → normalize-qualifying-information.test.js} +12 -13
  374. package/src/normalize-utf8-diacritics.js +2 -2
  375. package/src/{normalize-utf8-diacritics.spec.js → normalize-utf8-diacritics.test.js} +13 -13
  376. package/src/normalizeFieldForComparison.js +32 -6
  377. package/src/normalizeSubfieldValueForComparison.js +1 -1
  378. package/src/prepublicationUtils.js +4 -4
  379. package/src/punctuation/index.js +1 -1
  380. package/src/punctuation/rules/index.js +2 -2
  381. package/src/{punctuation.spec.js → punctuation.test.js} +12 -13
  382. package/src/punctuation2.js +17 -8
  383. package/src/{punctuation2.spec.js → punctuation2.test.js} +12 -13
  384. package/src/reindexSubfield6OccurenceNumbers.js +5 -7
  385. package/src/{reindexSubfield6OccurenceNumbers.spec.js → reindexSubfield6OccurenceNumbers.test.js} +12 -13
  386. package/src/removeDuplicateDataFields.js +11 -19
  387. package/src/{removeDuplicateDataFields.spec.js → removeDuplicateDataFields.test.js} +12 -13
  388. package/src/removeInferiorDataFields.js +15 -12
  389. package/src/{removeInferiorDataFields.spec.js → removeInferiorDataFields.test.js} +13 -13
  390. package/src/resolvable-ext-references-melinda.js +1 -1
  391. package/src/{resolvable-ext-references-melinda.spec.js → resolvable-ext-references-melinda.test.js} +42 -27
  392. package/src/resolveOrphanedSubfield6s.js +6 -6
  393. package/src/{resolveOrphanedSubfield6s.spec.js → resolveOrphanedSubfield6s.test.js} +13 -13
  394. package/src/sanitize-vocabulary-source-codes.js +4 -4
  395. package/src/{sanitize-vocabulary-source-codes.spec.js → sanitize-vocabulary-source-codes.test.js} +16 -14
  396. package/src/{sort-tags.spec.js → sort-tags.test.js} +9 -11
  397. package/src/sortFields.js +4 -4
  398. package/src/{sortFields.spec.js → sortFields.test.js} +12 -13
  399. package/src/sortRelatorTerms.js +3 -3
  400. package/src/{sortRelatorTerms.spec.js → sortRelatorTerms.test.js} +13 -13
  401. package/src/sortSubfields.js +8 -6
  402. package/src/{sortSubfields.spec.js → sortSubfields.test.js} +13 -13
  403. package/src/stripPunctuation.js +3 -3
  404. package/src/{stripPunctuation.spec.js → stripPunctuation.test.js} +13 -13
  405. package/src/subfield-exclusion.js +1 -1
  406. package/src/{subfield-exclusion.spec.js → subfield-exclusion.test.js} +45 -36
  407. package/src/subfield6Utils.js +6 -10
  408. package/src/subfield8Utils.js +4 -4
  409. package/src/subfieldValueNormalizations.js +3 -3
  410. package/src/{subfieldValueNormalizations.spec.js → subfieldValueNormalizations.test.js} +18 -14
  411. package/src/sync-007-and-300.js +2 -2
  412. package/src/{sync-007-and-300.spec.js → sync-007-and-300.test.js} +13 -13
  413. package/src/translate-terms.js +3 -3
  414. package/src/translate-terms.test.js +75 -0
  415. package/src/{typeOfDate-008.spec.js → typeOfDate-008.test.js} +12 -13
  416. package/src/{unicode-decomposition.spec.js → unicode-decomposition.test.js} +10 -16
  417. package/src/update-field-540.js +2 -2
  418. package/src/{update-field-540.spec.js → update-field-540.test.js} +13 -10
  419. package/src/urn.js +2 -2
  420. package/src/{urn.spec.js → urn.test.js} +12 -13
  421. package/src/utils.js +21 -5
  422. package/test-fixtures/field-505-separators/03/expectedResult.json +3 -1
  423. package/test-fixtures/field-505-separators/03/record.json +3 -0
  424. package/test-fixtures/indicator-fixes/10/expectedResult.json +11 -0
  425. package/test-fixtures/indicator-fixes/10/metadata.json +4 -0
  426. package/test-fixtures/indicator-fixes/10/record.json +11 -0
  427. package/test-fixtures/merge-fields/f05/expectedResult.json +24 -0
  428. package/test-fixtures/merge-fields/f05/metadata.json +6 -0
  429. package/test-fixtures/merge-fields/f05/record.json +30 -0
  430. package/test-fixtures/normalize-subfield-value/01/metadata.json +4 -1
  431. package/test-fixtures/normalize-subfield-value/01/record.json +3 -0
  432. package/test-fixtures/normalize-subfield-value/02/expectedResult.json +3 -1
  433. package/test-fixtures/normalize-subfield-value/02/metadata.json +2 -1
  434. package/test-fixtures/normalize-subfield-value/02/record.json +3 -0
  435. package/test-fixtures/remove-inferior-datafields/f16/expectedResult.json +12 -0
  436. package/test-fixtures/remove-inferior-datafields/f16/metadata.json +5 -0
  437. package/test-fixtures/remove-inferior-datafields/f16/record.json +14 -0
  438. package/test-fixtures/sanitize-vocabulary-source-codes/f03/expectedResult.json +3 -1
  439. package/test-fixtures/sanitize-vocabulary-source-codes/f04/expectedResult.json +3 -1
  440. package/test-fixtures/sanitize-vocabulary-source-codes/v04/metadata.json +1 -4
  441. package/test-fixtures/sanitize-vocabulary-source-codes/v04/record.json +1 -1
  442. package/test-fixtures/translate-terms-data.js +42 -0
  443. package/dist/access-rights.spec.js +0 -195
  444. package/dist/access-rights.spec.js.map +0 -1
  445. package/dist/addMissingField041.spec.js +0 -45
  446. package/dist/addMissingField041.spec.js.map +0 -1
  447. package/dist/addMissingField336.spec.js +0 -45
  448. package/dist/addMissingField336.spec.js.map +0 -1
  449. package/dist/addMissingField337.spec.js +0 -43
  450. package/dist/addMissingField337.spec.js.map +0 -1
  451. package/dist/addMissingField338.spec.js +0 -45
  452. package/dist/addMissingField338.spec.js.map +0 -1
  453. package/dist/cyrillux-usemarcon-replacement.spec.js +0 -45
  454. package/dist/cyrillux-usemarcon-replacement.spec.js.map +0 -1
  455. package/dist/cyrillux.spec.js +0 -46
  456. package/dist/cyrillux.spec.js.map +0 -1
  457. package/dist/disambiguateSeriesStatements.spec.js +0 -51
  458. package/dist/disambiguateSeriesStatements.spec.js.map +0 -1
  459. package/dist/double-commas.spec.js +0 -73
  460. package/dist/double-commas.spec.js.map +0 -1
  461. package/dist/duplicates-ind1.spec.js +0 -45
  462. package/dist/duplicates-ind1.spec.js.map +0 -1
  463. package/dist/empty-fields.spec.js +0 -118
  464. package/dist/empty-fields.spec.js.map +0 -1
  465. package/dist/ending-punctuation.spec.js +0 -2654
  466. package/dist/ending-punctuation.spec.js.map +0 -1
  467. package/dist/ending-whitespace.spec.js +0 -42
  468. package/dist/ending-whitespace.spec.js.map +0 -1
  469. package/dist/field-008-18-34-character-groups.spec.js +0 -51
  470. package/dist/field-008-18-34-character-groups.spec.js.map +0 -1
  471. package/dist/field-505-separators.spec.js +0 -51
  472. package/dist/field-505-separators.spec.js.map +0 -1
  473. package/dist/field-521-fix.spec.js +0 -51
  474. package/dist/field-521-fix.spec.js.map +0 -1
  475. package/dist/field-exclusion.spec.js +0 -1054
  476. package/dist/field-exclusion.spec.js.map +0 -1
  477. package/dist/field-structure.spec.js +0 -535
  478. package/dist/field-structure.spec.js.map +0 -1
  479. package/dist/fields-present.spec.js +0 -121
  480. package/dist/fields-present.spec.js.map +0 -1
  481. package/dist/fix-33X.spec.js +0 -45
  482. package/dist/fix-33X.spec.js.map +0 -1
  483. package/dist/fix-country-codes.spec.js +0 -51
  484. package/dist/fix-country-codes.spec.js.map +0 -1
  485. package/dist/fix-language-codes.spec.js +0 -44
  486. package/dist/fix-language-codes.spec.js.map +0 -1
  487. package/dist/fixRelatorTerms.spec.js +0 -51
  488. package/dist/fixRelatorTerms.spec.js.map +0 -1
  489. package/dist/fixed-fields.spec.js +0 -140
  490. package/dist/fixed-fields.spec.js.map +0 -1
  491. package/dist/identical-fields.spec.js +0 -99
  492. package/dist/identical-fields.spec.js.map +0 -1
  493. package/dist/indicator-fixes.spec.js +0 -51
  494. package/dist/indicator-fixes.spec.js.map +0 -1
  495. package/dist/isbn-issn.spec.js +0 -595
  496. package/dist/isbn-issn.spec.js.map +0 -1
  497. package/dist/item-language.spec.js +0 -306
  498. package/dist/item-language.spec.js.map +0 -1
  499. package/dist/melindaCustomMergeFields.json +0 -5120
  500. package/dist/merge-fields.spec.js +0 -51
  501. package/dist/merge-fields.spec.js.map +0 -1
  502. package/dist/mergeField500Lisapainokset.spec.js +0 -51
  503. package/dist/mergeField500Lisapainokset.spec.js.map +0 -1
  504. package/dist/mergeRelatorTermFields.spec.js +0 -51
  505. package/dist/mergeRelatorTermFields.spec.js.map +0 -1
  506. package/dist/modernize-502.spec.js +0 -49
  507. package/dist/modernize-502.spec.js.map +0 -1
  508. package/dist/multiple-subfield-0.spec.js +0 -51
  509. package/dist/multiple-subfield-0.spec.js.map +0 -1
  510. package/dist/non-breaking-space.spec.js +0 -42
  511. package/dist/non-breaking-space.spec.js.map +0 -1
  512. package/dist/normalize-dashes.spec.js +0 -51
  513. package/dist/normalize-dashes.spec.js.map +0 -1
  514. package/dist/normalize-identifiers.spec.js +0 -51
  515. package/dist/normalize-identifiers.spec.js.map +0 -1
  516. package/dist/normalize-qualifying-information.spec.js +0 -51
  517. package/dist/normalize-qualifying-information.spec.js.map +0 -1
  518. package/dist/normalize-utf8-diacritics.spec.js +0 -51
  519. package/dist/normalize-utf8-diacritics.spec.js.map +0 -1
  520. package/dist/punctuation.spec.js +0 -51
  521. package/dist/punctuation.spec.js.map +0 -1
  522. package/dist/punctuation2.spec.js +0 -51
  523. package/dist/punctuation2.spec.js.map +0 -1
  524. package/dist/reindexSubfield6OccurenceNumbers.spec.js +0 -51
  525. package/dist/reindexSubfield6OccurenceNumbers.spec.js.map +0 -1
  526. package/dist/removeDuplicateDataFields.spec.js +0 -51
  527. package/dist/removeDuplicateDataFields.spec.js.map +0 -1
  528. package/dist/removeInferiorDataFields.spec.js +0 -51
  529. package/dist/removeInferiorDataFields.spec.js.map +0 -1
  530. package/dist/resolvable-ext-references-melinda.spec.js +0 -166
  531. package/dist/resolvable-ext-references-melinda.spec.js.map +0 -1
  532. package/dist/resolveOrphanedSubfield6s.spec.js +0 -51
  533. package/dist/resolveOrphanedSubfield6s.spec.js.map +0 -1
  534. package/dist/sanitize-vocabulary-source-codes.spec.js +0 -51
  535. package/dist/sanitize-vocabulary-source-codes.spec.js.map +0 -1
  536. package/dist/sort-tags.spec.js +0 -207
  537. package/dist/sort-tags.spec.js.map +0 -1
  538. package/dist/sortFields.spec.js +0 -51
  539. package/dist/sortFields.spec.js.map +0 -1
  540. package/dist/sortRelatorTerms.spec.js +0 -51
  541. package/dist/sortRelatorTerms.spec.js.map +0 -1
  542. package/dist/sortSubfields.spec.js +0 -52
  543. package/dist/sortSubfields.spec.js.map +0 -1
  544. package/dist/stripPunctuation.spec.js +0 -51
  545. package/dist/stripPunctuation.spec.js.map +0 -1
  546. package/dist/subfield-exclusion.spec.js +0 -523
  547. package/dist/subfield-exclusion.spec.js.map +0 -1
  548. package/dist/subfieldValueNormalizations.spec.js +0 -51
  549. package/dist/subfieldValueNormalizations.spec.js.map +0 -1
  550. package/dist/sync-007-and-300.spec.js +0 -51
  551. package/dist/sync-007-and-300.spec.js.map +0 -1
  552. package/dist/translate-terms.spec.js +0 -51
  553. package/dist/translate-terms.spec.js.map +0 -1
  554. package/dist/typeOfDate-008.spec.js +0 -47
  555. package/dist/typeOfDate-008.spec.js.map +0 -1
  556. package/dist/unicode-decomposition.spec.js +0 -91
  557. package/dist/unicode-decomposition.spec.js.map +0 -1
  558. package/dist/update-field-540.spec.js +0 -51
  559. package/dist/update-field-540.spec.js.map +0 -1
  560. package/dist/urn.spec.js +0 -52
  561. package/dist/urn.spec.js.map +0 -1
  562. package/src/melindaCustomMergeFields.json +0 -5120
  563. package/src/translate-terms.spec.js +0 -52
@@ -1,123 +1,92 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = _default;
7
- var _utils = require("./utils");
8
- var _clone = _interopRequireDefault(require("clone"));
9
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
- //import createDebugLogger from 'debug';
11
-
12
- //const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/sanitize-vocabulary-source-codes);
13
-
14
- // Author(s): Nicholas Volk, Joni Ollila
15
- function _default() {
1
+ import { fieldToString } from "./utils.js";
2
+ import clone from "clone";
3
+ export default function() {
16
4
  return {
17
- description: 'Validator for updating mismatching f007 based on f300 (DVD/Bluray) (MRA-613)',
5
+ description: "Validator for updating mismatching f007 based on f300 (DVD/Bluray) (MRA-613)",
18
6
  validate,
19
7
  fix
20
8
  };
21
9
  function fix(record) {
22
- const res = {
23
- message: [],
24
- fix: [],
25
- valid: true
26
- };
27
- record.fields.forEach(f => fixField(f, record)); // eslint-disable-line array-callback-return
10
+ const res = { message: [], fix: [], valid: true };
11
+ record.fields.forEach((f) => fixField(f, record));
28
12
  return res;
29
13
  }
30
14
  function validate(record) {
31
- const res = {
32
- message: []
33
- };
34
- record.fields.forEach(field => {
15
+ const res = { message: [] };
16
+ record.fields.forEach((field) => {
35
17
  validateField(field, res, record);
36
18
  });
37
19
  res.valid = !(res.message.length >= 1);
38
20
  return res;
39
21
  }
40
22
  function validateField(field, res, record) {
41
- if (field.tag !== '007') {
23
+ if (field.tag !== "007") {
42
24
  return;
43
25
  }
44
- const orig = (0, _utils.fieldToString)(field);
45
- const normalizedField = fixField((0, _clone.default)(field), record);
46
- const mod = (0, _utils.fieldToString)(normalizedField);
26
+ const orig = fieldToString(field);
27
+ const normalizedField = fixField(clone(field), record);
28
+ const mod = fieldToString(normalizedField);
47
29
  if (orig !== mod) {
48
- // Fail as the input is "broken"/"crap"/sumthing
49
30
  res.message.push(`FIXABLE: '${orig}' => '${mod}'`);
50
31
  return;
51
32
  }
52
-
53
- /*
54
- if (fieldHasUnfixableStuff(field)) {
55
- res.message.push(`CAN'T BE FIXED AUTOMATICALLY: '${orig}'`);
56
- return;
57
- }
58
- */
59
33
  return;
60
34
  }
61
35
  function fieldIsBluray007(field) {
62
- if (field.tag !== '007') {
36
+ if (field.tag !== "007") {
63
37
  return false;
64
38
  }
65
39
  return field.value.match(/^v...s/u);
66
40
  }
67
41
  function fieldIsDvd007(field) {
68
- if (field.tag !== '007') {
42
+ if (field.tag !== "007") {
69
43
  return false;
70
44
  }
71
45
  return field.value.match(/^v...v/u);
72
46
  }
73
47
  function fieldIsBluray300(field) {
74
- if (field.tag !== '300') {
48
+ if (field.tag !== "300") {
75
49
  return false;
76
50
  }
77
- return field.subfields.some(subfield => subfield.value.match(/(?:Blu.?ray|BD)/ui));
51
+ return field.subfields.some((subfield) => subfield.value.match(/(?:Blu.?ray|BD)/ui));
78
52
  }
79
53
  function fieldIsDvd300(field) {
80
- if (field.tag !== '300') {
54
+ if (field.tag !== "300") {
81
55
  return false;
82
56
  }
83
- return field.subfields.some(subfield => subfield.value.match(/DVD/ui));
57
+ return field.subfields.some((subfield) => subfield.value.match(/DVD/ui));
84
58
  }
85
59
  function recordHasBluray300(record) {
86
- return record.fields.some(f => fieldIsBluray300(f));
60
+ return record.fields.some((f) => fieldIsBluray300(f));
87
61
  }
88
62
  function recordHasDvd300(record) {
89
- return record.fields.some(f => fieldIsDvd300(f));
63
+ return record.fields.some((f) => fieldIsDvd300(f));
90
64
  }
91
65
  function convert007BlurayToDvd(field) {
92
66
  if (!fieldIsBluray007(field)) {
93
67
  return;
94
68
  }
95
- //field.value = field.value.substring(0, 4) + 's' + field.value.substring(5);
96
- //field.value = field.value.replace(/^(?:v...)s/u, `${1}v`); // eslint-disable-line functional/immutable-data, no-template-curly-in-string
97
69
  field.value = `${field.value.substring(0, 4)}v${field.value.substring(5)}`;
98
70
  }
99
71
  function convert007DvdToBluray(field) {
100
72
  if (!fieldIsDvd007(field)) {
101
73
  return;
102
74
  }
103
- //field.value = field.value.replace(/^(?:v...)v/u, `${1}s`);
104
75
  field.value = `${field.value.substring(0, 4)}s${field.value.substring(5)}`;
105
76
  }
106
77
  function fixField(field, record) {
107
- if (field.tag !== '007') {
78
+ if (field.tag !== "007") {
108
79
  return field;
109
80
  }
110
81
  if (fieldIsDvd007(field) && recordHasBluray300(record) && !recordHasDvd300(record)) {
111
- // FIX 007: DVD -> Blu-ray
112
82
  convert007DvdToBluray(field);
113
83
  return field;
114
84
  }
115
85
  if (fieldIsBluray007(field) && recordHasDvd300(record) && !recordHasBluray300(record)) {
116
- // FIX 007: Blu-Ray -> DVD
117
86
  convert007BlurayToDvd(field);
118
87
  return field;
119
88
  }
120
89
  return field;
121
90
  }
122
91
  }
123
- //# sourceMappingURL=sync-007-and-300.js.map
92
+ //# sourceMappingURL=sync-007-and-300.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"sync-007-and-300.js","names":["_utils","require","_clone","_interopRequireDefault","e","__esModule","default","_default","description","validate","fix","record","res","message","valid","fields","forEach","f","fixField","field","validateField","length","tag","orig","fieldToString","normalizedField","clone","mod","push","fieldIsBluray007","value","match","fieldIsDvd007","fieldIsBluray300","subfields","some","subfield","fieldIsDvd300","recordHasBluray300","recordHasDvd300","convert007BlurayToDvd","substring","convert007DvdToBluray"],"sources":["../src/sync-007-and-300.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport {fieldToString} from './utils';\nimport clone from 'clone';\n\n//const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/sanitize-vocabulary-source-codes);\n\n// Author(s): Nicholas Volk, Joni Ollila\nexport default function () {\n\n return {\n description: 'Validator for updating mismatching f007 based on f300 (DVD/Bluray) (MRA-613)',\n validate, fix\n };\n\n function fix(record) {\n const res = {message: [], fix: [], valid: true};\n record.fields.forEach(f => fixField(f, record)); // eslint-disable-line array-callback-return\n return res;\n }\n\n function validate(record) {\n const res = {message: []};\n\n record.fields.forEach(field => {\n validateField(field, res, record);\n });\n\n res.valid = !(res.message.length >= 1);\n return res;\n }\n\n function validateField(field, res, record) {\n if (field.tag !== '007') {\n return;\n }\n const orig = fieldToString(field);\n\n const normalizedField = fixField(clone(field), record);\n const mod = fieldToString(normalizedField);\n if (orig !== mod) { // Fail as the input is \"broken\"/\"crap\"/sumthing\n res.message.push(`FIXABLE: '${orig}' => '${mod}'`);\n return;\n }\n\n /*\n if (fieldHasUnfixableStuff(field)) {\n res.message.push(`CAN'T BE FIXED AUTOMATICALLY: '${orig}'`);\n return;\n }\n */\n return;\n }\n\n function fieldIsBluray007(field) {\n if (field.tag !== '007') {\n return false;\n }\n return field.value.match(/^v...s/u);\n }\n\n function fieldIsDvd007(field) {\n if (field.tag !== '007') {\n return false;\n }\n return field.value.match(/^v...v/u);\n }\n\n function fieldIsBluray300(field) {\n if (field.tag !== '300') {\n return false;\n }\n return field.subfields.some(subfield => subfield.value.match(/(?:Blu.?ray|BD)/ui));\n }\n\n function fieldIsDvd300(field) {\n if (field.tag !== '300') {\n return false;\n }\n return field.subfields.some(subfield => subfield.value.match(/DVD/ui));\n }\n\n function recordHasBluray300(record) {\n return record.fields.some(f => fieldIsBluray300(f));\n }\n\n function recordHasDvd300(record) {\n return record.fields.some(f => fieldIsDvd300(f));\n }\n\n function convert007BlurayToDvd(field) {\n if (!fieldIsBluray007(field)) {\n return;\n }\n //field.value = field.value.substring(0, 4) + 's' + field.value.substring(5);\n //field.value = field.value.replace(/^(?:v...)s/u, `${1}v`); // eslint-disable-line functional/immutable-data, no-template-curly-in-string\n field.value = `${field.value.substring(0, 4)}v${field.value.substring(5)}`;\n }\n\n function convert007DvdToBluray(field) {\n if (!fieldIsDvd007(field)) {\n return;\n }\n //field.value = field.value.replace(/^(?:v...)v/u, `${1}s`);\n field.value = `${field.value.substring(0, 4)}s${field.value.substring(5)}`;\n }\n\n function fixField(field, record) {\n if (field.tag !== '007') {\n return field;\n }\n\n if (fieldIsDvd007(field) && recordHasBluray300(record) && !recordHasDvd300(record)) {\n // FIX 007: DVD -> Blu-ray\n convert007DvdToBluray(field);\n return field;\n }\n\n if (fieldIsBluray007(field) && recordHasDvd300(record) && !recordHasBluray300(record)) {\n // FIX 007: Blu-Ray -> DVD\n convert007BlurayToDvd(field);\n return field;\n }\n\n return field;\n }\n\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/sync-007-and-300.js"],
4
+ "sourcesContent": ["//import createDebugLogger from 'debug';\nimport {fieldToString} from './utils.js';\nimport clone from 'clone';\n\n//const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/sanitize-vocabulary-source-codes);\n\n// Author(s): Nicholas Volk, Joni Ollila\nexport default function () {\n\n return {\n description: 'Validator for updating mismatching f007 based on f300 (DVD/Bluray) (MRA-613)',\n validate, fix\n };\n\n function fix(record) {\n const res = {message: [], fix: [], valid: true};\n record.fields.forEach(f => fixField(f, record));\n return res;\n }\n\n function validate(record) {\n const res = {message: []};\n\n record.fields.forEach(field => {\n validateField(field, res, record);\n });\n\n res.valid = !(res.message.length >= 1);\n return res;\n }\n\n function validateField(field, res, record) {\n if (field.tag !== '007') {\n return;\n }\n const orig = fieldToString(field);\n\n const normalizedField = fixField(clone(field), record);\n const mod = fieldToString(normalizedField);\n if (orig !== mod) { // Fail as the input is \"broken\"/\"crap\"/sumthing\n res.message.push(`FIXABLE: '${orig}' => '${mod}'`);\n return;\n }\n\n /*\n if (fieldHasUnfixableStuff(field)) {\n res.message.push(`CAN'T BE FIXED AUTOMATICALLY: '${orig}'`);\n return;\n }\n */\n return;\n }\n\n function fieldIsBluray007(field) {\n if (field.tag !== '007') {\n return false;\n }\n return field.value.match(/^v...s/u);\n }\n\n function fieldIsDvd007(field) {\n if (field.tag !== '007') {\n return false;\n }\n return field.value.match(/^v...v/u);\n }\n\n function fieldIsBluray300(field) {\n if (field.tag !== '300') {\n return false;\n }\n return field.subfields.some(subfield => subfield.value.match(/(?:Blu.?ray|BD)/ui));\n }\n\n function fieldIsDvd300(field) {\n if (field.tag !== '300') {\n return false;\n }\n return field.subfields.some(subfield => subfield.value.match(/DVD/ui));\n }\n\n function recordHasBluray300(record) {\n return record.fields.some(f => fieldIsBluray300(f));\n }\n\n function recordHasDvd300(record) {\n return record.fields.some(f => fieldIsDvd300(f));\n }\n\n function convert007BlurayToDvd(field) {\n if (!fieldIsBluray007(field)) {\n return;\n }\n //field.value = field.value.substring(0, 4) + 's' + field.value.substring(5);\n //field.value = field.value.replace(/^(?:v...)s/u, `${1}v`); // eslint-disable-line functional/immutable-data, no-template-curly-in-string\n field.value = `${field.value.substring(0, 4)}v${field.value.substring(5)}`;\n }\n\n function convert007DvdToBluray(field) {\n if (!fieldIsDvd007(field)) {\n return;\n }\n //field.value = field.value.replace(/^(?:v...)v/u, `${1}s`);\n field.value = `${field.value.substring(0, 4)}s${field.value.substring(5)}`;\n }\n\n function fixField(field, record) {\n if (field.tag !== '007') {\n return field;\n }\n\n if (fieldIsDvd007(field) && recordHasBluray300(record) && !recordHasDvd300(record)) {\n // FIX 007: DVD -> Blu-ray\n convert007DvdToBluray(field);\n return field;\n }\n\n if (fieldIsBluray007(field) && recordHasDvd300(record) && !recordHasBluray300(record)) {\n // FIX 007: Blu-Ray -> DVD\n convert007BlurayToDvd(field);\n return field;\n }\n\n return field;\n }\n\n}\n"],
5
+ "mappings": "AACA,SAAQ,qBAAoB;AAC5B,OAAO,WAAW;AAKlB,0BAA2B;AAEzB,SAAO;AAAA,IACL,aAAa;AAAA,IACb;AAAA,IAAU;AAAA,EACZ;AAEA,WAAS,IAAI,QAAQ;AACnB,UAAM,MAAM,EAAC,SAAS,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,KAAI;AAC9C,WAAO,OAAO,QAAQ,OAAK,SAAS,GAAG,MAAM,CAAC;AAC9C,WAAO;AAAA,EACT;AAEA,WAAS,SAAS,QAAQ;AACxB,UAAM,MAAM,EAAC,SAAS,CAAC,EAAC;AAExB,WAAO,OAAO,QAAQ,WAAS;AAC7B,oBAAc,OAAO,KAAK,MAAM;AAAA,IAClC,CAAC;AAED,QAAI,QAAQ,EAAE,IAAI,QAAQ,UAAU;AACpC,WAAO;AAAA,EACT;AAEA,WAAS,cAAc,OAAO,KAAK,QAAQ;AACzC,QAAI,MAAM,QAAQ,OAAO;AACvB;AAAA,IACF;AACA,UAAM,OAAO,cAAc,KAAK;AAEhC,UAAM,kBAAkB,SAAS,MAAM,KAAK,GAAG,MAAM;AACrD,UAAM,MAAM,cAAc,eAAe;AACzC,QAAI,SAAS,KAAK;AAChB,UAAI,QAAQ,KAAK,aAAa,IAAI,SAAS,GAAG,GAAG;AACjD;AAAA,IACF;AAQA;AAAA,EACF;AAEA,WAAS,iBAAiB,OAAO;AAC/B,QAAI,MAAM,QAAQ,OAAO;AACvB,aAAO;AAAA,IACT;AACA,WAAO,MAAM,MAAM,MAAM,SAAS;AAAA,EACpC;AAEA,WAAS,cAAc,OAAO;AAC5B,QAAI,MAAM,QAAQ,OAAO;AACvB,aAAO;AAAA,IACT;AACA,WAAO,MAAM,MAAM,MAAM,SAAS;AAAA,EACpC;AAEA,WAAS,iBAAiB,OAAO;AAC/B,QAAI,MAAM,QAAQ,OAAO;AACvB,aAAO;AAAA,IACT;AACA,WAAO,MAAM,UAAU,KAAK,cAAY,SAAS,MAAM,MAAM,mBAAmB,CAAC;AAAA,EACnF;AAEA,WAAS,cAAc,OAAO;AAC5B,QAAI,MAAM,QAAQ,OAAO;AACvB,aAAO;AAAA,IACT;AACA,WAAO,MAAM,UAAU,KAAK,cAAY,SAAS,MAAM,MAAM,OAAO,CAAC;AAAA,EACvE;AAEA,WAAS,mBAAmB,QAAQ;AAClC,WAAO,OAAO,OAAO,KAAK,OAAK,iBAAiB,CAAC,CAAC;AAAA,EACpD;AAEA,WAAS,gBAAgB,QAAQ;AAC/B,WAAO,OAAO,OAAO,KAAK,OAAK,cAAc,CAAC,CAAC;AAAA,EACjD;AAEA,WAAS,sBAAsB,OAAO;AACpC,QAAI,CAAC,iBAAiB,KAAK,GAAG;AAC5B;AAAA,IACF;AAGA,UAAM,QAAQ,GAAG,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,MAAM,MAAM,UAAU,CAAC,CAAC;AAAA,EAC1E;AAEA,WAAS,sBAAsB,OAAO;AACpC,QAAI,CAAC,cAAc,KAAK,GAAG;AACzB;AAAA,IACF;AAEA,UAAM,QAAQ,GAAG,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,MAAM,MAAM,UAAU,CAAC,CAAC;AAAA,EAC1E;AAEA,WAAS,SAAS,OAAO,QAAQ;AAC/B,QAAI,MAAM,QAAQ,OAAO;AACvB,aAAO;AAAA,IACT;AAEA,QAAI,cAAc,KAAK,KAAK,mBAAmB,MAAM,KAAK,CAAC,gBAAgB,MAAM,GAAG;AAElF,4BAAsB,KAAK;AAC3B,aAAO;AAAA,IACT;AAEA,QAAI,iBAAiB,KAAK,KAAK,gBAAgB,MAAM,KAAK,CAAC,mBAAmB,MAAM,GAAG;AAErF,4BAAsB,KAAK;AAC3B,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAEF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,44 @@
1
+ import assert from "node:assert";
2
+ import { MarcRecord } from "@natlibfi/marc-record";
3
+ import validatorFactory from "./sync-007-and-300.js";
4
+ import { READERS } from "@natlibfi/fixura";
5
+ import generateTests from "@natlibfi/fixugen";
6
+ import createDebugLogger from "debug";
7
+ generateTests({
8
+ callback,
9
+ path: [import.meta.dirname, "..", "test-fixtures", "sync-007-and-300"],
10
+ useMetadataFile: true,
11
+ recurse: false,
12
+ fixura: {
13
+ reader: READERS.JSON
14
+ },
15
+ hooks: {
16
+ before: async () => {
17
+ testValidatorFactory();
18
+ }
19
+ }
20
+ });
21
+ const debug = createDebugLogger("@natlibfi/marc-record-validators-melinda/sync-007-and-300:test");
22
+ async function testValidatorFactory() {
23
+ const validator = await validatorFactory();
24
+ assert.equal(typeof validator, "object");
25
+ assert.equal(typeof validator.description, "string");
26
+ assert.equal(typeof validator.validate, "function");
27
+ }
28
+ async function callback({ getFixture, enabled = true, fix = false }) {
29
+ if (enabled === false) {
30
+ debug("TEST SKIPPED!");
31
+ return;
32
+ }
33
+ const validator = await validatorFactory();
34
+ const record = new MarcRecord(getFixture("record.json"));
35
+ const expectedResult = getFixture("expectedResult.json");
36
+ if (!fix) {
37
+ const result = await validator.validate(record);
38
+ assert.deepEqual(result, expectedResult);
39
+ return;
40
+ }
41
+ await validator.fix(record);
42
+ assert.deepEqual(record, expectedResult);
43
+ }
44
+ //# sourceMappingURL=sync-007-and-300.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/sync-007-and-300.test.js"],
4
+ "sourcesContent": ["import assert from 'node:assert';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './sync-007-and-300.js';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\nimport createDebugLogger from 'debug';\n\ngenerateTests({\n callback,\n path: [import.meta.dirname, '..', 'test-fixtures', 'sync-007-and-300'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n hooks: {\n before: async () => {\n testValidatorFactory();\n }\n }\n\n});\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/sync-007-and-300:test');\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n assert.equal(typeof validator, 'object');\n assert.equal(typeof validator.description, 'string');\n assert.equal(typeof validator.validate, 'function');\n}\n\nasync function callback({getFixture, enabled = true, fix = false}) {\n if (enabled === false) {\n debug('TEST SKIPPED!');\n return;\n }\n\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n assert.deepEqual(result, expectedResult);\n return;\n }\n\n await validator.fix(record);\n assert.deepEqual(record, expectedResult);\n}\n"],
5
+ "mappings": "AAAA,OAAO,YAAY;AACnB,SAAQ,kBAAiB;AACzB,OAAO,sBAAsB;AAC7B,SAAQ,eAAc;AACtB,OAAO,mBAAmB;AAC1B,OAAO,uBAAuB;AAE9B,cAAc;AAAA,EACZ;AAAA,EACA,MAAM,CAAC,YAAY,SAAS,MAAM,iBAAiB,kBAAkB;AAAA,EACrE,iBAAiB;AAAA,EACjB,SAAS;AAAA,EACT,QAAQ;AAAA,IACN,QAAQ,QAAQ;AAAA,EAClB;AAAA,EACA,OAAO;AAAA,IACL,QAAQ,YAAY;AAClB,2BAAqB;AAAA,IACvB;AAAA,EACF;AAEF,CAAC;AACD,MAAM,QAAQ,kBAAkB,gEAAgE;AAEhG,eAAe,uBAAuB;AACpC,QAAM,YAAY,MAAM,iBAAiB;AAEzC,SAAO,MAAM,OAAO,WAAW,QAAQ;AACvC,SAAO,MAAM,OAAO,UAAU,aAAa,QAAQ;AACnD,SAAO,MAAM,OAAO,UAAU,UAAU,UAAU;AACpD;AAEA,eAAe,SAAS,EAAC,YAAY,UAAU,MAAM,MAAM,MAAK,GAAG;AACjE,MAAI,YAAY,OAAO;AACrB,UAAM,eAAe;AACrB;AAAA,EACF;AAEA,QAAM,YAAY,MAAM,iBAAiB;AACzC,QAAM,SAAS,IAAI,WAAW,WAAW,aAAa,CAAC;AACvD,QAAM,iBAAiB,WAAW,qBAAqB;AAGvD,MAAI,CAAC,KAAK;AACR,UAAM,SAAS,MAAM,UAAU,SAAS,MAAM;AAC9C,WAAO,UAAU,QAAQ,cAAc;AACvC;AAAA,EACF;AAEA,QAAM,UAAU,IAAI,MAAM;AAC1B,SAAO,UAAU,QAAQ,cAAc;AACzC;",
6
+ "names": []
7
+ }
@@ -1,62 +1,31 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = _default;
7
- var _clone = _interopRequireDefault(require("clone"));
8
- var _debug = _interopRequireDefault(require("debug"));
9
- var _utils = require("./utils");
10
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
- const debug = (0, _debug.default)('@natlibfi/marc-record-validators-melinda:translate-terms');
12
- const defaultTags = ['648', '650', '651', '655'];
13
- const swapLanguageCode = {
14
- 'fin': 'swe',
15
- 'fi': 'sv',
16
- 'sv': 'fi',
17
- 'swe': 'fin'
18
- };
19
- const changeAbbrHash = {
20
- 'fi': 'fin',
21
- 'fin': 'fi',
22
- 'sv': 'swe',
23
- 'swe': 'sv'
24
- };
1
+ import clone from "clone";
2
+ import createDebugLogger from "debug";
3
+ import { fieldHasSubfield, fieldToString, nvdebug } from "./utils.js";
4
+ const debug = createDebugLogger("@natlibfi/marc-record-validators-melinda:translate-terms");
5
+ const defaultTags = ["648", "650", "651", "655"];
6
+ const swapLanguageCode = { "fin": "swe", "fi": "sv", "sv": "fi", "swe": "fin" };
7
+ const changeAbbrHash = { "fi": "fin", "fin": "fi", "sv": "swe", "swe": "sv" };
25
8
  const termCache = {};
26
-
27
- // Author(s): Nicholas Volk
28
- function _default() {
9
+ export default function() {
29
10
  return {
30
- description: 'Translate yso (648, 650, 651) and slm (655) terms (FIN <=> SWE)',
11
+ description: "Translate yso (648, 650, 651) and slm (655) terms (FIN <=> SWE)",
31
12
  validate,
32
13
  fix
33
14
  };
34
15
  async function fix(record) {
35
16
  const newFields = await getFields(record, defaultTags, []);
36
- newFields.forEach(nf => (0, _utils.nvdebug)(`Add new field '${(0, _utils.fieldToString)(nf)}'`, debug)); // eslint-disable-line array-callback-return
37
-
38
- newFields.forEach(nf => record.insertField(nf)); // eslint-disable-line array-callback-return
39
-
40
- const newFieldsAsStrings = newFields.map(f => (0, _utils.fieldToString)(f));
41
- return {
42
- message: [],
43
- fix: newFieldsAsStrings,
44
- valid: true
45
- };
17
+ newFields.forEach((nf) => nvdebug(`Add new field '${fieldToString(nf)}'`, debug));
18
+ newFields.forEach((nf) => record.insertField(nf));
19
+ const newFieldsAsStrings = newFields.map((f) => fieldToString(f));
20
+ return { message: [], fix: newFieldsAsStrings, valid: true };
46
21
  }
47
22
  async function validate(record) {
48
23
  const newFields = await getFields(record, defaultTags, []);
49
24
  if (newFields.length === 0) {
50
- return {
51
- 'message': [],
52
- 'valid': true
53
- };
25
+ return { "message": [], "valid": true };
54
26
  }
55
- const messages = newFields.map(f => (0, _utils.fieldToString)(f));
56
- return {
57
- 'message': messages,
58
- 'valid': false
59
- };
27
+ const messages = newFields.map((f) => fieldToString(f));
28
+ return { "message": messages, "valid": false };
60
29
  }
61
30
  async function getFields(record, tags, fieldsToAdd) {
62
31
  const [currTag, ...remainingTags] = tags;
@@ -73,108 +42,73 @@ function _default() {
73
42
  return [];
74
43
  }
75
44
  const fields = record.get(tag);
76
- const finnishFields = fields.filter(f => isRelevantField(f, 'fin'));
77
- const swedishFields = fields.filter(f => isRelevantField(f, 'swe'));
45
+ const finnishFields = fields.filter((f) => isRelevantField(f, "fin"));
46
+ const swedishFields = fields.filter((f) => isRelevantField(f, "swe"));
78
47
  const finnishOnly = getMisses(finnishFields, swedishFields);
79
48
  const swedishOnly = getMisses(swedishFields, finnishFields);
80
-
81
- //console.log(` Looking at ${finnishOnly.length} + ${swedishOnly.length} fields`); // eslint-disable-line no-console
82
- return [...finnishOnly, ...swedishOnly].filter(f => tagAndFieldAgree(f));
49
+ return [...finnishOnly, ...swedishOnly].filter((f) => tagAndFieldAgree(f));
83
50
  function tagAndFieldAgree(field) {
84
- // Check that tag and $2 value are pairable:
85
- const lexData = getLexiconAndLanguage(field); // $2 data
51
+ const lexData = getLexiconAndLanguage(field);
86
52
  return expectedLex === lexData.lex;
87
53
  }
88
54
  }
89
55
  async function deriveMissingFields(record, tag) {
90
56
  const pairlessFields = getPairlessFinnishAndSwedishFields(record, tag);
91
-
92
- // Dunno how to handle loop+promise combo in our normal coding style. Spent half a day trying... (I reckon it takes like 2 minuts to do this properly...)
93
57
  let prefLabels = [];
94
58
  for (let i = 0; i < pairlessFields.length; i += 1) {
95
59
  prefLabels[i] = await getPrefLabel(pairlessFields[i]);
96
60
  }
97
61
  const missingFields = pairlessFields.map((f, i) => pairField(f, prefLabels[i]));
98
- return missingFields.filter(f => f);
62
+ return missingFields.filter((f) => f);
99
63
  }
100
64
  function pairField(field, prefLabels) {
101
65
  if (!prefLabels) {
102
- return undefined;
66
+ return void 0;
103
67
  }
104
- //console.log(`pairField() WP 1: ${fieldToString(field)}`); // eslint-disable-line no-console
105
68
  const lexAndLang = getLexiconAndLanguage(field);
106
- //console.log(`pairField() WP 2: ${JSON.stringify(lexAndLang)}`); // eslint-disable-line no-console
107
69
  const twoLetterOtherLang = swapLanguageCodeBetweenLanguages(changeAbbr(lexAndLang.lang));
108
- const prefLabel = prefLabels.find(l => l.lang === twoLetterOtherLang);
109
- //console.log(`pairField() WP 4: ${JSON.stringify(prefLabel)}`); // eslint-disable-line no-console
110
- const sfA = {
111
- 'code': 'a',
112
- 'value': prefLabel.value
113
- }; // field.subfields.field(sf => sf.code === 'a');
114
- const sf0 = (0, _clone.default)(field.subfields.find(sf => sf.code === '0'));
115
- const sf2 = {
116
- 'code': '2',
117
- 'value': `${lexAndLang.lex}/${lexAndLang.lang === 'fin' ? 'swe' : 'fin'}`
118
- }; // swap fin <=> swe
119
- const newField = {
120
- tag: field.tag,
121
- ind1: field.ind1,
122
- ind2: field.ind2,
123
- subfields: [sfA, sf2, sf0]
124
- };
70
+ const prefLabel = prefLabels.find((l) => l.lang === twoLetterOtherLang);
71
+ const sfA = { "code": "a", "value": prefLabel.value };
72
+ const sf0 = clone(field.subfields.find((sf) => sf.code === "0"));
73
+ const sf2 = { "code": "2", "value": `${lexAndLang.lex}/${lexAndLang.lang === "fin" ? "swe" : "fin"}` };
74
+ const newField = { tag: field.tag, ind1: field.ind1, ind2: field.ind2, subfields: [sfA, sf2, sf0] };
125
75
  return newField;
126
76
  }
127
77
  function getLexiconAndLanguage(field) {
128
- const subfield2 = field.subfields.find(sf => sf.code === '2');
129
- if (subfield2.value === 'slm/fin') {
130
- return {
131
- 'lex': 'slm',
132
- 'lang': 'fin'
133
- };
78
+ const subfield2 = field.subfields.find((sf) => sf.code === "2");
79
+ if (subfield2.value === "slm/fin") {
80
+ return { "lex": "slm", "lang": "fin" };
134
81
  }
135
- if (subfield2.value === 'slm/swe') {
136
- return {
137
- 'lex': 'slm',
138
- 'lang': 'swe'
139
- };
82
+ if (subfield2.value === "slm/swe") {
83
+ return { "lex": "slm", "lang": "swe" };
140
84
  }
141
- if (subfield2.value === 'yso/fin') {
142
- return {
143
- 'lex': 'yso',
144
- 'lang': 'fin'
145
- };
85
+ if (subfield2.value === "yso/fin") {
86
+ return { "lex": "yso", "lang": "fin" };
146
87
  }
147
- if (subfield2.value === 'yso/swe') {
148
- return {
149
- 'lex': 'yso',
150
- 'lang': 'swe'
151
- };
88
+ if (subfield2.value === "yso/swe") {
89
+ return { "lex": "yso", "lang": "swe" };
152
90
  }
153
91
  return {};
154
92
  }
155
93
  async function getPrefLabel(field) {
156
- // Tag vs $2 correlation has already been checked!
157
94
  const uri = fieldToUri(field);
158
95
  if (!uri) {
159
- // $0 is invalid or sumthing
160
- return undefined;
96
+ return void 0;
161
97
  }
162
98
  const prefLabels = await getTermData(uri);
163
99
  if (!prefLabels) {
164
- // Sanity check. Miss caused by illegal id etc.
165
- (0, _utils.nvdebug)(`No labels found for ${uri}`, debug);
166
- return undefined;
100
+ nvdebug(`No labels found for ${uri}`, debug);
101
+ return void 0;
167
102
  }
168
- const lexData = getLexiconAndLanguage(field); // $2 data
103
+ const lexData = getLexiconAndLanguage(field);
169
104
  const lang = changeAbbr(lexData.lang);
170
- const subfieldA = field.subfields.find(sf => sf.code === 'a');
171
- const prefLabel = prefLabels.find(pl => pl.lang === lang);
172
- //console.info(`Compare prefLabel '${prefLabel.value}' AND $a '${subfieldA.value}'`); // eslint-disable-line no-console
105
+ const subfieldA = field.subfields.find((sf) => sf.code === "a");
106
+ const prefLabel = prefLabels.find((pl) => pl.lang === lang);
173
107
  if (prefLabel.value === subfieldA.value) {
174
- (0, _utils.nvdebug)(`'${(0, _utils.fieldToString)(field)}' requires translating`, debug);
108
+ nvdebug(`'${fieldToString(field)}' requires translating`, debug);
175
109
  return prefLabels;
176
110
  }
177
- return undefined;
111
+ return void 0;
178
112
  }
179
113
  function swapLanguageCodeBetweenLanguages(code) {
180
114
  if (swapLanguageCode[code]) {
@@ -189,14 +123,10 @@ function _default() {
189
123
  return abbr;
190
124
  }
191
125
  function swaggerQuery(uri) {
192
- // This would work for only yso, not yso-paikat etc `https://api.finto.fi/rest/v1/yso/data?format=application%2Fjson&uri=${uri}`;
193
- return `https://api.finto.fi/rest/v1/data?uri=${uri}&format=application%2Fjson`; // This is simpler, but contains more irrelevant data
126
+ return `https://api.finto.fi/rest/v1/data?uri=${uri}&format=application%2Fjson`;
194
127
  }
195
128
  async function getTermData(uri) {
196
- //console.log(`getTermData(${uri})`); // eslint-disable-line no-console
197
129
  if (termCache[uri]) {
198
- // Don't think current implementation uses the cache any more.
199
- //console.log(`CACHED ${uri}`); // eslint-disable-line no-console
200
130
  return termCache[uri];
201
131
  }
202
132
  const tmp = await getTermDataFromFinto(uri);
@@ -204,85 +134,67 @@ function _default() {
204
134
  return tmp;
205
135
  }
206
136
  async function getTermDataFromFinto(uri) {
207
- const headers = {
208
- 'Accept': 'application/json'
209
- };
137
+ const headers = { "Accept": "application/json" };
210
138
  const uri2 = swaggerQuery(uri);
211
- const response = await fetch(uri2, {
212
- method: 'GET',
213
- headers
214
- });
139
+ const response = await fetch(uri2, { method: "GET", headers });
215
140
  if (!response.ok) {
216
- return undefined;
141
+ return void 0;
217
142
  }
218
143
  const json = await response.json();
219
144
  if (!json.graph) {
220
- return undefined;
145
+ return void 0;
221
146
  }
222
147
  const arr = json.graph;
223
- const [hit] = arr.filter(row => row.uri === uri);
224
- //console.log(`NEW JSON: ${JSON.stringify(hit.prefLabel)}`); // eslint-disable-line no-console
148
+ const [hit] = arr.filter((row) => row.uri === uri);
225
149
  return hit.prefLabel;
226
150
  }
227
151
  function fieldToUri(field) {
228
152
  const lex = mapTagToLex(field.tag);
229
- const subfield0 = field.subfields.find(sf => sf.code === '0');
230
- const id = subfield0.value.replace(/^[^0-9]+/u, '');
231
- if (lex === 'yso') {
232
- //return `http%3A%2F%2Fwww.yso.fi%2Fonto%2Fyso%2Fp${id}`;
153
+ const subfield0 = field.subfields.find((sf) => sf.code === "0");
154
+ const id = subfield0.value.replace(/^[^0-9]+/u, "");
155
+ if (lex === "yso") {
233
156
  return `http://www.yso.fi/onto/yso/p${id}`;
234
157
  }
235
- if (lex === 'slm') {
158
+ if (lex === "slm") {
236
159
  return `http://urn.fi/URN:NBN:fi:au:slm:s${id}`;
237
160
  }
238
- return undefined;
161
+ return void 0;
239
162
  }
240
163
  function isRelevantField(field, lang) {
241
- const fieldAsString = (0, _utils.fieldToString)(field);
242
-
243
- // We should probably allow an optional $8 as the first subfield.
164
+ const fieldAsString = fieldToString(field);
244
165
  if (!fieldAsString.match(/^... #7 ‡a [^‡]+ ‡2 [^‡]+ ‡0 [^‡]+(?: ‡9 [A-Z]+<(?:KEEP|DROP)>)*$/u)) {
245
166
  return false;
246
167
  }
247
168
  const lex = mapTagToLex(field.tag);
248
169
  const lexLang = `${lex}/${lang}`;
249
- if (!(0, _utils.fieldHasSubfield)(field, '2', lexLang)) {
170
+ if (!fieldHasSubfield(field, "2", lexLang)) {
250
171
  return false;
251
172
  }
252
173
  return fieldHasValidSubfield0(field);
253
174
  }
254
175
  function fieldHasValidSubfield0(field) {
255
176
  const lex = mapTagToLex(field.tag);
256
- const subfield0 = field.subfields.find(sf => sf.code === '0');
257
- if (lex === 'yso' && subfield0.value.match(/^http:\/\/www\.yso\.fi\/onto\/yso\/p[0-9]+$/u)) {
177
+ const subfield0 = field.subfields.find((sf) => sf.code === "0");
178
+ if (lex === "yso" && subfield0.value.match(/^http:\/\/www\.yso\.fi\/onto\/yso\/p[0-9]+$/u)) {
258
179
  return true;
259
180
  }
260
- if (lex === 'slm' && subfield0.value.match(/^http:\/\/urn\.fi\/URN:NBN:fi:au:slm:s[0-9]+$/u)) {
181
+ if (lex === "slm" && subfield0.value.match(/^http:\/\/urn\.fi\/URN:NBN:fi:au:slm:s[0-9]+$/u)) {
261
182
  return true;
262
183
  }
263
184
  return false;
264
185
  }
265
186
  function getMisses(fieldList1, fieldList2) {
266
- return fieldList1.filter(f => !hasSubfield0Match(f, fieldList2));
187
+ return fieldList1.filter((f) => !hasSubfield0Match(f, fieldList2));
267
188
  }
268
189
  function hasSubfield0Match(field, pairFields) {
269
- const subfield0 = field.subfields.find(sf => sf.code === '0');
270
- return pairFields.some(f => f.subfields.some(sf => sf.code === '0' && sf.value === subfield0.value));
190
+ const subfield0 = field.subfields.find((sf) => sf.code === "0");
191
+ return pairFields.some((f) => f.subfields.some((sf) => sf.code === "0" && sf.value === subfield0.value));
271
192
  }
272
193
  function mapTagToLex(tag) {
273
- if (tag === '655') {
274
- return 'slm';
194
+ if (tag === "655") {
195
+ return "slm";
275
196
  }
276
- return 'yso';
197
+ return "yso";
277
198
  }
278
-
279
- /*
280
- function getValidIdentifiers(record, tag, lang) {
281
- const lex = mapTagToLex(tag);
282
- const subfield2Value = `${lex}/${lang}`;
283
- const candFields = record.get(tag).filter(f => f.subfields.some(sf => sf.code === '2' && sf.value === subfield2Value)); // TODO: filter
284
- return [];
285
- }
286
- */
287
199
  }
288
- //# sourceMappingURL=translate-terms.js.map
200
+ //# sourceMappingURL=translate-terms.js.map