@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,49 +1,26 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = _default;
7
- var _punctuation = require("./punctuation2");
8
- var _utils = require("./utils");
9
- /*
10
- * stripPunctuation.js -- try and remove a marc field punctuation (based on and reverse of punctuation2.js)
11
- *
12
- * Author(s): Nicholas Volk <nicholas.volk@helsinki.fi>
13
- *
14
- */
15
-
16
- // import createDebugLogger from 'debug';
17
-
18
- // const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/punctuation2');
19
-
20
- function _default() {
1
+ import { fieldGetFixedString, fieldNeedsModification, fieldStripPunctuation } from "./punctuation2.js";
2
+ import { fieldToString, nvdebug } from "./utils.js";
3
+ export default function() {
21
4
  return {
22
- description: 'Strip punctuation to data fields',
5
+ description: "Strip punctuation to data fields",
23
6
  validate,
24
7
  fix
25
8
  };
26
9
  function fix(record) {
27
- (0, _utils.nvdebug)('Strip punctuation to data fields: fixer');
28
- const res = {
29
- message: [],
30
- fix: [],
31
- valid: true
32
- };
33
- record.fields.forEach(f => (0, _punctuation.fieldStripPunctuation)(f)); // eslint-disable-line array-callback-return
10
+ nvdebug("Strip punctuation to data fields: fixer");
11
+ const res = { message: [], fix: [], valid: true };
12
+ record.fields.forEach((f) => fieldStripPunctuation(f));
34
13
  return res;
35
14
  }
36
15
  function validate(record) {
37
- (0, _utils.nvdebug)('Strip punctuation to data fields: validate');
38
- const fieldsNeedingModification = record.fields.filter(f => (0, _punctuation.fieldNeedsModification)(f, false));
39
- const values = fieldsNeedingModification.map(f => (0, _utils.fieldToString)(f));
40
- const newValues = fieldsNeedingModification.map(f => (0, _punctuation.fieldGetFixedString)(f, false));
16
+ nvdebug("Strip punctuation to data fields: validate");
17
+ const fieldsNeedingModification = record.fields.filter((f) => fieldNeedsModification(f, false));
18
+ const values = fieldsNeedingModification.map((f) => fieldToString(f));
19
+ const newValues = fieldsNeedingModification.map((f) => fieldGetFixedString(f, false));
41
20
  const messages = values.map((val, i) => `'${val}' => '${newValues[i]}'`);
42
- const res = {
43
- message: messages
44
- };
21
+ const res = { message: messages };
45
22
  res.valid = res.message.length < 1;
46
23
  return res;
47
24
  }
48
25
  }
49
- //# sourceMappingURL=stripPunctuation.js.map
26
+ //# sourceMappingURL=stripPunctuation.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"stripPunctuation.js","names":["_punctuation","require","_utils","_default","description","validate","fix","record","nvdebug","res","message","valid","fields","forEach","f","fieldStripPunctuation","fieldsNeedingModification","filter","fieldNeedsModification","values","map","fieldToString","newValues","fieldGetFixedString","messages","val","i","length"],"sources":["../src/stripPunctuation.js"],"sourcesContent":["/*\n* stripPunctuation.js -- try and remove a marc field punctuation (based on and reverse of punctuation2.js)\n*\n* Author(s): Nicholas Volk <nicholas.volk@helsinki.fi>\n*\n*/\n\nimport {fieldGetFixedString, fieldNeedsModification, fieldStripPunctuation} from './punctuation2';\n// import createDebugLogger from 'debug';\nimport {fieldToString, nvdebug} from './utils';\n\n// const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/punctuation2');\n\nexport default function () {\n return {\n description: 'Strip punctuation to data fields',\n validate, fix\n };\n\n function fix(record) {\n nvdebug('Strip punctuation to data fields: fixer');\n const res = {message: [], fix: [], valid: true};\n record.fields.forEach(f => fieldStripPunctuation(f)); // eslint-disable-line array-callback-return\n return res;\n }\n\n function validate(record) {\n nvdebug('Strip punctuation to data fields: validate');\n\n const fieldsNeedingModification = record.fields.filter(f => fieldNeedsModification(f, false));\n\n const values = fieldsNeedingModification.map(f => fieldToString(f));\n const newValues = fieldsNeedingModification.map(f => fieldGetFixedString(f, false));\n\n const messages = values.map((val, i) => `'${val}' => '${newValues[i]}'`);\n\n const res = {message: messages};\n\n res.valid = res.message.length < 1;\n return res;\n }\n}\n"],"mappings":";;;;;;AAOA,IAAAA,YAAA,GAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AATA;AACA;AACA;AACA;AACA;AACA;;AAGA;;AAGA;;AAEe,SAAAE,SAAA,EAAY;EACzB,OAAO;IACLC,WAAW,EAAE,kCAAkC;IAC/CC,QAAQ;IAAEC;EACZ,CAAC;EAED,SAASA,GAAGA,CAACC,MAAM,EAAE;IACnB,IAAAC,cAAO,EAAC,yCAAyC,CAAC;IAClD,MAAMC,GAAG,GAAG;MAACC,OAAO,EAAE,EAAE;MAAEJ,GAAG,EAAE,EAAE;MAAEK,KAAK,EAAE;IAAI,CAAC;IAC/CJ,MAAM,CAACK,MAAM,CAACC,OAAO,CAACC,CAAC,IAAI,IAAAC,kCAAqB,EAACD,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,OAAOL,GAAG;EACZ;EAEA,SAASJ,QAAQA,CAACE,MAAM,EAAE;IACxB,IAAAC,cAAO,EAAC,4CAA4C,CAAC;IAErD,MAAMQ,yBAAyB,GAAGT,MAAM,CAACK,MAAM,CAACK,MAAM,CAACH,CAAC,IAAI,IAAAI,mCAAsB,EAACJ,CAAC,EAAE,KAAK,CAAC,CAAC;IAE7F,MAAMK,MAAM,GAAGH,yBAAyB,CAACI,GAAG,CAACN,CAAC,IAAI,IAAAO,oBAAa,EAACP,CAAC,CAAC,CAAC;IACnE,MAAMQ,SAAS,GAAGN,yBAAyB,CAACI,GAAG,CAACN,CAAC,IAAI,IAAAS,gCAAmB,EAACT,CAAC,EAAE,KAAK,CAAC,CAAC;IAEnF,MAAMU,QAAQ,GAAGL,MAAM,CAACC,GAAG,CAAC,CAACK,GAAG,EAAEC,CAAC,KAAK,IAAID,GAAG,SAASH,SAAS,CAACI,CAAC,CAAC,GAAG,CAAC;IAExE,MAAMjB,GAAG,GAAG;MAACC,OAAO,EAAEc;IAAQ,CAAC;IAE/Bf,GAAG,CAACE,KAAK,GAAGF,GAAG,CAACC,OAAO,CAACiB,MAAM,GAAG,CAAC;IAClC,OAAOlB,GAAG;EACZ;AACF","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/stripPunctuation.js"],
4
+ "sourcesContent": ["/*\n* stripPunctuation.js -- try and remove a marc field punctuation (based on and reverse of punctuation2.js)\n*\n* Author(s): Nicholas Volk <nicholas.volk@helsinki.fi>\n*\n*/\n\nimport {fieldGetFixedString, fieldNeedsModification, fieldStripPunctuation} from './punctuation2.js';\n// import createDebugLogger from 'debug';\nimport {fieldToString, nvdebug} from './utils.js';\n\n// const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/punctuation2');\n\nexport default function () {\n return {\n description: 'Strip punctuation to data fields',\n validate, fix\n };\n\n function fix(record) {\n nvdebug('Strip punctuation to data fields: fixer');\n const res = {message: [], fix: [], valid: true};\n record.fields.forEach(f => fieldStripPunctuation(f));\n return res;\n }\n\n function validate(record) {\n nvdebug('Strip punctuation to data fields: validate');\n\n const fieldsNeedingModification = record.fields.filter(f => fieldNeedsModification(f, false));\n\n const values = fieldsNeedingModification.map(f => fieldToString(f));\n const newValues = fieldsNeedingModification.map(f => fieldGetFixedString(f, false));\n\n const messages = values.map((val, i) => `'${val}' => '${newValues[i]}'`);\n\n const res = {message: messages};\n\n res.valid = res.message.length < 1;\n return res;\n }\n}\n"],
5
+ "mappings": "AAOA,SAAQ,qBAAqB,wBAAwB,6BAA4B;AAEjF,SAAQ,eAAe,eAAc;AAIrC,0BAA2B;AACzB,SAAO;AAAA,IACL,aAAa;AAAA,IACb;AAAA,IAAU;AAAA,EACZ;AAEA,WAAS,IAAI,QAAQ;AACnB,YAAQ,yCAAyC;AACjD,UAAM,MAAM,EAAC,SAAS,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,KAAI;AAC9C,WAAO,OAAO,QAAQ,OAAK,sBAAsB,CAAC,CAAC;AACnD,WAAO;AAAA,EACT;AAEA,WAAS,SAAS,QAAQ;AACxB,YAAQ,4CAA4C;AAEpD,UAAM,4BAA4B,OAAO,OAAO,OAAO,OAAK,uBAAuB,GAAG,KAAK,CAAC;AAE5F,UAAM,SAAS,0BAA0B,IAAI,OAAK,cAAc,CAAC,CAAC;AAClE,UAAM,YAAY,0BAA0B,IAAI,OAAK,oBAAoB,GAAG,KAAK,CAAC;AAElF,UAAM,WAAW,OAAO,IAAI,CAAC,KAAK,MAAM,IAAI,GAAG,SAAS,UAAU,CAAC,CAAC,GAAG;AAEvE,UAAM,MAAM,EAAC,SAAS,SAAQ;AAE9B,QAAI,QAAQ,IAAI,QAAQ,SAAS;AACjC,WAAO;AAAA,EACT;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,44 @@
1
+ import assert from "node:assert";
2
+ import { MarcRecord } from "@natlibfi/marc-record";
3
+ import validatorFactory from "./stripPunctuation.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", "strip-punctuation"],
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/stripPunctuation: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=stripPunctuation.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/stripPunctuation.test.js"],
4
+ "sourcesContent": ["import assert from 'node:assert';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './stripPunctuation.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', 'strip-punctuation'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n hooks: {\n before: async () => {\n testValidatorFactory();\n }\n }\n});\n\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/stripPunctuation: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;AAED,MAAM,QAAQ,kBAAkB,gEAAgE;AAEhG,eAAe,uBAAuB;AACpC,QAAM,YAAY,MAAM,iBAAiB;AAEzC,SAAO,MAAM,OAAO,WAAW,QAAQ;AACvC,SAAO,MAAM,OAAO,UAAU,aAAa,QAAQ;AACnD,SAAO,MAAM,OAAO,UAAU,UAAU,UAAU;AACpD;AAEA,eAAe,SAAS,EAAC,YAAY,UAAU,MAAM,MAAM,MAAK,GAAG;AACjE,MAAI,YAAY,OAAO;AACrB,UAAM,eAAe;AACrB;AAAA,EACF;AAEA,QAAM,YAAY,MAAM,iBAAiB;AACzC,QAAM,SAAS,IAAI,WAAW,WAAW,aAAa,CAAC;AACvD,QAAM,iBAAiB,WAAW,qBAAqB;AAGvD,MAAI,CAAC,KAAK;AACR,UAAM,SAAS,MAAM,UAAU,SAAS,MAAM;AAC9C,WAAO,UAAU,QAAQ,cAAc;AACvC;AAAA,EACF;AAEA,QAAM,UAAU,IAAI,MAAM;AAC1B,SAAO,UAAU,QAAQ,cAAc;AACzC;",
6
+ "names": []
7
+ }
@@ -1,39 +1,27 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = _default;
7
- // Tag (RegExp): Pattern to match the field's tags Mandatory
8
- // ind1 (RegExp): Pattern to match the field's ind1 property
9
- // ind2 (RegExp): Pattern to match the field's ind2 property
10
- // subfields (Array<Object>): An array of objects with the following properties (Mandatory):
11
- // // code (RegExp): Pattern to match the subfield's code Mandatory
12
- // // value (RegExp): Pattern to match the subfield's value
13
-
14
- // Configuration specification
15
1
  const confSpec = {
16
2
  tag: {
17
3
  // Pattern to match the field's tags
18
- type: 'RegExp',
4
+ type: "RegExp",
19
5
  mandatory: true
20
6
  },
21
7
  ind1: {
22
8
  // Pattern to match the field's ind1 property.
23
- type: 'RegExp' // Array<Indicator>
9
+ type: "RegExp"
10
+ // Array<Indicator>
24
11
  },
25
12
  ind2: {
26
13
  // Pattern to match the field's ind2 property.
27
- type: 'RegExp' // Array<Indicator>
14
+ type: "RegExp"
15
+ // Array<Indicator>
28
16
  },
29
17
  subfields: {
30
18
  // An array of objects with the following properties
31
19
  code: {
32
- type: 'RegExp',
20
+ type: "RegExp",
33
21
  mandatory: true
34
22
  },
35
23
  value: {
36
- type: 'RegExp'
24
+ type: "RegExp"
37
25
  },
38
26
  mandatory: true
39
27
  }
@@ -44,45 +32,34 @@ function forEach(obj, fun) {
44
32
  function isRegExp(re) {
45
33
  return re instanceof RegExp;
46
34
  }
47
- function _default(config) {
35
+ export default function(config) {
48
36
  if (!Array.isArray(config)) {
49
- throw new TypeError('Configuration array not provided');
37
+ throw new TypeError("Configuration array not provided");
50
38
  }
51
39
  configValid(config);
52
40
  return {
53
- description: 'Checks that the record does not contain the configured subfields',
54
- validate: record => excludeSubfields(record, config, false),
55
- fix: record => excludeSubfields(record, config, true)
41
+ description: "Checks that the record does not contain the configured subfields",
42
+ validate: (record) => excludeSubfields(record, config, false),
43
+ fix: (record) => excludeSubfields(record, config, true)
56
44
  };
57
-
58
- /// /////////////////////////////////////////
59
- // These check that configuration is valid
60
- function configValid(config) {
61
- config.forEach(obj => {
45
+ function configValid(config2) {
46
+ config2.forEach((obj) => {
62
47
  checkMandatory(confSpec, obj);
63
48
  forEach(obj, ([key, val]) => {
64
49
  configMatchesSpec(val, key, confSpec);
65
50
  });
66
51
  });
67
52
  }
68
-
69
- // Recursive validator
70
53
  function configMatchesSpec(data, key, spec) {
71
- // Field not found in configuration spec
72
54
  if (!spec[key]) {
73
55
  throw new Error(`Configuration not valid - unidentified value: ${key}`);
74
56
  }
75
-
76
- // If configuration type does not match type in configuration spec
77
- if (typeof data !== spec[key].type && spec[key].type === 'RegExp' && !isRegExp(data)) {
57
+ if (typeof data !== spec[key].type && (spec[key].type === "RegExp" && !isRegExp(data))) {
78
58
  throw new Error(`Configuration not valid - invalid data type for: ${key}`);
79
59
  }
80
-
81
- // Check subfields recursively
82
- if (key === 'subfields') {
60
+ if (key === "subfields") {
83
61
  forEach(data, ([, subObj]) => {
84
- // Console.log("subObj: ", subObj, " type: ", typeof subObj, !(Array.isArray(subObj)))
85
- if (typeof subObj === 'object' && !Array.isArray(subObj)) {
62
+ if (typeof subObj === "object" && !Array.isArray(subObj)) {
86
63
  checkMandatory(spec[key], subObj);
87
64
  forEach(subObj, ([subKey, subVal]) => {
88
65
  configMatchesSpec(subVal, subKey, spec[key]);
@@ -94,52 +71,32 @@ function _default(config) {
94
71
  }
95
72
  }
96
73
  function checkMandatory(spec, obj) {
97
- // Check if all mandatory fields are present
98
74
  forEach(spec, ([key, val]) => {
99
- if (val.mandatory && typeof obj[key] === 'undefined') {
75
+ if (val.mandatory && typeof obj[key] === "undefined") {
100
76
  throw new Error(`Configuration not valid - missing mandatory element: ${key}`);
101
77
  }
102
78
  });
103
79
  }
104
- /// /////////////////////////////////////////
105
-
106
- /// /////////////////////////////////////////
107
- // These check that record is valid
108
80
  function excludeSubfields(record, conf, fix) {
109
- const res = {
110
- message: [],
111
- valid: true
112
- };
113
-
114
- // Parse trough every element of config array
115
- conf.forEach(confObj => {
116
- const found = record.get(confObj.tag); // Find matching record fields based on mandatory tag
117
-
118
- // Check if some of found record fields matches all configuration fields
119
- found.forEach(element => {
120
- // Compare each found element against each configuration object
81
+ const res = { message: [], valid: true };
82
+ conf.forEach((confObj) => {
83
+ const found = record.get(confObj.tag);
84
+ found.forEach((element) => {
121
85
  if (Object.entries(confObj).every(([confKey, confField]) => {
122
- // Tag already checked at .get(), subfields later
123
- if (confKey === 'tag' || confKey === 'subfields') {
86
+ if (confKey === "tag" || confKey === "subfields") {
124
87
  return true;
125
88
  }
126
-
127
- // Configuration object is RegExp and record value matches it
128
89
  if (element[confKey] && isRegExp(confField) && confField.test(element[confKey])) {
129
90
  return true;
130
91
  }
131
-
132
- // Configuration object not found from found element
133
92
  return false;
134
93
  })) {
135
- // All configuration fields match, check if some subfields should be excluded.
136
- confObj.subfields.forEach(subField => {
94
+ confObj.subfields.forEach((subField) => {
137
95
  const excluded = [];
138
- element.subfields.forEach(elemSub => {
139
- // Check if subfield matches configuration spec
96
+ element.subfields.forEach((elemSub) => {
140
97
  const subFieldCodeFine = subField.code && elemSub.code && subField.code.test(elemSub.code);
141
98
  const subFieldValueFine = subField.value && elemSub.value && subField.value.test(elemSub.value);
142
- if (subFieldCodeFine && (typeof subField.value === 'undefined' || subFieldValueFine)) {
99
+ if (subFieldCodeFine && (typeof subField.value === "undefined" || subFieldValueFine)) {
143
100
  if (fix) {
144
101
  excluded.push(elemSub);
145
102
  } else {
@@ -147,8 +104,7 @@ function _default(config) {
147
104
  }
148
105
  }
149
106
  });
150
- excluded.forEach(sf => record.removeSubfield(sf, element)); // eslint-disable-line array-callback-return
151
- // If no subfields remains, the whole field will be removed as well:
107
+ excluded.forEach((sf) => record.removeSubfield(sf, element));
152
108
  if (element.subfields && element.subfields.length === 0) {
153
109
  record.removeField(element);
154
110
  }
@@ -156,15 +112,12 @@ function _default(config) {
156
112
  }
157
113
  });
158
114
  });
159
-
160
- // Fix does not send response
161
115
  if (!fix) {
162
116
  if (res.message.length > 0) {
163
117
  res.valid = false;
164
118
  }
165
119
  return res;
166
120
  }
167
- // Res.fix.push('Field $' + element.tag + ' excluded');
168
121
  }
169
122
  }
170
- //# sourceMappingURL=subfield-exclusion.js.map
123
+ //# sourceMappingURL=subfield-exclusion.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"subfield-exclusion.js","names":["confSpec","tag","type","mandatory","ind1","ind2","subfields","code","value","forEach","obj","fun","Object","entries","isRegExp","re","RegExp","_default","config","Array","isArray","TypeError","configValid","description","validate","record","excludeSubfields","fix","checkMandatory","key","val","configMatchesSpec","data","spec","Error","subObj","subKey","subVal","conf","res","message","valid","confObj","found","get","element","every","confKey","confField","test","subField","excluded","elemSub","subFieldCodeFine","subFieldValueFine","push","sf","removeSubfield","length","removeField"],"sources":["../src/subfield-exclusion.js"],"sourcesContent":["// Tag (RegExp): Pattern to match the field's tags Mandatory\n// ind1 (RegExp): Pattern to match the field's ind1 property\n// ind2 (RegExp): Pattern to match the field's ind2 property\n// subfields (Array<Object>): An array of objects with the following properties (Mandatory):\n// // code (RegExp): Pattern to match the subfield's code Mandatory\n// // value (RegExp): Pattern to match the subfield's value\n\n// Configuration specification\nconst confSpec = {\n tag: { // Pattern to match the field's tags\n type: 'RegExp',\n mandatory: true\n },\n ind1: { // Pattern to match the field's ind1 property.\n type: 'RegExp' // Array<Indicator>\n },\n ind2: { // Pattern to match the field's ind2 property.\n type: 'RegExp' // Array<Indicator>\n },\n subfields: { // An array of objects with the following properties\n code: {\n type: 'RegExp',\n mandatory: true\n },\n value: {\n type: 'RegExp'\n },\n mandatory: true\n }\n};\n\nfunction forEach(obj, fun) {\n Object.entries(obj).forEach(fun);\n}\n\nfunction isRegExp(re) {\n return re instanceof RegExp;\n}\n\nexport default function (config) {\n if (!Array.isArray(config)) {\n throw new TypeError('Configuration array not provided');\n }\n\n configValid(config);\n\n return {\n description:\n 'Checks that the record does not contain the configured subfields',\n validate: record => excludeSubfields(record, config, false),\n fix: record => excludeSubfields(record, config, true)\n };\n\n /// /////////////////////////////////////////\n // These check that configuration is valid\n function configValid(config) {\n config.forEach(obj => {\n checkMandatory(confSpec, obj);\n\n forEach(obj, ([key, val]) => {\n configMatchesSpec(val, key, confSpec);\n });\n });\n }\n\n // Recursive validator\n function configMatchesSpec(data, key, spec) {\n // Field not found in configuration spec\n if (!spec[key]) {\n throw new Error(`Configuration not valid - unidentified value: ${key}`);\n }\n\n // If configuration type does not match type in configuration spec\n if (typeof data !== spec[key].type &&\n (spec[key].type === 'RegExp' && !isRegExp(data))) {\n throw new Error(`Configuration not valid - invalid data type for: ${key}`);\n }\n\n // Check subfields recursively\n if (key === 'subfields') {\n forEach(data, ([, subObj]) => {\n // Console.log(\"subObj: \", subObj, \" type: \", typeof subObj, !(Array.isArray(subObj)))\n if (typeof subObj === 'object' && !Array.isArray(subObj)) {\n checkMandatory(spec[key], subObj);\n\n forEach(subObj, ([subKey, subVal]) => {\n configMatchesSpec(subVal, subKey, spec[key]);\n });\n } else {\n throw new TypeError(`Configuration not valid - subfield: ${subObj} not object`);\n }\n });\n }\n }\n\n function checkMandatory(spec, obj) {\n // Check if all mandatory fields are present\n forEach(spec, ([key, val]) => {\n if (val.mandatory && typeof obj[key] === 'undefined') {\n throw new Error(`Configuration not valid - missing mandatory element: ${key}`);\n }\n });\n }\n /// /////////////////////////////////////////\n\n /// /////////////////////////////////////////\n // These check that record is valid\n function excludeSubfields(record, conf, fix) {\n const res = {message: [], valid: true};\n\n // Parse trough every element of config array\n conf.forEach(confObj => {\n const found = record.get(confObj.tag); // Find matching record fields based on mandatory tag\n\n // Check if some of found record fields matches all configuration fields\n found.forEach(element => {\n // Compare each found element against each configuration object\n if (Object.entries(confObj).every(([confKey, confField]) => {\n // Tag already checked at .get(), subfields later\n if (confKey === 'tag' || confKey === 'subfields') {\n return true;\n }\n\n // Configuration object is RegExp and record value matches it\n if (element[confKey] && isRegExp(confField) && confField.test(element[confKey])) {\n return true;\n }\n\n // Configuration object not found from found element\n return false;\n })) {\n // All configuration fields match, check if some subfields should be excluded.\n confObj.subfields.forEach(subField => {\n const excluded = [];\n\n element.subfields.forEach(elemSub => {\n // Check if subfield matches configuration spec\n const subFieldCodeFine = subField.code && elemSub.code && subField.code.test(elemSub.code);\n const subFieldValueFine = subField.value && elemSub.value && subField.value.test(elemSub.value);\n if (subFieldCodeFine && (typeof subField.value === 'undefined' || subFieldValueFine)) {\n if (fix) {\n excluded.push(elemSub);\n } else {\n res.message.push(`Subfield $${element.tag}$$${elemSub.code}should be excluded`);\n }\n }\n });\n\n excluded.forEach(sf => record.removeSubfield(sf, element)); // eslint-disable-line array-callback-return\n // If no subfields remains, the whole field will be removed as well:\n if (element.subfields && element.subfields.length === 0) {\n record.removeField(element);\n }\n });\n }\n });\n });\n\n // Fix does not send response\n if (!fix) {\n if (res.message.length > 0) {\n res.valid = false;\n }\n\n return res;\n }\n // Res.fix.push('Field $' + element.tag + ' excluded');\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/subfield-exclusion.js"],
4
+ "sourcesContent": ["// Tag (RegExp): Pattern to match the field's tags Mandatory\n// ind1 (RegExp): Pattern to match the field's ind1 property\n// ind2 (RegExp): Pattern to match the field's ind2 property\n// subfields (Array<Object>): An array of objects with the following properties (Mandatory):\n// // code (RegExp): Pattern to match the subfield's code Mandatory\n// // value (RegExp): Pattern to match the subfield's value\n\n// Configuration specification\nconst confSpec = {\n tag: { // Pattern to match the field's tags\n type: 'RegExp',\n mandatory: true\n },\n ind1: { // Pattern to match the field's ind1 property.\n type: 'RegExp' // Array<Indicator>\n },\n ind2: { // Pattern to match the field's ind2 property.\n type: 'RegExp' // Array<Indicator>\n },\n subfields: { // An array of objects with the following properties\n code: {\n type: 'RegExp',\n mandatory: true\n },\n value: {\n type: 'RegExp'\n },\n mandatory: true\n }\n};\n\nfunction forEach(obj, fun) {\n Object.entries(obj).forEach(fun);\n}\n\nfunction isRegExp(re) {\n return re instanceof RegExp;\n}\n\nexport default function (config) {\n if (!Array.isArray(config)) {\n throw new TypeError('Configuration array not provided');\n }\n\n configValid(config);\n\n return {\n description:\n 'Checks that the record does not contain the configured subfields',\n validate: record => excludeSubfields(record, config, false),\n fix: record => excludeSubfields(record, config, true)\n };\n\n /// /////////////////////////////////////////\n // These check that configuration is valid\n function configValid(config) {\n config.forEach(obj => {\n checkMandatory(confSpec, obj);\n\n forEach(obj, ([key, val]) => {\n configMatchesSpec(val, key, confSpec);\n });\n });\n }\n\n // Recursive validator\n function configMatchesSpec(data, key, spec) {\n // Field not found in configuration spec\n if (!spec[key]) {\n throw new Error(`Configuration not valid - unidentified value: ${key}`);\n }\n\n // If configuration type does not match type in configuration spec\n if (typeof data !== spec[key].type &&\n (spec[key].type === 'RegExp' && !isRegExp(data))) {\n throw new Error(`Configuration not valid - invalid data type for: ${key}`);\n }\n\n // Check subfields recursively\n if (key === 'subfields') {\n forEach(data, ([, subObj]) => {\n // Console.log(\"subObj: \", subObj, \" type: \", typeof subObj, !(Array.isArray(subObj)))\n if (typeof subObj === 'object' && !Array.isArray(subObj)) {\n checkMandatory(spec[key], subObj);\n\n forEach(subObj, ([subKey, subVal]) => {\n configMatchesSpec(subVal, subKey, spec[key]);\n });\n } else {\n throw new TypeError(`Configuration not valid - subfield: ${subObj} not object`);\n }\n });\n }\n }\n\n function checkMandatory(spec, obj) {\n // Check if all mandatory fields are present\n forEach(spec, ([key, val]) => {\n if (val.mandatory && typeof obj[key] === 'undefined') {\n throw new Error(`Configuration not valid - missing mandatory element: ${key}`);\n }\n });\n }\n /// /////////////////////////////////////////\n\n /// /////////////////////////////////////////\n // These check that record is valid\n function excludeSubfields(record, conf, fix) {\n const res = {message: [], valid: true};\n\n // Parse trough every element of config array\n conf.forEach(confObj => {\n const found = record.get(confObj.tag); // Find matching record fields based on mandatory tag\n\n // Check if some of found record fields matches all configuration fields\n found.forEach(element => {\n // Compare each found element against each configuration object\n if (Object.entries(confObj).every(([confKey, confField]) => {\n // Tag already checked at .get(), subfields later\n if (confKey === 'tag' || confKey === 'subfields') {\n return true;\n }\n\n // Configuration object is RegExp and record value matches it\n if (element[confKey] && isRegExp(confField) && confField.test(element[confKey])) {\n return true;\n }\n\n // Configuration object not found from found element\n return false;\n })) {\n // All configuration fields match, check if some subfields should be excluded.\n confObj.subfields.forEach(subField => {\n const excluded = [];\n\n element.subfields.forEach(elemSub => {\n // Check if subfield matches configuration spec\n const subFieldCodeFine = subField.code && elemSub.code && subField.code.test(elemSub.code);\n const subFieldValueFine = subField.value && elemSub.value && subField.value.test(elemSub.value);\n if (subFieldCodeFine && (typeof subField.value === 'undefined' || subFieldValueFine)) {\n if (fix) {\n excluded.push(elemSub);\n } else {\n res.message.push(`Subfield $${element.tag}$$${elemSub.code}should be excluded`);\n }\n }\n });\n\n excluded.forEach(sf => record.removeSubfield(sf, element));\n // If no subfields remains, the whole field will be removed as well:\n if (element.subfields && element.subfields.length === 0) {\n record.removeField(element);\n }\n });\n }\n });\n });\n\n // Fix does not send response\n if (!fix) {\n if (res.message.length > 0) {\n res.valid = false;\n }\n\n return res;\n }\n // Res.fix.push('Field $' + element.tag + ' excluded');\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["config"]
7
+ }