@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 +1,7 @@
1
- {"version":3,"file":"fix-33X.js","names":["_clone","_interopRequireDefault","require","_utils","_field33XUtils","e","__esModule","default","description","map336","map337","map338","_default","validate","fix","record","nvdebug","catLang","getCatalogingLanguage","fields","getRelevantFields","forEach","f","fixField","length","res","message","valid","originalStrings","map","fieldToString","clonedFields","clone","modifiedStrings","changes","str","i","getA","field","as","subfields","filter","code","undefined","mapTermToCode","term","tag","mapFieldToCode","subfieldA","value","get","tagToSubfield2","catalogingLanguage","newTerm","codeToTerm","push","map336CodeToTerm","map337CodeToTerm","map338CodeToTerm"],"sources":["../src/fix-33X.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport clone from 'clone';\nimport {fieldToString, getCatalogingLanguage, nvdebug} from './utils';\nimport {map336CodeToTerm, map337CodeToTerm, map338CodeToTerm} from './field33XUtils';\n\nconst description = 'Fix non-RDA 33X field(s)';\n\n\nconst map336 = {\n 'Bild (kartografisk ; att vidra)': 'crt',\n 'Bild (kartografisk ; rörlig)': 'crm',\n 'Bild (kartografisk)': 'cri',\n 'Bild (rörlig ; tredimensionell)': 'tdm',\n 'Bild (rörlig ; tvådimensionell)': 'tdi',\n 'Bild (still ; att vidra)': 'tci',\n 'Bild (still ; tredimensionell)': 'sti',\n 'Bild (still)': 'sti',\n 'Data': 'cod',\n 'Data (kartografinen)': 'crd',\n 'Dataset': 'cod',\n 'Dataset (kartografisk)': 'crd',\n 'Datorprogram': 'cop',\n 'Esine': 'tdf',\n 'Esine (kartografinen ; kosketeltava)': 'crn',\n 'Esine (kartografinen)': 'crf',\n 'Esine (kartogragrafinen ; kolmiulotteinen)': 'crf',\n 'Esine (kolmiulotteinen)': 'tdf',\n 'Esine (kosketeltava)': 'tcf',\n 'Flera innehållstyper': 'zzz',\n 'Föremal': 'tdf',\n 'Föremål (att vidra)': 'tcf',\n 'Föremål (kartografisk ; att vidra)': 'crn',\n 'Föremål (kartografisk ; tredimensionell)': 'crn',\n 'Föremål (tredimensionell)': 'tdf',\n 'Geräusche': 'snd',\n 'Kuva': 'sti',\n 'Kuva (kartografinen ; kosketeltava)': 'crt',\n 'Kuva (kartografinen ; liikkuva)': 'crm',\n 'Kuva (kartografinen)': 'cri',\n 'Kuva (liikkuva ; kaksiulotteinen)': 'tdi',\n 'Kuva (liikkuva ; kolmiulotteinen)': 'tdm',\n 'Kuva (still ; kaksiulotteinen)': 'sti',\n 'Kuva (still ; kolmiulotteinen)': 'sti',\n 'Kuva (still ; kosketeltava)': 'tci',\n 'Kuva (still)': 'sti',\n 'Liike (kosketeltava ; notatoitu)': 'tcn',\n 'Liike (notatoitu ; kosketeltava': 'tcn',\n 'Liike (notatoitu)': 'ntv',\n 'Ljud': 'snd',\n 'Musiikki (esitetty)': 'prm',\n 'Musiikki (kosketeltava ; notatoitu)': 'tcm',\n 'Musiikki (notatoitu ; kosketeltava)': 'tcm',\n 'Musiikki (notatoitu)': 'ntm',\n 'Musik (notation ; att vidra)': 'tcm',\n 'Musik (notation)': 'ntm',\n 'Musik (performance)': 'prm',\n 'Määrittelemätön': 'zzz',\n 'Määrittelemätön sisältötyyppi': 'zzz',\n 'Obestämd innehållstyp': 'zzz',\n 'Ospecificerad innehållstyp': 'zzz',\n 'Puhe': 'spw',\n 'Rörelse (notation ; att vidra)': 'tcn',\n 'Rörelse (notation)': 'ntv',\n 'Tal': 'spw',\n 'Teksti': 'txt',\n 'Teksti (kosketeltava); Text (att vidra)': 'tct',\n 'Text': 'txt',\n 'Tietokoneohjelma': 'cop',\n 'Useita sisältötyyppejä': 'zzz',\n 'Vild (still ; tvådimensionell)': 'sti',\n 'annan': 'xxx',\n 'cartographic dataset': 'crd',\n 'cartographic image': 'cri',\n 'cartographic moving image': 'crm',\n 'cartographic tactile image': 'crt',\n 'cartographic tactile three-dimensional form': 'crn',\n 'cartographic three-dimensional form': 'crf',\n 'cartographic three-dimensional tactile form': 'crn',\n 'computer dataset': 'cod',\n 'computer program': 'cop',\n 'dataset': 'cod',\n 'datorprogram': 'cop',\n 'digitaalinen data': 'cod',\n 'digitalt dataset': 'cod',\n 'esitetty musiikki': 'prm',\n 'framförd musik': 'prm',\n 'gesprochenes Wort': 'spw',\n 'kaksiulotteinen liikkuva kuva': 'tdi',\n 'kartografinen data': 'crd',\n 'kartografinen kolmiulotteinen muoto': 'crf',\n 'kartografinen kuva': 'cri',\n 'kartografinen liikkuva kuva': 'crm',\n 'kartografinen taktiili kolmiulotteinen muoto': 'crn',\n 'kartografinen taktiili kuva': 'crt',\n 'kartografisk bild': 'cri',\n 'kartografisk data': 'crd',\n 'kartografisk rörlig bild': 'crm',\n 'kartografisk taktil bild': 'crt',\n 'kartografisk taktil tredimensionell form': 'crn',\n 'kartografisk tredimensionell form': 'crf',\n 'kolmiulotteinen liikkuva kuva': 'tdm',\n 'kolmiulotteinen muoto': 'tdf',\n 'liikenotaatio': 'ntv',\n 'ljud': 'snd',\n 'muu': 'xxx',\n 'määrittelemätön': 'zzz',\n 'notated movement': 'ntv',\n 'notated music': 'ntm',\n 'noterad musik': 'ntm',\n 'nuottikirjoitus': 'ntm',\n 'ospecificerad': 'zzz',\n 'other': 'xxx',\n 'performed music': 'prm',\n 'puhe': 'spw',\n 'rörelsenotation': 'ntv',\n 'sounds': 'snd',\n 'spoken word': 'spw',\n 'still image': 'sti',\n 'stillbild': 'sti',\n 'stillkuva': 'sti',\n 'tactile image': 'tci',\n 'tactile notated movement': 'tcn',\n 'tactile notated music': 'tcm',\n 'tactile text': 'tct',\n 'tactile three-dimensional form': 'tcf',\n 'taktiili kolmiulotteinen muoto': 'tcf',\n 'taktiili kuva': 'tci',\n 'taktiili liikenotaatio': 'tcn',\n 'taktiili nuottikirjoitus': 'tcm',\n 'taktiili teksti': 'tct',\n 'taktil bild': 'tci',\n 'taktil musiknotation': 'tcm',\n 'taktil noterad rörelse': 'tcn',\n 'taktil text': 'tct',\n 'taktil tredimensionell form': 'tcf',\n 'tal': 'spw',\n 'teksti': 'txt',\n 'text': 'txt',\n 'texte': 'txt',\n 'texte tactile': 'tct',\n 'three-dimensional form': 'tdf',\n 'three-dimensional moving image': 'tdm',\n 'tietokoneohjelma': 'cop',\n 'tredimensionell form': 'tdf',\n 'tredimensionell rörlig bild': 'tdm',\n 'tvådimensionell rörlig bild': 'tdi',\n 'two-dimensional moving image': 'tdi',\n 'unbewegtes Bild': 'sti',\n 'unspecified': 'zzz',\n 'Ääni': 'snd',\n 'ääni': 'snd',\n 'Электронная программа': 'cop', // computer program\n 'Изображение (картографическое)': 'cri',\n 'Музыка (знаковая)': 'ntm', // notated music\n 'Музыка (исполнительская)': 'prm', // performed music\n 'Устная речь': 'spw',\n 'Изображение (неподвижное)': 'sti',\n 'Изображение (движущееся)': 'tdi', // 2D moving image\n 'Текст': 'txt',\n 'Текст (визуальный)': 'txt'\n};\n\nconst map337 = {\n 'Computermedien': 'c',\n 'Mikroform': 'h',\n 'annan': 'x',\n 'audio': 's',\n 'computer': 'c',\n 'dator': 'c',\n 'datoranvändbar': 'c',\n 'ei välittävää laitetta': 'n',\n 'elektroninen': 'c',\n 'elektronisk': 'c',\n 'heijastettava': 'g',\n 'ingen medietyp': 'n',\n 'käytettävissä ilman laitetta': 'n',\n 'microform': 'h',\n 'microscopic': 'p',\n 'mikroform': 'h',\n 'mikromuoto': 'h',\n 'mikroskooppinen': 'p',\n 'mikroskopisch': 'p',\n 'mikroskopisk': 'p',\n 'muu': 'x',\n 'määrittelemätön': 'z',\n 'määrittelemätön välittävä laite': 'z',\n 'oförmedlad': 'n',\n 'ohne Hilfsmittel zu benutzen': 'n',\n 'omedierad': 'n',\n 'ospecificerad': 'z',\n 'ospecificerad medietyp': 'z',\n 'other': 'x',\n 'projected': 'g',\n 'projektion': 'g',\n 'projicerad': 'g',\n 'projicerbar': 'g',\n 'projizierbar': 'g',\n 'stereografinen': 'e',\n 'stereografisch': 'e',\n 'stereografisk': 'e',\n 'stereographic': 'e',\n 'tietokonekäyttöinen': 'c',\n 'unmediated': 'n',\n 'unspecified': 'z',\n 'useita mediatyyppejä': 'z',\n 'video': 'v',\n 'övrig': 'x',\n // Cyrillic (sorted by result):\n 'электронн': 'c',\n 'электронный': 'c',\n 'непосредственн': 'n',\n 'непосредственный': 'n',\n 'аудио': 's', // audio\n 'видео': 'v'\n};\n\nconst map338 = {\n 'aperture card': 'ha',\n 'ark': 'nb',\n 'arkki': 'nb',\n 'audio belt': 'sb',\n 'audio cartridge': 'sg',\n 'audio cylinder': 'se',\n 'audio disc': 'sd',\n 'audio roll': 'sq',\n 'audio wire reel': 'sw',\n 'audiocassette': 'ss',\n 'audiotape reel': 'st',\n 'bildband': 'gf',\n 'bildbandsmagasin': 'gc',\n 'blädderblock': 'nn',\n 'card': 'no',\n 'computer card': 'ck',\n 'computer cartridge': 'cb',\n 'computer disc': 'cd',\n 'computer disc cartridge': 'ce',\n 'computer tape cartridge': 'ca',\n 'computer tape cassette': 'cf',\n 'computer tape reel': 'ch',\n 'datorbandmagasin': 'ca',\n 'datorbandspole': 'ch',\n 'datorkassett': 'cf',\n 'datorkort': 'ck',\n 'datorminnesmodul': 'cb',\n 'datorskiva': 'cd',\n 'datorskivmagasin': 'ce',\n 'dia': 'gs',\n 'diabild': 'gs',\n 'film cartridge': 'mc',\n 'film cassette': 'mf',\n 'film reel': 'mr',\n 'film roll': 'mo',\n 'filmikasetti': 'mf',\n 'filmikela': 'mr',\n 'filmiliuska': 'gd',\n 'filmirulla': 'mo',\n 'filmisilmukkakasetti': 'mc',\n 'filmkassett': 'mf',\n 'filmljudspole': 'si',\n 'filmmagasin': 'mc',\n 'filmremsa': 'gd',\n 'filmrulle': 'mo',\n 'filmslip': 'gd',\n 'filmspole': 'mr',\n 'filmstrip': 'gf',\n 'filmstrip cartridge': 'gc',\n 'flipchart': 'nn',\n 'fönsterkort': 'ha',\n 'föremål': 'nr',\n 'ikkunakortti': 'ha',\n 'kort': 'no',\n 'kortti': 'no',\n 'lehtiötaulu': 'nn',\n 'ljudcylinder': 'se',\n 'ljudkassett': 'ss',\n 'ljudmagasin': 'sg',\n 'ljudrulle': 'sq',\n 'ljudskiva': 'sd',\n 'ljudslinga': 'sb',\n 'ljudspole': 'st',\n 'ljudtråd': 'sw',\n 'microfiche': 'he',\n 'microfiche cassette': 'hf',\n 'microfilm cartridge': 'hb',\n 'microfilm cassette': 'hc',\n 'microfilm reel': 'hd',\n 'microfilm roll': 'hj',\n 'microfilm slip': 'hh',\n 'microopaque': 'hg',\n 'microscope slide': 'pp',\n 'mikrofiche': 'he',\n 'mikrofiche (ogenomskinlig)': 'hg',\n 'mikrofichekassett': 'hf',\n 'mikrofilmikasetti': 'hc',\n 'mikrofilmikela': 'hd',\n 'mikrofilmiliuska': 'hh',\n 'mikrofilmirulla': 'hj',\n 'mikrofilmisilmukkakasetti': 'hb',\n 'mikrofilmskassett': 'hc',\n 'mikrofilmsmagasin': 'hb',\n 'mikrofilmsremsa': 'hh',\n 'mikrofilmsrulle': 'hj',\n 'mikrofilmsspole': 'hd',\n 'mikrokortti': 'he',\n 'mikrokortti (läpinäkymätön)': 'hg',\n 'mikrokorttikasetti': 'hf',\n 'mikroskoperingspreparat': 'pp',\n 'muistikortti': 'ck',\n 'määrittelemätön': 'zu',\n 'nide': 'nc',\n 'object': 'nr',\n 'objekti': 'nr',\n 'online resource': 'cr',\n 'onlineresurs': 'cr',\n 'ospecificerad': 'zu',\n 'overhead transparency': 'gt',\n 'piirikotelo': 'cb',\n 'piirtoheitinkalvo': 'gt',\n 'preparaattilasi': 'pp',\n 'raina': 'gf',\n 'rainakasetti': 'gc',\n 'roll': 'na',\n 'rulla': 'na',\n 'rulle': 'na',\n 'sheet': 'nb',\n 'slide': 'gs',\n 'sound-track reel': 'si',\n 'stereografinen kortti': 'eh',\n 'stereografinen levy': 'es',\n 'stereografisk skiva': 'es',\n 'stereografiskt kort': 'eh',\n 'stereograph card': 'eh',\n 'stereograph disc': 'es',\n 'tietokasetti': 'cf',\n 'tietolevy': 'cd',\n 'tietolevykotelo': 'ce',\n 'tietonauhakela': 'ch',\n 'tietonauhan silmukkakasetti': 'ca',\n 'transparang': 'gt',\n 'unspecified': 'zu',\n 'verkkoaineisto': 'cr',\n 'video cartridge': 'vc',\n 'videocassette': 'vf',\n 'videodisc': 'vd',\n 'videokasetti': 'vf',\n 'videokassett': 'vf',\n 'videokela': 'vr',\n 'videolevy': 'vd',\n 'videomagasin': 'vc',\n 'videosilmukkakasetti': 'vc',\n 'videoskiva': 'vd',\n 'videospole': 'vr',\n 'videotape reel': 'vr',\n 'volume': 'nc',\n 'volym': 'nc',\n 'äänihihna': 'sb',\n 'äänikasetti': 'ss',\n 'äänikela': 'st',\n 'äänilankakela': 'sw',\n 'äänilevy': 'sd',\n 'ääniraitakela': 'si',\n 'äänirulla': 'sq',\n 'äänisilmukkakasetti': 'sg',\n 'äänisylinteri': 'se'\n};\n\n// const multimediaRegexp = /multimedia/ui;\n\nexport default function () {\n\n return {\n description, validate, fix\n };\n\n function fix(record) {\n nvdebug(`FIX ${description}...`);\n const catLang = getCatalogingLanguage(record) || 'fin';\n const fields = getRelevantFields(record);\n fields.forEach(f => fixField(f, catLang)); // eslint-disable-line array-callback-return\n nvdebug(` GOT ${fields.length}...`);\n // FFS: we actually need newFields array here! Videogame, for example, might be\n // 336 ## ‡a kaksiulotteinen liikkuva kuva ‡b tdi ‡2 rdacontent\n // 336 ## ‡a tietokoneohjelma ‡b cop ‡2 rdacontent\n const res = {message: [], fix: [], valid: true};\n\n return res;\n }\n\n function validate(record) {\n nvdebug(`VALIDATE ${description}...`); // NOT READY YET\n const catLang = getCatalogingLanguage(record) || 'fin';\n const fields = getRelevantFields(record);\n if (fields.length === 0) {\n return {message: [], valid: true};\n }\n const originalStrings = fields.map(f => fieldToString(f));\n const clonedFields = fields.map(f => clone(f));\n clonedFields.forEach(f => fixField(f, catLang)); // eslint-disable-line array-callback-return\n const modifiedStrings = clonedFields.map(f => fieldToString(f));\n\n const changes = originalStrings.map((str, i) => `'${str}' => '${modifiedStrings[i]}'`);\n\n return {message: changes, valid: false};\n }\n\n\n function getA(field) {\n const as = field.subfields.filter(f => f.code === 'a');\n if (as.length === 1) {\n return as[0];\n }\n return undefined;\n }\n\n\n function mapTermToCode(term, tag) {\n nvdebug(`TERM/${tag}: '${term}'`);\n if (tag === '336' && term in map336) {\n return map336[term];\n }\n if (tag === '337' && term in map337) {\n return map337[term];\n }\n if (tag === '338' && term in map338) {\n return map338[term];\n }\n return undefined;\n }\n\n function mapFieldToCode(field) {\n const subfieldA = getA(field);\n if (subfieldA) {\n return mapTermToCode(subfieldA.value, field.tag);\n }\n return undefined;\n }\n\n function getRelevantFields(record) {\n const fields = record.get('33[678]');\n // Currently not handline $3 etc\n return fields.filter(f => f.subfields.length === 1 && mapFieldToCode(f));\n }\n\n function tagToSubfield2(tag) {\n if (tag === '336') {\n return {'code': '2', 'value': 'rdacontent'};\n }\n if (tag === '337') {\n return {'code': '2', 'value': 'rdamedia'};\n }\n if (tag === '338') {\n return {'code': '2', 'value': 'rdacarrier'};\n }\n }\n\n function fixField(field, catalogingLanguage = 'fin') {\n const subfieldA = getA(field);\n if (!subfieldA) {\n return;\n }\n const code = mapTermToCode(subfieldA.value, field.tag);\n if (!code) {\n return;\n }\n const newTerm = codeToTerm(code);\n if (!newTerm) {\n return;\n }\n\n subfieldA.value = newTerm;\n field.subfields.push({'code': 'b', 'value': code});\n field.subfields.push(tagToSubfield2(field.tag));\n\n function codeToTerm(code) {\n if (field.tag === '336') {\n return map336CodeToTerm(code, catalogingLanguage);\n }\n if (field.tag === '337') {\n return map337CodeToTerm(code, catalogingLanguage);\n }\n if (field.tag === '338') {\n return map338CodeToTerm(code, catalogingLanguage);\n }\n return undefined;\n }\n }\n\n}\n\n"],"mappings":"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","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/fix-33X.js"],
4
+ "sourcesContent": ["//import createDebugLogger from 'debug';\nimport clone from 'clone';\nimport {fieldToString, getCatalogingLanguage, nvdebug} from './utils.js';\nimport {map336CodeToTerm, map337CodeToTerm, map338CodeToTerm} from './field33XUtils.js';\n\nconst description = 'Fix non-RDA 33X field(s)';\n\n\nconst map336 = {\n 'Bild (kartografisk ; att vidra)': 'crt',\n 'Bild (kartografisk ; r\u00F6rlig)': 'crm',\n 'Bild (kartografisk)': 'cri',\n 'Bild (r\u00F6rlig ; tredimensionell)': 'tdm',\n 'Bild (r\u00F6rlig ; tv\u00E5dimensionell)': 'tdi',\n 'Bild (still ; att vidra)': 'tci',\n 'Bild (still ; tredimensionell)': 'sti',\n 'Bild (still)': 'sti',\n 'Data': 'cod',\n 'Data (kartografinen)': 'crd',\n 'Dataset': 'cod',\n 'Dataset (kartografisk)': 'crd',\n 'Datorprogram': 'cop',\n 'Esine': 'tdf',\n 'Esine (kartografinen ; kosketeltava)': 'crn',\n 'Esine (kartografinen)': 'crf',\n 'Esine (kartogragrafinen ; kolmiulotteinen)': 'crf',\n 'Esine (kolmiulotteinen)': 'tdf',\n 'Esine (kosketeltava)': 'tcf',\n 'Flera inneh\u00E5llstyper': 'zzz',\n 'F\u00F6remal': 'tdf',\n 'F\u00F6rem\u00E5l (att vidra)': 'tcf',\n 'F\u00F6rem\u00E5l (kartografisk ; att vidra)': 'crn',\n 'F\u00F6rem\u00E5l (kartografisk ; tredimensionell)': 'crn',\n 'F\u00F6rem\u00E5l (tredimensionell)': 'tdf',\n 'Ger\u00E4usche': 'snd',\n 'Kuva': 'sti',\n 'Kuva (kartografinen ; kosketeltava)': 'crt',\n 'Kuva (kartografinen ; liikkuva)': 'crm',\n 'Kuva (kartografinen)': 'cri',\n 'Kuva (liikkuva ; kaksiulotteinen)': 'tdi',\n 'Kuva (liikkuva ; kolmiulotteinen)': 'tdm',\n 'Kuva (still ; kaksiulotteinen)': 'sti',\n 'Kuva (still ; kolmiulotteinen)': 'sti',\n 'Kuva (still ; kosketeltava)': 'tci',\n 'Kuva (still)': 'sti',\n 'Liike (kosketeltava ; notatoitu)': 'tcn',\n 'Liike (notatoitu ; kosketeltava': 'tcn',\n 'Liike (notatoitu)': 'ntv',\n 'Ljud': 'snd',\n 'Musiikki (esitetty)': 'prm',\n 'Musiikki (kosketeltava ; notatoitu)': 'tcm',\n 'Musiikki (notatoitu ; kosketeltava)': 'tcm',\n 'Musiikki (notatoitu)': 'ntm',\n 'Musik (notation ; att vidra)': 'tcm',\n 'Musik (notation)': 'ntm',\n 'Musik (performance)': 'prm',\n 'M\u00E4\u00E4rittelem\u00E4t\u00F6n': 'zzz',\n 'M\u00E4\u00E4rittelem\u00E4t\u00F6n sis\u00E4lt\u00F6tyyppi': 'zzz',\n 'Obest\u00E4md inneh\u00E5llstyp': 'zzz',\n 'Ospecificerad inneh\u00E5llstyp': 'zzz',\n 'Puhe': 'spw',\n 'R\u00F6relse (notation ; att vidra)': 'tcn',\n 'R\u00F6relse (notation)': 'ntv',\n 'Tal': 'spw',\n 'Teksti': 'txt',\n 'Teksti (kosketeltava); Text (att vidra)': 'tct',\n 'Text': 'txt',\n 'Tietokoneohjelma': 'cop',\n 'Useita sis\u00E4lt\u00F6tyyppej\u00E4': 'zzz',\n 'Vild (still ; tv\u00E5dimensionell)': 'sti',\n 'annan': 'xxx',\n 'cartographic dataset': 'crd',\n 'cartographic image': 'cri',\n 'cartographic moving image': 'crm',\n 'cartographic tactile image': 'crt',\n 'cartographic tactile three-dimensional form': 'crn',\n 'cartographic three-dimensional form': 'crf',\n 'cartographic three-dimensional tactile form': 'crn',\n 'computer dataset': 'cod',\n 'computer program': 'cop',\n 'dataset': 'cod',\n 'datorprogram': 'cop',\n 'digitaalinen data': 'cod',\n 'digitalt dataset': 'cod',\n 'esitetty musiikki': 'prm',\n 'framf\u00F6rd musik': 'prm',\n 'gesprochenes Wort': 'spw',\n 'kaksiulotteinen liikkuva kuva': 'tdi',\n 'kartografinen data': 'crd',\n 'kartografinen kolmiulotteinen muoto': 'crf',\n 'kartografinen kuva': 'cri',\n 'kartografinen liikkuva kuva': 'crm',\n 'kartografinen taktiili kolmiulotteinen muoto': 'crn',\n 'kartografinen taktiili kuva': 'crt',\n 'kartografisk bild': 'cri',\n 'kartografisk data': 'crd',\n 'kartografisk r\u00F6rlig bild': 'crm',\n 'kartografisk taktil bild': 'crt',\n 'kartografisk taktil tredimensionell form': 'crn',\n 'kartografisk tredimensionell form': 'crf',\n 'kolmiulotteinen liikkuva kuva': 'tdm',\n 'kolmiulotteinen muoto': 'tdf',\n 'liikenotaatio': 'ntv',\n 'ljud': 'snd',\n 'muu': 'xxx',\n 'm\u00E4\u00E4rittelem\u00E4t\u00F6n': 'zzz',\n 'notated movement': 'ntv',\n 'notated music': 'ntm',\n 'noterad musik': 'ntm',\n 'nuottikirjoitus': 'ntm',\n 'ospecificerad': 'zzz',\n 'other': 'xxx',\n 'performed music': 'prm',\n 'puhe': 'spw',\n 'r\u00F6relsenotation': 'ntv',\n 'sounds': 'snd',\n 'spoken word': 'spw',\n 'still image': 'sti',\n 'stillbild': 'sti',\n 'stillkuva': 'sti',\n 'tactile image': 'tci',\n 'tactile notated movement': 'tcn',\n 'tactile notated music': 'tcm',\n 'tactile text': 'tct',\n 'tactile three-dimensional form': 'tcf',\n 'taktiili kolmiulotteinen muoto': 'tcf',\n 'taktiili kuva': 'tci',\n 'taktiili liikenotaatio': 'tcn',\n 'taktiili nuottikirjoitus': 'tcm',\n 'taktiili teksti': 'tct',\n 'taktil bild': 'tci',\n 'taktil musiknotation': 'tcm',\n 'taktil noterad r\u00F6relse': 'tcn',\n 'taktil text': 'tct',\n 'taktil tredimensionell form': 'tcf',\n 'tal': 'spw',\n 'teksti': 'txt',\n 'text': 'txt',\n 'texte': 'txt',\n 'texte tactile': 'tct',\n 'three-dimensional form': 'tdf',\n 'three-dimensional moving image': 'tdm',\n 'tietokoneohjelma': 'cop',\n 'tredimensionell form': 'tdf',\n 'tredimensionell r\u00F6rlig bild': 'tdm',\n 'tv\u00E5dimensionell r\u00F6rlig bild': 'tdi',\n 'two-dimensional moving image': 'tdi',\n 'unbewegtes Bild': 'sti',\n 'unspecified': 'zzz',\n '\u00C4\u00E4ni': 'snd',\n '\u00E4\u00E4ni': 'snd',\n '\u042D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u0430\u044F \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u0430': 'cop', // computer program\n '\u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 (\u043A\u0430\u0440\u0442\u043E\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043A\u043E\u0435)': 'cri',\n '\u041C\u0443\u0437\u044B\u043A\u0430 (\u0437\u043D\u0430\u043A\u043E\u0432\u0430\u044F)': 'ntm', // notated music\n '\u041C\u0443\u0437\u044B\u043A\u0430 (\u0438\u0441\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u0430\u044F)': 'prm', // performed music\n '\u0423\u0441\u0442\u043D\u0430\u044F \u0440\u0435\u0447\u044C': 'spw',\n '\u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 (\u043D\u0435\u043F\u043E\u0434\u0432\u0438\u0436\u043D\u043E\u0435)': 'sti',\n '\u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 (\u0434\u0432\u0438\u0436\u0443\u0449\u0435\u0435\u0441\u044F)': 'tdi', // 2D moving image\n '\u0422\u0435\u043A\u0441\u0442': 'txt',\n '\u0422\u0435\u043A\u0441\u0442 (\u0432\u0438\u0437\u0443\u0430\u043B\u044C\u043D\u044B\u0439)': 'txt'\n};\n\nconst map337 = {\n 'Computermedien': 'c',\n 'Mikroform': 'h',\n 'annan': 'x',\n 'audio': 's',\n 'computer': 'c',\n 'dator': 'c',\n 'datoranv\u00E4ndbar': 'c',\n 'ei v\u00E4litt\u00E4v\u00E4\u00E4 laitetta': 'n',\n 'elektroninen': 'c',\n 'elektronisk': 'c',\n 'heijastettava': 'g',\n 'ingen medietyp': 'n',\n 'k\u00E4ytett\u00E4viss\u00E4 ilman laitetta': 'n',\n 'microform': 'h',\n 'microscopic': 'p',\n 'mikroform': 'h',\n 'mikromuoto': 'h',\n 'mikroskooppinen': 'p',\n 'mikroskopisch': 'p',\n 'mikroskopisk': 'p',\n 'muu': 'x',\n 'm\u00E4\u00E4rittelem\u00E4t\u00F6n': 'z',\n 'm\u00E4\u00E4rittelem\u00E4t\u00F6n v\u00E4litt\u00E4v\u00E4 laite': 'z',\n 'of\u00F6rmedlad': 'n',\n 'ohne Hilfsmittel zu benutzen': 'n',\n 'omedierad': 'n',\n 'ospecificerad': 'z',\n 'ospecificerad medietyp': 'z',\n 'other': 'x',\n 'projected': 'g',\n 'projektion': 'g',\n 'projicerad': 'g',\n 'projicerbar': 'g',\n 'projizierbar': 'g',\n 'stereografinen': 'e',\n 'stereografisch': 'e',\n 'stereografisk': 'e',\n 'stereographic': 'e',\n 'tietokonek\u00E4ytt\u00F6inen': 'c',\n 'unmediated': 'n',\n 'unspecified': 'z',\n 'useita mediatyyppej\u00E4': 'z',\n 'video': 'v',\n '\u00F6vrig': 'x',\n // Cyrillic (sorted by result):\n '\u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D': 'c',\n '\u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u044B\u0439': 'c',\n '\u043D\u0435\u043F\u043E\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043D\u043D': 'n',\n '\u043D\u0435\u043F\u043E\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0439': 'n',\n '\u0430\u0443\u0434\u0438\u043E': 's', // audio\n '\u0432\u0438\u0434\u0435\u043E': 'v'\n};\n\nconst map338 = {\n 'aperture card': 'ha',\n 'ark': 'nb',\n 'arkki': 'nb',\n 'audio belt': 'sb',\n 'audio cartridge': 'sg',\n 'audio cylinder': 'se',\n 'audio disc': 'sd',\n 'audio roll': 'sq',\n 'audio wire reel': 'sw',\n 'audiocassette': 'ss',\n 'audiotape reel': 'st',\n 'bildband': 'gf',\n 'bildbandsmagasin': 'gc',\n 'bl\u00E4dderblock': 'nn',\n 'card': 'no',\n 'computer card': 'ck',\n 'computer cartridge': 'cb',\n 'computer disc': 'cd',\n 'computer disc cartridge': 'ce',\n 'computer tape cartridge': 'ca',\n 'computer tape cassette': 'cf',\n 'computer tape reel': 'ch',\n 'datorbandmagasin': 'ca',\n 'datorbandspole': 'ch',\n 'datorkassett': 'cf',\n 'datorkort': 'ck',\n 'datorminnesmodul': 'cb',\n 'datorskiva': 'cd',\n 'datorskivmagasin': 'ce',\n 'dia': 'gs',\n 'diabild': 'gs',\n 'film cartridge': 'mc',\n 'film cassette': 'mf',\n 'film reel': 'mr',\n 'film roll': 'mo',\n 'filmikasetti': 'mf',\n 'filmikela': 'mr',\n 'filmiliuska': 'gd',\n 'filmirulla': 'mo',\n 'filmisilmukkakasetti': 'mc',\n 'filmkassett': 'mf',\n 'filmljudspole': 'si',\n 'filmmagasin': 'mc',\n 'filmremsa': 'gd',\n 'filmrulle': 'mo',\n 'filmslip': 'gd',\n 'filmspole': 'mr',\n 'filmstrip': 'gf',\n 'filmstrip cartridge': 'gc',\n 'flipchart': 'nn',\n 'f\u00F6nsterkort': 'ha',\n 'f\u00F6rem\u00E5l': 'nr',\n 'ikkunakortti': 'ha',\n 'kort': 'no',\n 'kortti': 'no',\n 'lehti\u00F6taulu': 'nn',\n 'ljudcylinder': 'se',\n 'ljudkassett': 'ss',\n 'ljudmagasin': 'sg',\n 'ljudrulle': 'sq',\n 'ljudskiva': 'sd',\n 'ljudslinga': 'sb',\n 'ljudspole': 'st',\n 'ljudtr\u00E5d': 'sw',\n 'microfiche': 'he',\n 'microfiche cassette': 'hf',\n 'microfilm cartridge': 'hb',\n 'microfilm cassette': 'hc',\n 'microfilm reel': 'hd',\n 'microfilm roll': 'hj',\n 'microfilm slip': 'hh',\n 'microopaque': 'hg',\n 'microscope slide': 'pp',\n 'mikrofiche': 'he',\n 'mikrofiche (ogenomskinlig)': 'hg',\n 'mikrofichekassett': 'hf',\n 'mikrofilmikasetti': 'hc',\n 'mikrofilmikela': 'hd',\n 'mikrofilmiliuska': 'hh',\n 'mikrofilmirulla': 'hj',\n 'mikrofilmisilmukkakasetti': 'hb',\n 'mikrofilmskassett': 'hc',\n 'mikrofilmsmagasin': 'hb',\n 'mikrofilmsremsa': 'hh',\n 'mikrofilmsrulle': 'hj',\n 'mikrofilmsspole': 'hd',\n 'mikrokortti': 'he',\n 'mikrokortti (l\u00E4pin\u00E4kym\u00E4t\u00F6n)': 'hg',\n 'mikrokorttikasetti': 'hf',\n 'mikroskoperingspreparat': 'pp',\n 'muistikortti': 'ck',\n 'm\u00E4\u00E4rittelem\u00E4t\u00F6n': 'zu',\n 'nide': 'nc',\n 'object': 'nr',\n 'objekti': 'nr',\n 'online resource': 'cr',\n 'onlineresurs': 'cr',\n 'ospecificerad': 'zu',\n 'overhead transparency': 'gt',\n 'piirikotelo': 'cb',\n 'piirtoheitinkalvo': 'gt',\n 'preparaattilasi': 'pp',\n 'raina': 'gf',\n 'rainakasetti': 'gc',\n 'roll': 'na',\n 'rulla': 'na',\n 'rulle': 'na',\n 'sheet': 'nb',\n 'slide': 'gs',\n 'sound-track reel': 'si',\n 'stereografinen kortti': 'eh',\n 'stereografinen levy': 'es',\n 'stereografisk skiva': 'es',\n 'stereografiskt kort': 'eh',\n 'stereograph card': 'eh',\n 'stereograph disc': 'es',\n 'tietokasetti': 'cf',\n 'tietolevy': 'cd',\n 'tietolevykotelo': 'ce',\n 'tietonauhakela': 'ch',\n 'tietonauhan silmukkakasetti': 'ca',\n 'transparang': 'gt',\n 'unspecified': 'zu',\n 'verkkoaineisto': 'cr',\n 'video cartridge': 'vc',\n 'videocassette': 'vf',\n 'videodisc': 'vd',\n 'videokasetti': 'vf',\n 'videokassett': 'vf',\n 'videokela': 'vr',\n 'videolevy': 'vd',\n 'videomagasin': 'vc',\n 'videosilmukkakasetti': 'vc',\n 'videoskiva': 'vd',\n 'videospole': 'vr',\n 'videotape reel': 'vr',\n 'volume': 'nc',\n 'volym': 'nc',\n '\u00E4\u00E4nihihna': 'sb',\n '\u00E4\u00E4nikasetti': 'ss',\n '\u00E4\u00E4nikela': 'st',\n '\u00E4\u00E4nilankakela': 'sw',\n '\u00E4\u00E4nilevy': 'sd',\n '\u00E4\u00E4niraitakela': 'si',\n '\u00E4\u00E4nirulla': 'sq',\n '\u00E4\u00E4nisilmukkakasetti': 'sg',\n '\u00E4\u00E4nisylinteri': 'se'\n};\n\n// const multimediaRegexp = /multimedia/ui;\n\nexport default function () {\n\n return {\n description, validate, fix\n };\n\n function fix(record) {\n nvdebug(`FIX ${description}...`);\n const catLang = getCatalogingLanguage(record) || 'fin';\n const fields = getRelevantFields(record);\n fields.forEach(f => fixField(f, catLang));\n nvdebug(` GOT ${fields.length}...`);\n // FFS: we actually need newFields array here! Videogame, for example, might be\n // 336 ## \u2021a kaksiulotteinen liikkuva kuva \u2021b tdi \u20212 rdacontent\n // 336 ## \u2021a tietokoneohjelma \u2021b cop \u20212 rdacontent\n const res = {message: [], fix: [], valid: true};\n\n return res;\n }\n\n function validate(record) {\n nvdebug(`VALIDATE ${description}...`); // NOT READY YET\n const catLang = getCatalogingLanguage(record) || 'fin';\n const fields = getRelevantFields(record);\n if (fields.length === 0) {\n return {message: [], valid: true};\n }\n const originalStrings = fields.map(f => fieldToString(f));\n const clonedFields = fields.map(f => clone(f));\n clonedFields.forEach(f => fixField(f, catLang));\n const modifiedStrings = clonedFields.map(f => fieldToString(f));\n\n const changes = originalStrings.map((str, i) => `'${str}' => '${modifiedStrings[i]}'`);\n\n return {message: changes, valid: false};\n }\n\n\n function getA(field) {\n const as = field.subfields.filter(f => f.code === 'a');\n if (as.length === 1) {\n return as[0];\n }\n return undefined;\n }\n\n\n function mapTermToCode(term, tag) {\n nvdebug(`TERM/${tag}: '${term}'`);\n if (tag === '336' && term in map336) {\n return map336[term];\n }\n if (tag === '337' && term in map337) {\n return map337[term];\n }\n if (tag === '338' && term in map338) {\n return map338[term];\n }\n return undefined;\n }\n\n function mapFieldToCode(field) {\n const subfieldA = getA(field);\n if (subfieldA) {\n return mapTermToCode(subfieldA.value, field.tag);\n }\n return undefined;\n }\n\n function getRelevantFields(record) {\n const fields = record.get('33[678]');\n // Currently not handline $3 etc\n return fields.filter(f => f.subfields.length === 1 && mapFieldToCode(f));\n }\n\n function tagToSubfield2(tag) {\n if (tag === '336') {\n return {'code': '2', 'value': 'rdacontent'};\n }\n if (tag === '337') {\n return {'code': '2', 'value': 'rdamedia'};\n }\n if (tag === '338') {\n return {'code': '2', 'value': 'rdacarrier'};\n }\n }\n\n function fixField(field, catalogingLanguage = 'fin') {\n const subfieldA = getA(field);\n if (!subfieldA) {\n return;\n }\n const code = mapTermToCode(subfieldA.value, field.tag);\n if (!code) {\n return;\n }\n const newTerm = codeToTerm(code);\n if (!newTerm) {\n return;\n }\n\n subfieldA.value = newTerm;\n field.subfields.push({'code': 'b', 'value': code});\n field.subfields.push(tagToSubfield2(field.tag));\n\n function codeToTerm(code) {\n if (field.tag === '336') {\n return map336CodeToTerm(code, catalogingLanguage);\n }\n if (field.tag === '337') {\n return map337CodeToTerm(code, catalogingLanguage);\n }\n if (field.tag === '338') {\n return map338CodeToTerm(code, catalogingLanguage);\n }\n return undefined;\n }\n }\n\n}\n\n"],
5
+ "mappings": "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",
6
+ "names": ["code"]
7
+ }
@@ -0,0 +1,39 @@
1
+ import assert from "node:assert";
2
+ import { MarcRecord } from "@natlibfi/marc-record";
3
+ import validatorFactory from "./fix-33X.js";
4
+ import { READERS } from "@natlibfi/fixura";
5
+ import generateTests from "@natlibfi/fixugen";
6
+ generateTests({
7
+ callback,
8
+ path: [import.meta.dirname, "..", "test-fixtures", "fix-33X"],
9
+ useMetadataFile: true,
10
+ recurse: false,
11
+ fixura: {
12
+ reader: READERS.JSON
13
+ },
14
+ hooks: {
15
+ before: async () => {
16
+ testValidatorFactory();
17
+ }
18
+ }
19
+ });
20
+ async function testValidatorFactory() {
21
+ const validator = await validatorFactory();
22
+ assert.equal(typeof validator, "objecr");
23
+ assert.equal(typeof validator.description, "string");
24
+ assert.equal(typeof validator.validate, "function");
25
+ assert.equal(typeof validator.fix, "function");
26
+ }
27
+ async function callback({ getFixture, fix = false }) {
28
+ const validator = await validatorFactory();
29
+ const record = new MarcRecord(getFixture("record.json"));
30
+ const expectedResult = getFixture("expectedResult.json");
31
+ if (!fix) {
32
+ const result = await validator.validate(record);
33
+ assert.deepEqual(result, expectedResult);
34
+ return;
35
+ }
36
+ await validator.fix(record);
37
+ assert.deepEqual(record, expectedResult);
38
+ }
39
+ //# sourceMappingURL=fix-33X.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/fix-33X.test.js"],
4
+ "sourcesContent": ["import assert from 'node:assert';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './fix-33X.js';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\n\ngenerateTests({\n callback,\n path: [import.meta.dirname, '..', 'test-fixtures', 'fix-33X'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n hooks: {\n before: async () => {\n testValidatorFactory();\n }\n }\n});\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n assert.equal(typeof validator, 'objecr');\n assert.equal(typeof validator.description, 'string');\n assert.equal(typeof validator.validate, 'function');\n assert.equal(typeof validator.fix, '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 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;AAE1B,cAAc;AAAA,EACZ;AAAA,EACA,MAAM,CAAC,YAAY,SAAS,MAAM,iBAAiB,SAAS;AAAA,EAC5D,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;AACF,CAAC;AAED,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;AAClD,SAAO,MAAM,OAAO,UAAU,KAAK,UAAU;AAC/C;AAEA,eAAe,SAAS,EAAC,YAAY,MAAM,MAAK,GAAG;AACjD,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,32 +1,12 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = _default;
7
- // Fix country codes in 008/15-17
8
- //
9
- // This is proto. Extend later...
10
- //
11
- // Author(s): Nicholas Volk
12
-
13
- //import createDebugLogger from 'debug';
14
- //import {fieldToString, nvdebug} from './utils';
15
-
16
- function _default() {
1
+ export default function() {
17
2
  return {
18
- description: 'Fix deprecated country codes',
3
+ description: "Fix deprecated country codes",
19
4
  validate,
20
5
  fix
21
6
  };
22
7
  function fix(record) {
23
- //nvdebug(`FIX ME`);
24
- const res = {
25
- message: [],
26
- fix: [],
27
- valid: true
28
- };
29
- const [field008] = record.get('008');
8
+ const res = { message: [], fix: [], valid: true };
9
+ const [field008] = record.get("008");
30
10
  if (!field008) {
31
11
  return res;
32
12
  }
@@ -34,11 +14,8 @@ function _default() {
34
14
  return res;
35
15
  }
36
16
  function validate(record) {
37
- const res = {
38
- message: [],
39
- valid: true
40
- };
41
- const [field008] = record.get('008');
17
+ const res = { message: [], valid: true };
18
+ const [field008] = record.get("008");
42
19
  if (!field008) {
43
20
  return res;
44
21
  }
@@ -60,35 +37,28 @@ function _default() {
60
37
  }
61
38
  }
62
39
  function getCountryCodeFromField008(field) {
63
- return field.value.substring(15, 18); // return 008/15-17
40
+ return field.value.substring(15, 18);
64
41
  }
65
42
  function deprecatedCountryCodeToCurrentCountryCode(countryCode) {
66
- if (countryCode === 'air') {
67
- // Armenia
68
- return 'ai ';
43
+ if (countryCode === "air") {
44
+ return "ai ";
69
45
  }
70
- if (countryCode === 'ajr') {
71
- // Azerbaidzan
72
- return 'aj ';
46
+ if (countryCode === "ajr") {
47
+ return "aj ";
73
48
  }
74
- // Australia
75
- if (['aca', 'qua', 'tma', 'vra', 'wea', 'xga', 'xna', 'xoa', 'xra'].includes(countryCode)) {
76
- return 'at ';
49
+ if (["aca", "qua", "tma", "vra", "wea", "xga", "xna", "xoa", "xra"].includes(countryCode)) {
50
+ return "at ";
77
51
  }
78
-
79
- // Canada
80
- if (['abc', 'bcc', 'cn ', 'mbc', 'nfc', 'nkc', 'nsc', 'ntc', 'nuc', 'onc', 'pic', 'quc', 'snc', 'ykc'].includes(countryCode)) {
81
- return 'xxc';
52
+ if (["abc", "bcc", "cn ", "mbc", "nfc", "nkc", "nsc", "ntc", "nuc", "onc", "pic", "quc", "snc", "ykc"].includes(countryCode)) {
53
+ return "xxc";
82
54
  }
83
- // Great Britain:
84
- if (['enk', 'nik', 'stk', 'uik', 'uk ', 'wlk'].includes(countryCode)) {
85
- return 'xxk';
55
+ if (["enk", "nik", "stk", "uik", "uk ", "wlk"].includes(countryCode)) {
56
+ return "xxk";
86
57
  }
87
- // United States:
88
- if (['aku', 'alu', 'aru', 'azu', 'cau', 'cou', 'ctu', 'dcu', 'deu', 'flu', 'gau', 'hiu', 'iau', 'idu', 'ilu', 'inu', 'kgr', 'ksu', 'kyu', 'lau', 'mau', 'mdu', 'meu', 'miu', 'mnu', 'mou', 'msu', 'mtu', 'nbu', 'ncu', 'nhu', 'nju', 'nmu', 'nvu', 'nyu', 'ohu', 'oku', 'oru', 'pau', 'riu', 'scu', 'sdu', 'tnu', 'txu', 'us ', 'utu', 'vau', 'vtu', 'wau', 'wiu', 'wvu', 'wyu'].includes(countryCode)) {
89
- return 'xxu';
58
+ if (["aku", "alu", "aru", "azu", "cau", "cou", "ctu", "dcu", "deu", "flu", "gau", "hiu", "iau", "idu", "ilu", "inu", "kgr", "ksu", "kyu", "lau", "mau", "mdu", "meu", "miu", "mnu", "mou", "msu", "mtu", "nbu", "ncu", "nhu", "nju", "nmu", "nvu", "nyu", "ohu", "oku", "oru", "pau", "riu", "scu", "sdu", "tnu", "txu", "us ", "utu", "vau", "vtu", "wau", "wiu", "wvu", "wyu"].includes(countryCode)) {
59
+ return "xxu";
90
60
  }
91
61
  return countryCode;
92
62
  }
93
63
  }
94
- //# sourceMappingURL=fix-country-codes.js.map
64
+ //# sourceMappingURL=fix-country-codes.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"fix-country-codes.js","names":["_default","description","validate","fix","record","res","message","valid","field008","get","fixCountryCode","originalCountryCode","getCountryCodeFromField008","modifiedCountryCode","deprecatedCountryCodeToCurrentCountryCode","push","length","value","substring","field","countryCode","includes"],"sources":["../src/fix-country-codes.js"],"sourcesContent":["// Fix country codes in 008/15-17\n//\n// This is proto. Extend later...\n//\n// Author(s): Nicholas Volk\n\n//import createDebugLogger from 'debug';\n//import {fieldToString, nvdebug} from './utils';\n\n\nexport default function () {\n\n return {\n description: 'Fix deprecated country codes',\n validate, fix\n };\n\n function fix(record) {\n //nvdebug(`FIX ME`);\n const res = {message: [], fix: [], valid: true};\n\n const [field008] = record.get('008');\n if (!field008) {\n return res;\n }\n\n fixCountryCode(field008);\n\n return res;\n }\n\n function validate(record) {\n const res = {message: [], valid: true};\n\n const [field008] = record.get('008');\n\n if (!field008) {\n return res;\n }\n\n const originalCountryCode = getCountryCodeFromField008(field008);\n const modifiedCountryCode = deprecatedCountryCodeToCurrentCountryCode(originalCountryCode);\n if (originalCountryCode === modifiedCountryCode) {\n return res;\n }\n\n res.message.push(`Modify 008/15-17: '${originalCountryCode}' => '${modifiedCountryCode}'`);\n\n res.valid = false;\n return res;\n }\n\n function fixCountryCode(field008) {\n const originalCountryCode = getCountryCodeFromField008(field008);\n const modifiedCountryCode = deprecatedCountryCodeToCurrentCountryCode(originalCountryCode);\n if (originalCountryCode !== modifiedCountryCode && modifiedCountryCode.length === 3) {\n field008.value = `${field008.value.substring(0, 15)}${modifiedCountryCode}${field008.value.substring(18)}`;\n return;\n }\n }\n\n function getCountryCodeFromField008(field) {\n return field.value.substring(15, 18); // return 008/15-17\n }\n\n function deprecatedCountryCodeToCurrentCountryCode(countryCode) {\n if (countryCode === 'air') { // Armenia\n return 'ai ';\n }\n if (countryCode === 'ajr') { // Azerbaidzan\n return 'aj ';\n }\n // Australia\n if (['aca', 'qua', 'tma', 'vra', 'wea', 'xga', 'xna', 'xoa', 'xra'].includes(countryCode)) {\n return 'at ';\n }\n\n // Canada\n if (['abc', 'bcc', 'cn ', 'mbc', 'nfc', 'nkc', 'nsc', 'ntc', 'nuc', 'onc', 'pic', 'quc', 'snc', 'ykc'].includes(countryCode)) {\n return 'xxc';\n }\n // Great Britain:\n if (['enk', 'nik', 'stk', 'uik', 'uk ', 'wlk'].includes(countryCode)) {\n return 'xxk';\n }\n // United States:\n if (['aku', 'alu', 'aru', 'azu', 'cau', 'cou', 'ctu', 'dcu', 'deu', 'flu', 'gau', 'hiu', 'iau', 'idu', 'ilu', 'inu', 'kgr', 'ksu', 'kyu', 'lau', 'mau', 'mdu', 'meu', 'miu', 'mnu', 'mou', 'msu', 'mtu', 'nbu', 'ncu', 'nhu', 'nju', 'nmu', 'nvu', 'nyu', 'ohu', 'oku', 'oru', 'pau', 'riu', 'scu', 'sdu', 'tnu', 'txu', 'us ', 'utu', 'vau', 'vtu', 'wau', 'wiu', 'wvu', 'wyu'].includes(countryCode)) {\n return 'xxu';\n }\n return countryCode;\n }\n\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/fix-country-codes.js"],
4
+ "sourcesContent": ["// Fix country codes in 008/15-17\n//\n// This is proto. Extend later...\n//\n// Author(s): Nicholas Volk\n\n//import createDebugLogger from 'debug';\n//import {fieldToString, nvdebug} from './utils.js';\n\n\nexport default function () {\n\n return {\n description: 'Fix deprecated country codes',\n validate, fix\n };\n\n function fix(record) {\n //nvdebug(`FIX ME`);\n const res = {message: [], fix: [], valid: true};\n\n const [field008] = record.get('008');\n if (!field008) {\n return res;\n }\n\n fixCountryCode(field008);\n\n return res;\n }\n\n function validate(record) {\n const res = {message: [], valid: true};\n\n const [field008] = record.get('008');\n\n if (!field008) {\n return res;\n }\n\n const originalCountryCode = getCountryCodeFromField008(field008);\n const modifiedCountryCode = deprecatedCountryCodeToCurrentCountryCode(originalCountryCode);\n if (originalCountryCode === modifiedCountryCode) {\n return res;\n }\n\n res.message.push(`Modify 008/15-17: '${originalCountryCode}' => '${modifiedCountryCode}'`);\n\n res.valid = false;\n return res;\n }\n\n function fixCountryCode(field008) {\n const originalCountryCode = getCountryCodeFromField008(field008);\n const modifiedCountryCode = deprecatedCountryCodeToCurrentCountryCode(originalCountryCode);\n if (originalCountryCode !== modifiedCountryCode && modifiedCountryCode.length === 3) {\n field008.value = `${field008.value.substring(0, 15)}${modifiedCountryCode}${field008.value.substring(18)}`;\n return;\n }\n }\n\n function getCountryCodeFromField008(field) {\n return field.value.substring(15, 18); // return 008/15-17\n }\n\n function deprecatedCountryCodeToCurrentCountryCode(countryCode) {\n if (countryCode === 'air') { // Armenia\n return 'ai ';\n }\n if (countryCode === 'ajr') { // Azerbaidzan\n return 'aj ';\n }\n // Australia\n if (['aca', 'qua', 'tma', 'vra', 'wea', 'xga', 'xna', 'xoa', 'xra'].includes(countryCode)) {\n return 'at ';\n }\n\n // Canada\n if (['abc', 'bcc', 'cn ', 'mbc', 'nfc', 'nkc', 'nsc', 'ntc', 'nuc', 'onc', 'pic', 'quc', 'snc', 'ykc'].includes(countryCode)) {\n return 'xxc';\n }\n // Great Britain:\n if (['enk', 'nik', 'stk', 'uik', 'uk ', 'wlk'].includes(countryCode)) {\n return 'xxk';\n }\n // United States:\n if (['aku', 'alu', 'aru', 'azu', 'cau', 'cou', 'ctu', 'dcu', 'deu', 'flu', 'gau', 'hiu', 'iau', 'idu', 'ilu', 'inu', 'kgr', 'ksu', 'kyu', 'lau', 'mau', 'mdu', 'meu', 'miu', 'mnu', 'mou', 'msu', 'mtu', 'nbu', 'ncu', 'nhu', 'nju', 'nmu', 'nvu', 'nyu', 'ohu', 'oku', 'oru', 'pau', 'riu', 'scu', 'sdu', 'tnu', 'txu', 'us ', 'utu', 'vau', 'vtu', 'wau', 'wiu', 'wvu', 'wyu'].includes(countryCode)) {\n return 'xxu';\n }\n return countryCode;\n }\n\n}\n"],
5
+ "mappings": "AAUA,0BAA2B;AAEzB,SAAO;AAAA,IACL,aAAa;AAAA,IACb;AAAA,IAAU;AAAA,EACZ;AAEA,WAAS,IAAI,QAAQ;AAEnB,UAAM,MAAM,EAAC,SAAS,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,KAAI;AAE9C,UAAM,CAAC,QAAQ,IAAI,OAAO,IAAI,KAAK;AACnC,QAAI,CAAC,UAAU;AACb,aAAO;AAAA,IACT;AAEA,mBAAe,QAAQ;AAEvB,WAAO;AAAA,EACT;AAEA,WAAS,SAAS,QAAQ;AACxB,UAAM,MAAM,EAAC,SAAS,CAAC,GAAG,OAAO,KAAI;AAErC,UAAM,CAAC,QAAQ,IAAI,OAAO,IAAI,KAAK;AAEnC,QAAI,CAAC,UAAU;AACb,aAAO;AAAA,IACT;AAEA,UAAM,sBAAsB,2BAA2B,QAAQ;AAC/D,UAAM,sBAAsB,0CAA0C,mBAAmB;AACzF,QAAI,wBAAwB,qBAAqB;AAC/C,aAAO;AAAA,IACT;AAEA,QAAI,QAAQ,KAAK,sBAAsB,mBAAmB,SAAS,mBAAmB,GAAG;AAEzF,QAAI,QAAQ;AACZ,WAAO;AAAA,EACT;AAEA,WAAS,eAAe,UAAU;AAChC,UAAM,sBAAsB,2BAA2B,QAAQ;AAC/D,UAAM,sBAAsB,0CAA0C,mBAAmB;AACzF,QAAI,wBAAwB,uBAAuB,oBAAoB,WAAW,GAAG;AACnF,eAAS,QAAQ,GAAG,SAAS,MAAM,UAAU,GAAG,EAAE,CAAC,GAAG,mBAAmB,GAAG,SAAS,MAAM,UAAU,EAAE,CAAC;AACxG;AAAA,IACF;AAAA,EACF;AAEA,WAAS,2BAA2B,OAAO;AACzC,WAAO,MAAM,MAAM,UAAU,IAAI,EAAE;AAAA,EACrC;AAEA,WAAS,0CAA0C,aAAa;AAC9D,QAAI,gBAAgB,OAAO;AACzB,aAAO;AAAA,IACT;AACA,QAAI,gBAAgB,OAAO;AACzB,aAAO;AAAA,IACT;AAEA,QAAI,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK,EAAE,SAAS,WAAW,GAAG;AACzF,aAAO;AAAA,IACT;AAGA,QAAI,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK,EAAE,SAAS,WAAW,GAAG;AAC5H,aAAO;AAAA,IACT;AAEA,QAAI,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK,EAAE,SAAS,WAAW,GAAG;AACpE,aAAO;AAAA,IACT;AAEA,QAAI,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK,EAAE,SAAS,WAAW,GAAG;AACtY,aAAO;AAAA,IACT;AACA,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 "./fix-country-codes.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", "fix-country-codes"],
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/fix-country-codes: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=fix-country-codes.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/fix-country-codes.test.js"],
4
+ "sourcesContent": ["import assert from 'node:assert';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './fix-country-codes.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', 'fix-country-codes'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n hooks: {\n before: async () => {\n testValidatorFactory();\n }\n }\n});\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/fix-country-codes: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,mBAAmB;AAAA,EACtE,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;AACF,CAAC;AACD,MAAM,QAAQ,kBAAkB,iEAAiE;AAEjG,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,57 +1,29 @@
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 _utils = require("./utils");
9
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
- // Fix language codes in 008/35-37 and 041 (does not sync them)
11
- //
12
- // Author(s): Nicholas Volk
13
-
14
- //import createDebugLogger from 'debug';
15
- //import {fieldToString, nvdebug} from './utils';
16
-
17
- const description = 'Fix language codes';
18
- function _default() {
19
- return {
20
- description,
21
- validate,
22
- fix
23
- };
1
+ import clone from "clone";
2
+ import { fieldToString } from "./utils.js";
3
+ const description = "Fix language codes";
4
+ export default function() {
5
+ return { description, validate, fix };
24
6
  function fix(record) {
25
- //nvdebug(`FIX ME`);
26
- const res = {
27
- message: [],
28
- fix: [],
29
- valid: true
30
- };
31
- const [field008] = record.get('008');
7
+ const res = { message: [], fix: [], valid: true };
8
+ const [field008] = record.get("008");
32
9
  if (!field008) {
33
10
  return res;
34
11
  }
35
12
  fixLanguageField008(field008);
36
- const f041 = record.get('041');
37
- f041.forEach(f => fixField041(f)); // eslint-disable-line array-callback-return
38
-
13
+ const f041 = record.get("041");
14
+ f041.forEach((f) => fixField041(f));
39
15
  return res;
40
16
  }
41
17
  function validate(record) {
42
- const res = {
43
- message: [],
44
- valid: true
45
- };
18
+ const res = { message: [], valid: true };
46
19
  validateField008(record, res);
47
- const f041 = record.get('041');
48
- f041.forEach(f => validateField041(f, res)); // eslint-disable-line array-callback-return
49
-
20
+ const f041 = record.get("041");
21
+ f041.forEach((f) => validateField041(f, res));
50
22
  res.valid = !(res.message.length >= 1);
51
23
  return res;
52
24
  }
53
25
  function validateField008(record, res) {
54
- const [field008] = record.get('008');
26
+ const [field008] = record.get("008");
55
27
  if (!field008) {
56
28
  return;
57
29
  }
@@ -64,13 +36,13 @@ function _default() {
64
36
  res.valid = false;
65
37
  }
66
38
  function isRelevantField041SubfieldCode(subfield) {
67
- return 'abdefghijkmnpqrt'.includes(subfield.code);
39
+ return "abdefghijkmnpqrt".includes(subfield.code);
68
40
  }
69
41
  function validateField041(field, res) {
70
- const clonedField = (0, _clone.default)(field);
42
+ const clonedField = clone(field);
71
43
  fixField041(clonedField);
72
- const originalString = (0, _utils.fieldToString)(field);
73
- const modifiedString = (0, _utils.fieldToString)(clonedField);
44
+ const originalString = fieldToString(field);
45
+ const modifiedString = fieldToString(clonedField);
74
46
  if (originalString === modifiedString) {
75
47
  return;
76
48
  }
@@ -86,11 +58,10 @@ function _default() {
86
58
  }
87
59
  }
88
60
  function fixField041(field) {
89
- if (field.subfields.some(sf => sf.code === '2')) {
61
+ if (field.subfields.some((sf) => sf.code === "2")) {
90
62
  return;
91
63
  }
92
- field.subfields.forEach(sf => fixField041Subfield(sf)); // eslint-disable-line array-callback-return
93
-
64
+ field.subfields.forEach((sf) => fixField041Subfield(sf));
94
65
  function fixField041Subfield(subfield) {
95
66
  if (!isRelevantField041SubfieldCode(subfield)) {
96
67
  return;
@@ -99,14 +70,13 @@ function _default() {
99
70
  }
100
71
  }
101
72
  function getLanguageFromField008(field) {
102
- return field.value.substring(35, 38); // return 008/35-37
73
+ return field.value.substring(35, 38);
103
74
  }
104
75
  function deprecatedLanguageToCurrentLanguage(language) {
105
- if (language === 'nno' || language === 'nob') {
106
- // Nynorsk ja bokmål
107
- return 'nor'; // Norwegian
76
+ if (language === "nno" || language === "nob") {
77
+ return "nor";
108
78
  }
109
79
  return language;
110
80
  }
111
81
  }
112
- //# sourceMappingURL=fix-language-codes.js.map
82
+ //# sourceMappingURL=fix-language-codes.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"fix-language-codes.js","names":["_clone","_interopRequireDefault","require","_utils","e","__esModule","default","description","_default","validate","fix","record","res","message","valid","field008","get","fixLanguageField008","f041","forEach","f","fixField041","validateField008","validateField041","length","originalLanguage","getLanguageFromField008","modifiedLanguage","deprecatedLanguageToCurrentLanguage","push","isRelevantField041SubfieldCode","subfield","includes","code","field","clonedField","clone","originalString","fieldToString","modifiedString","msg","value","substring","subfields","some","sf","fixField041Subfield","language"],"sources":["../src/fix-language-codes.js"],"sourcesContent":["import clone from 'clone';\nimport {fieldToString} from './utils';\n// Fix language codes in 008/35-37 and 041 (does not sync them)\n//\n// Author(s): Nicholas Volk\n\n//import createDebugLogger from 'debug';\n//import {fieldToString, nvdebug} from './utils';\n\nconst description = 'Fix language codes';\n\nexport default function () {\n\n return {description, validate, fix};\n\n function fix(record) {\n //nvdebug(`FIX ME`);\n const res = {message: [], fix: [], valid: true};\n\n const [field008] = record.get('008');\n if (!field008) {\n return res;\n }\n\n fixLanguageField008(field008);\n\n const f041 = record.get('041');\n f041.forEach(f => fixField041(f)); // eslint-disable-line array-callback-return\n\n return res;\n }\n\n\n function validate(record) {\n const res = {message: [], valid: true};\n\n validateField008(record, res);\n\n const f041 = record.get('041');\n\n f041.forEach(f => validateField041(f, res)); // eslint-disable-line array-callback-return\n\n res.valid = !(res.message.length >= 1);\n return res;\n }\n\n function validateField008(record, res) {\n const [field008] = record.get('008');\n\n if (!field008) {\n return;\n }\n\n const originalLanguage = getLanguageFromField008(field008);\n const modifiedLanguage = deprecatedLanguageToCurrentLanguage(originalLanguage);\n if (originalLanguage === modifiedLanguage) {\n return;\n }\n\n res.message.push(`Modify 008/35-37: '${originalLanguage}' => '${modifiedLanguage}'`);\n res.valid = false;\n }\n\n\n function isRelevantField041SubfieldCode(subfield) {\n return 'abdefghijkmnpqrt'.includes(subfield.code);\n }\n\n\n function validateField041(field, res) {\n\n const clonedField = clone(field);\n fixField041(clonedField);\n\n const originalString = fieldToString(field);\n const modifiedString = fieldToString(clonedField);\n\n if (originalString === modifiedString) {\n return;\n }\n const msg = `${originalString} => ${modifiedString}`;\n res.message.push(msg);\n\n }\n\n\n function fixLanguageField008(field008) {\n const originalLanguage = getLanguageFromField008(field008);\n const modifiedLanguage = deprecatedLanguageToCurrentLanguage(originalLanguage);\n if (originalLanguage !== modifiedLanguage && modifiedLanguage.length === 3) {\n field008.value = `${field008.value.substring(0, 35)}${modifiedLanguage}${field008.value.substring(38)}`;\n return;\n }\n }\n\n function fixField041(field) {\n if (field.subfields.some(sf => sf.code === '2')) {\n return;\n }\n\n field.subfields.forEach(sf => fixField041Subfield(sf)); // eslint-disable-line array-callback-return\n\n function fixField041Subfield(subfield) {\n if (!isRelevantField041SubfieldCode(subfield)) {\n return;\n }\n subfield.value = deprecatedLanguageToCurrentLanguage(subfield.value);\n }\n }\n\n function getLanguageFromField008(field) {\n return field.value.substring(35, 38); // return 008/35-37\n }\n\n function deprecatedLanguageToCurrentLanguage(language) {\n if (language === 'nno' || language === 'nob') { // Nynorsk ja bokmål\n return 'nor'; // Norwegian\n }\n return language;\n }\n\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/fix-language-codes.js"],
4
+ "sourcesContent": ["import clone from 'clone';\nimport {fieldToString} from './utils.js';\n// Fix language codes in 008/35-37 and 041 (does not sync them)\n//\n// Author(s): Nicholas Volk\n\n//import createDebugLogger from 'debug';\n//import {fieldToString, nvdebug} from './utils.js';\n\nconst description = 'Fix language codes';\n\nexport default function () {\n\n return {description, validate, fix};\n\n function fix(record) {\n //nvdebug(`FIX ME`);\n const res = {message: [], fix: [], valid: true};\n\n const [field008] = record.get('008');\n if (!field008) {\n return res;\n }\n\n fixLanguageField008(field008);\n\n const f041 = record.get('041');\n f041.forEach(f => fixField041(f));\n\n return res;\n }\n\n\n function validate(record) {\n const res = {message: [], valid: true};\n\n validateField008(record, res);\n\n const f041 = record.get('041');\n\n f041.forEach(f => validateField041(f, res));\n\n res.valid = !(res.message.length >= 1);\n return res;\n }\n\n function validateField008(record, res) {\n const [field008] = record.get('008');\n\n if (!field008) {\n return;\n }\n\n const originalLanguage = getLanguageFromField008(field008);\n const modifiedLanguage = deprecatedLanguageToCurrentLanguage(originalLanguage);\n if (originalLanguage === modifiedLanguage) {\n return;\n }\n\n res.message.push(`Modify 008/35-37: '${originalLanguage}' => '${modifiedLanguage}'`);\n res.valid = false;\n }\n\n\n function isRelevantField041SubfieldCode(subfield) {\n return 'abdefghijkmnpqrt'.includes(subfield.code);\n }\n\n\n function validateField041(field, res) {\n\n const clonedField = clone(field);\n fixField041(clonedField);\n\n const originalString = fieldToString(field);\n const modifiedString = fieldToString(clonedField);\n\n if (originalString === modifiedString) {\n return;\n }\n const msg = `${originalString} => ${modifiedString}`;\n res.message.push(msg);\n\n }\n\n\n function fixLanguageField008(field008) {\n const originalLanguage = getLanguageFromField008(field008);\n const modifiedLanguage = deprecatedLanguageToCurrentLanguage(originalLanguage);\n if (originalLanguage !== modifiedLanguage && modifiedLanguage.length === 3) {\n field008.value = `${field008.value.substring(0, 35)}${modifiedLanguage}${field008.value.substring(38)}`;\n return;\n }\n }\n\n function fixField041(field) {\n if (field.subfields.some(sf => sf.code === '2')) {\n return;\n }\n\n field.subfields.forEach(sf => fixField041Subfield(sf));\n\n function fixField041Subfield(subfield) {\n if (!isRelevantField041SubfieldCode(subfield)) {\n return;\n }\n subfield.value = deprecatedLanguageToCurrentLanguage(subfield.value);\n }\n }\n\n function getLanguageFromField008(field) {\n return field.value.substring(35, 38); // return 008/35-37\n }\n\n function deprecatedLanguageToCurrentLanguage(language) {\n if (language === 'nno' || language === 'nob') { // Nynorsk ja bokm\u00E5l\n return 'nor'; // Norwegian\n }\n return language;\n }\n\n}\n"],
5
+ "mappings": "AAAA,OAAO,WAAW;AAClB,SAAQ,qBAAoB;AAQ5B,MAAM,cAAc;AAEpB,0BAA2B;AAEzB,SAAO,EAAC,aAAa,UAAU,IAAG;AAElC,WAAS,IAAI,QAAQ;AAEnB,UAAM,MAAM,EAAC,SAAS,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,KAAI;AAE9C,UAAM,CAAC,QAAQ,IAAI,OAAO,IAAI,KAAK;AACnC,QAAI,CAAC,UAAU;AACb,aAAO;AAAA,IACT;AAEA,wBAAoB,QAAQ;AAE5B,UAAM,OAAO,OAAO,IAAI,KAAK;AAC7B,SAAK,QAAQ,OAAK,YAAY,CAAC,CAAC;AAEhC,WAAO;AAAA,EACT;AAGA,WAAS,SAAS,QAAQ;AACxB,UAAM,MAAM,EAAC,SAAS,CAAC,GAAG,OAAO,KAAI;AAErC,qBAAiB,QAAQ,GAAG;AAE5B,UAAM,OAAO,OAAO,IAAI,KAAK;AAE7B,SAAK,QAAQ,OAAK,iBAAiB,GAAG,GAAG,CAAC;AAE1C,QAAI,QAAQ,EAAE,IAAI,QAAQ,UAAU;AACpC,WAAO;AAAA,EACT;AAEA,WAAS,iBAAiB,QAAQ,KAAK;AACrC,UAAM,CAAC,QAAQ,IAAI,OAAO,IAAI,KAAK;AAEnC,QAAI,CAAC,UAAU;AACb;AAAA,IACF;AAEA,UAAM,mBAAmB,wBAAwB,QAAQ;AACzD,UAAM,mBAAmB,oCAAoC,gBAAgB;AAC7E,QAAI,qBAAqB,kBAAkB;AACzC;AAAA,IACF;AAEA,QAAI,QAAQ,KAAK,sBAAsB,gBAAgB,SAAS,gBAAgB,GAAG;AACnF,QAAI,QAAQ;AAAA,EACd;AAGA,WAAS,+BAA+B,UAAU;AAChD,WAAO,mBAAmB,SAAS,SAAS,IAAI;AAAA,EAClD;AAGA,WAAS,iBAAiB,OAAO,KAAK;AAEpC,UAAM,cAAc,MAAM,KAAK;AAC/B,gBAAY,WAAW;AAEvB,UAAM,iBAAiB,cAAc,KAAK;AAC1C,UAAM,iBAAiB,cAAc,WAAW;AAEhD,QAAI,mBAAmB,gBAAgB;AACrC;AAAA,IACF;AACA,UAAM,MAAM,GAAG,cAAc,OAAO,cAAc;AAClD,QAAI,QAAQ,KAAK,GAAG;AAAA,EAEtB;AAGA,WAAS,oBAAoB,UAAU;AACrC,UAAM,mBAAmB,wBAAwB,QAAQ;AACzD,UAAM,mBAAmB,oCAAoC,gBAAgB;AAC7E,QAAI,qBAAqB,oBAAoB,iBAAiB,WAAW,GAAG;AAC1E,eAAS,QAAQ,GAAG,SAAS,MAAM,UAAU,GAAG,EAAE,CAAC,GAAG,gBAAgB,GAAG,SAAS,MAAM,UAAU,EAAE,CAAC;AACrG;AAAA,IACF;AAAA,EACF;AAEA,WAAS,YAAY,OAAO;AAC1B,QAAI,MAAM,UAAU,KAAK,QAAM,GAAG,SAAS,GAAG,GAAG;AAC/C;AAAA,IACF;AAEA,UAAM,UAAU,QAAQ,QAAM,oBAAoB,EAAE,CAAC;AAErD,aAAS,oBAAoB,UAAU;AACrC,UAAI,CAAC,+BAA+B,QAAQ,GAAG;AAC7C;AAAA,MACF;AACA,eAAS,QAAQ,oCAAoC,SAAS,KAAK;AAAA,IACrE;AAAA,EACF;AAEA,WAAS,wBAAwB,OAAO;AACtC,WAAO,MAAM,MAAM,UAAU,IAAI,EAAE;AAAA,EACrC;AAEA,WAAS,oCAAoC,UAAU;AACrD,QAAI,aAAa,SAAS,aAAa,OAAO;AAC5C,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAEF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,38 @@
1
+ import assert from "node:assert";
2
+ import { MarcRecord } from "@natlibfi/marc-record";
3
+ import validatorFactory from "./fix-language-codes.js";
4
+ import { READERS } from "@natlibfi/fixura";
5
+ import generateTests from "@natlibfi/fixugen";
6
+ generateTests({
7
+ callback,
8
+ path: [import.meta.dirname, "..", "test-fixtures", "fix-language-codes"],
9
+ useMetadataFile: true,
10
+ recurse: false,
11
+ fixura: {
12
+ reader: READERS.JSON
13
+ },
14
+ hooks: {
15
+ before: async () => {
16
+ testValidatorFactory();
17
+ }
18
+ }
19
+ });
20
+ async function testValidatorFactory() {
21
+ const validator = await validatorFactory();
22
+ assert.equal(typeof validator, "object");
23
+ assert.equal(typeof validator.description, "string");
24
+ assert.equal(typeof validator.validate, "function");
25
+ }
26
+ async function callback({ getFixture, fix = false }) {
27
+ const validator = await validatorFactory();
28
+ const record = new MarcRecord(getFixture("record.json"));
29
+ const expectedResult = getFixture("expectedResult.json");
30
+ if (!fix) {
31
+ const result = await validator.validate(record);
32
+ assert.deepEqual(result, expectedResult);
33
+ return;
34
+ }
35
+ await validator.fix(record);
36
+ assert.deepEqual(record, expectedResult);
37
+ }
38
+ //# sourceMappingURL=fix-language-codes.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/fix-language-codes.test.js"],
4
+ "sourcesContent": ["import assert from 'node:assert';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './fix-language-codes.js';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\n\ngenerateTests({\n callback,\n path: [import.meta.dirname, '..', 'test-fixtures', 'fix-language-codes'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n hooks: {\n before: async () => {\n testValidatorFactory();\n }\n }\n});\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, 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 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;AAE1B,cAAc;AAAA,EACZ;AAAA,EACA,MAAM,CAAC,YAAY,SAAS,MAAM,iBAAiB,oBAAoB;AAAA,EACvE,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;AACF,CAAC;AAED,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,MAAM,MAAK,GAAG;AACjD,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
+ }