@natlibfi/marc-record-validators-melinda 12.0.0-alpha.9 → 12.0.1-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (292) hide show
  1. package/dist/access-rights.test.js +1 -1
  2. package/dist/access-rights.test.js.map +1 -1
  3. package/dist/addMissingField337.test.js +1 -1
  4. package/dist/addMissingField337.test.js.map +1 -1
  5. package/dist/addMissingField338.test.js +1 -1
  6. package/dist/addMissingField338.test.js.map +1 -1
  7. package/dist/cyrillux-usemarcon-replacement.test.js +4 -7
  8. package/dist/cyrillux-usemarcon-replacement.test.js.map +2 -2
  9. package/dist/cyrillux.test.js +1 -1
  10. package/dist/cyrillux.test.js.map +1 -1
  11. package/dist/disambiguateSeriesStatements.test.js +1 -7
  12. package/dist/disambiguateSeriesStatements.test.js.map +2 -2
  13. package/dist/double-commas.test.js +1 -1
  14. package/dist/double-commas.test.js.map +1 -1
  15. package/dist/drop-terms.js +122 -0
  16. package/dist/drop-terms.js.map +7 -0
  17. package/dist/drop-terms.test.js +56 -0
  18. package/dist/drop-terms.test.js.map +7 -0
  19. package/dist/empty-fields.test.js +1 -1
  20. package/dist/empty-fields.test.js.map +1 -1
  21. package/dist/ending-punctuation.test.js +39 -19
  22. package/dist/ending-punctuation.test.js.map +2 -2
  23. package/dist/field-008-18-34-character-groups.test.js +2 -8
  24. package/dist/field-008-18-34-character-groups.test.js.map +2 -2
  25. package/dist/field-505-separators.test.js +1 -7
  26. package/dist/field-505-separators.test.js.map +2 -2
  27. package/dist/field-521-fix.test.js +1 -7
  28. package/dist/field-521-fix.test.js.map +2 -2
  29. package/dist/field-exclusion.test.js +11 -8
  30. package/dist/field-exclusion.test.js.map +2 -2
  31. package/dist/field-structure.test.js +1 -1
  32. package/dist/field-structure.test.js.map +1 -1
  33. package/dist/fields-present.test.js +1 -1
  34. package/dist/fields-present.test.js.map +1 -1
  35. package/dist/fix-33X.test.js +1 -1
  36. package/dist/fix-33X.test.js.map +1 -1
  37. package/dist/fix-country-codes.test.js +1 -7
  38. package/dist/fix-country-codes.test.js.map +2 -2
  39. package/dist/fix-sami-041.js +87 -0
  40. package/dist/fix-sami-041.js.map +7 -0
  41. package/dist/fix-sami-041.test.js +40 -0
  42. package/dist/fix-sami-041.test.js.map +7 -0
  43. package/dist/fixRelatorTerms.test.js +2 -8
  44. package/dist/fixRelatorTerms.test.js.map +2 -2
  45. package/dist/fixed-fields.test.js +29 -18
  46. package/dist/fixed-fields.test.js.map +2 -2
  47. package/dist/identical-fields.test.js +1 -1
  48. package/dist/identical-fields.test.js.map +1 -1
  49. package/dist/index.js +7 -1
  50. package/dist/index.js.map +2 -2
  51. package/dist/indicator-fixes.js +10 -0
  52. package/dist/indicator-fixes.js.map +2 -2
  53. package/dist/indicator-fixes.test.js +1 -7
  54. package/dist/indicator-fixes.test.js.map +2 -2
  55. package/dist/isbn-issn.js +1 -1
  56. package/dist/isbn-issn.js.map +2 -2
  57. package/dist/isbn-issn.test.js +9 -6
  58. package/dist/isbn-issn.test.js.map +2 -2
  59. package/dist/item-language.test.js +1 -1
  60. package/dist/item-language.test.js.map +2 -2
  61. package/dist/merge-fields.test.js +2 -7
  62. package/dist/merge-fields.test.js.map +2 -2
  63. package/dist/mergeField500Lisapainokset.test.js +1 -7
  64. package/dist/mergeField500Lisapainokset.test.js.map +2 -2
  65. package/dist/mergeRelatorTermFields.test.js +1 -7
  66. package/dist/mergeRelatorTermFields.test.js.map +2 -2
  67. package/dist/multiple-subfield-0.test.js +1 -7
  68. package/dist/multiple-subfield-0.test.js.map +2 -2
  69. package/dist/normalize-dashes.test.js +1 -7
  70. package/dist/normalize-dashes.test.js.map +2 -2
  71. package/dist/normalize-identifiers.test.js +1 -7
  72. package/dist/normalize-identifiers.test.js.map +2 -2
  73. package/dist/normalize-qualifying-information.test.js +1 -7
  74. package/dist/normalize-qualifying-information.test.js.map +2 -2
  75. package/dist/normalize-utf8-diacritics.test.js +1 -7
  76. package/dist/normalize-utf8-diacritics.test.js.map +2 -2
  77. package/dist/normalizeFieldForComparison.js +24 -0
  78. package/dist/normalizeFieldForComparison.js.map +2 -2
  79. package/dist/punctuation.test.js +1 -7
  80. package/dist/punctuation.test.js.map +2 -2
  81. package/dist/punctuation2.test.js +2 -8
  82. package/dist/punctuation2.test.js.map +2 -2
  83. package/dist/reindexSubfield6OccurenceNumbers.test.js +1 -7
  84. package/dist/reindexSubfield6OccurenceNumbers.test.js.map +2 -2
  85. package/dist/remove-041-zxx.js +56 -0
  86. package/dist/remove-041-zxx.js.map +7 -0
  87. package/dist/remove-041-zxx.test.js +40 -0
  88. package/dist/remove-041-zxx.test.js.map +7 -0
  89. package/dist/removeDuplicateDataFields.test.js +2 -8
  90. package/dist/removeDuplicateDataFields.test.js.map +2 -2
  91. package/dist/removeInferiorDataFields.js +1 -9
  92. package/dist/removeInferiorDataFields.js.map +2 -2
  93. package/dist/removeInferiorDataFields.test.js +1 -7
  94. package/dist/removeInferiorDataFields.test.js.map +2 -2
  95. package/dist/resolvable-ext-references-melinda.test.js +1 -1
  96. package/dist/resolvable-ext-references-melinda.test.js.map +2 -2
  97. package/dist/resolveOrphanedSubfield6s.js +1 -3
  98. package/dist/resolveOrphanedSubfield6s.js.map +2 -2
  99. package/dist/resolveOrphanedSubfield6s.test.js +1 -7
  100. package/dist/resolveOrphanedSubfield6s.test.js.map +2 -2
  101. package/dist/sanitize-vocabulary-source-codes.test.js +1 -7
  102. package/dist/sanitize-vocabulary-source-codes.test.js.map +2 -2
  103. package/dist/sort-tags.test.js +1 -1
  104. package/dist/sort-tags.test.js.map +1 -1
  105. package/dist/sortFields.js +16 -1
  106. package/dist/sortFields.js.map +2 -2
  107. package/dist/sortFields.test.js +1 -7
  108. package/dist/sortFields.test.js.map +2 -2
  109. package/dist/sortRelatorTerms.test.js +1 -7
  110. package/dist/sortRelatorTerms.test.js.map +2 -2
  111. package/dist/sortSubfields.js +3 -1
  112. package/dist/sortSubfields.js.map +2 -2
  113. package/dist/sortSubfields.test.js +1 -7
  114. package/dist/sortSubfields.test.js.map +2 -2
  115. package/dist/stripPunctuation.js +7 -4
  116. package/dist/stripPunctuation.js.map +2 -2
  117. package/dist/stripPunctuation.test.js +1 -7
  118. package/dist/stripPunctuation.test.js.map +2 -2
  119. package/dist/subfield-exclusion.test.js +1 -1
  120. package/dist/subfield-exclusion.test.js.map +1 -1
  121. package/dist/subfield6Utils.js +1 -13
  122. package/dist/subfield6Utils.js.map +2 -2
  123. package/dist/subfieldValueNormalizations.test.js +1 -7
  124. package/dist/subfieldValueNormalizations.test.js.map +2 -2
  125. package/dist/sync-007-and-300.test.js +1 -7
  126. package/dist/sync-007-and-300.test.js.map +2 -2
  127. package/dist/sync-language.js +103 -0
  128. package/dist/sync-language.js.map +7 -0
  129. package/dist/sync-language.test.js +40 -0
  130. package/dist/sync-language.test.js.map +7 -0
  131. package/dist/translate-terms.js +121 -85
  132. package/dist/translate-terms.js.map +3 -3
  133. package/dist/translate-terms.test.js +5 -8
  134. package/dist/translate-terms.test.js.map +2 -2
  135. package/dist/unicode-decomposition.test.js +1 -1
  136. package/dist/unicode-decomposition.test.js.map +1 -1
  137. package/dist/update-field-540.test.js +2 -8
  138. package/dist/update-field-540.test.js.map +2 -2
  139. package/dist/urn.test.js +2 -8
  140. package/dist/urn.test.js.map +2 -2
  141. package/package.json +18 -16
  142. package/src/access-rights.test.js +1 -1
  143. package/src/addMissingField337.test.js +1 -1
  144. package/src/addMissingField338.test.js +1 -1
  145. package/src/cyrillux-usemarcon-replacement.test.js +4 -9
  146. package/src/cyrillux.test.js +1 -1
  147. package/src/disambiguateSeriesStatements.test.js +3 -8
  148. package/src/double-commas.test.js +1 -1
  149. package/src/drop-terms.js +162 -0
  150. package/src/drop-terms.test.js +81 -0
  151. package/src/empty-fields.test.js +1 -1
  152. package/src/ending-punctuation.test.js +28 -20
  153. package/src/field-008-18-34-character-groups.test.js +4 -9
  154. package/src/field-505-separators.test.js +3 -8
  155. package/src/field-521-fix.test.js +3 -8
  156. package/src/field-exclusion.test.js +10 -8
  157. package/src/field-structure.test.js +1 -1
  158. package/src/fields-present.test.js +1 -1
  159. package/src/fix-33X.test.js +1 -1
  160. package/src/fix-country-codes.test.js +3 -8
  161. package/src/fix-sami-041.js +113 -0
  162. package/src/fix-sami-041.test.js +52 -0
  163. package/src/fixRelatorTerms.test.js +4 -9
  164. package/src/fixed-fields.test.js +24 -18
  165. package/src/identical-fields.test.js +1 -1
  166. package/src/index.js +8 -1
  167. package/src/indicator-fixes.js +12 -0
  168. package/src/indicator-fixes.test.js +3 -8
  169. package/src/isbn-issn.js +1 -1
  170. package/src/isbn-issn.test.js +8 -6
  171. package/src/item-language.test.js +2 -2
  172. package/src/merge-fields.test.js +3 -8
  173. package/src/mergeField500Lisapainokset.test.js +3 -8
  174. package/src/mergeRelatorTermFields.test.js +3 -8
  175. package/src/multiple-subfield-0.test.js +3 -8
  176. package/src/normalize-dashes.test.js +3 -8
  177. package/src/normalize-identifiers.test.js +3 -8
  178. package/src/normalize-qualifying-information.test.js +3 -8
  179. package/src/normalize-utf8-diacritics.test.js +3 -8
  180. package/src/normalizeFieldForComparison.js +26 -0
  181. package/src/punctuation.test.js +3 -8
  182. package/src/punctuation2.test.js +4 -9
  183. package/src/reindexSubfield6OccurenceNumbers.test.js +3 -8
  184. package/src/remove-041-zxx.js +85 -0
  185. package/src/remove-041-zxx.test.js +52 -0
  186. package/src/removeDuplicateDataFields.test.js +4 -9
  187. package/src/removeInferiorDataFields.js +7 -7
  188. package/src/removeInferiorDataFields.test.js +3 -8
  189. package/src/resolvable-ext-references-melinda.test.js +5 -5
  190. package/src/resolveOrphanedSubfield6s.js +3 -3
  191. package/src/resolveOrphanedSubfield6s.test.js +3 -8
  192. package/src/sanitize-vocabulary-source-codes.test.js +3 -8
  193. package/src/sort-tags.test.js +1 -1
  194. package/src/sortFields.js +20 -1
  195. package/src/sortFields.test.js +3 -8
  196. package/src/sortRelatorTerms.test.js +3 -8
  197. package/src/sortSubfields.js +3 -1
  198. package/src/sortSubfields.test.js +3 -8
  199. package/src/stripPunctuation.js +9 -6
  200. package/src/stripPunctuation.test.js +3 -8
  201. package/src/subfield-exclusion.test.js +1 -1
  202. package/src/subfield6Utils.js +13 -13
  203. package/src/subfieldValueNormalizations.test.js +3 -8
  204. package/src/sync-007-and-300.test.js +3 -8
  205. package/src/sync-language.js +148 -0
  206. package/src/sync-language.test.js +52 -0
  207. package/src/translate-terms.js +158 -103
  208. package/src/translate-terms.test.js +12 -16
  209. package/src/unicode-decomposition.test.js +1 -1
  210. package/src/update-field-540.test.js +4 -9
  211. package/src/urn.test.js +4 -9
  212. package/test-fixtures/drop-terms/01/expectedResult.json +31 -0
  213. package/test-fixtures/drop-terms/01/metadata.json +6 -0
  214. package/test-fixtures/drop-terms/01/record.json +35 -0
  215. package/test-fixtures/drop-terms/02/expectedResult.json +7 -0
  216. package/test-fixtures/drop-terms/02/metadata.json +6 -0
  217. package/test-fixtures/drop-terms/02/record.json +40 -0
  218. package/test-fixtures/drop-terms/03/expectedResult.json +6 -0
  219. package/test-fixtures/drop-terms/03/metadata.json +18 -0
  220. package/test-fixtures/drop-terms/03/record.json +39 -0
  221. package/test-fixtures/drop-terms/04/expectedResult.json +6 -0
  222. package/test-fixtures/drop-terms/04/metadata.json +19 -0
  223. package/test-fixtures/drop-terms/04/record.json +24 -0
  224. package/test-fixtures/fix-language-codes/02/metadata.json +1 -1
  225. package/test-fixtures/fix-sami-041/01/expectedResult.json +6 -0
  226. package/test-fixtures/fix-sami-041/01/metadata.json +4 -0
  227. package/test-fixtures/fix-sami-041/01/record.json +13 -0
  228. package/test-fixtures/fix-sami-041/02/expectedResult.json +10 -0
  229. package/test-fixtures/fix-sami-041/02/metadata.json +4 -0
  230. package/test-fixtures/fix-sami-041/02/record.json +8 -0
  231. package/test-fixtures/fix-sami-041/03/expectedResult.json +5 -0
  232. package/test-fixtures/fix-sami-041/03/metadata.json +5 -0
  233. package/test-fixtures/fix-sami-041/03/record.json +8 -0
  234. package/test-fixtures/fix-sami-041/04/expectedResult.json +7 -0
  235. package/test-fixtures/fix-sami-041/04/metadata.json +4 -0
  236. package/test-fixtures/fix-sami-041/04/record.json +10 -0
  237. package/test-fixtures/fix-sami-041/05/expectedResult.json +10 -0
  238. package/test-fixtures/fix-sami-041/05/metadata.json +6 -0
  239. package/test-fixtures/fix-sami-041/05/record.json +8 -0
  240. package/test-fixtures/indicator-fixes/11/expectedResult.json +10 -0
  241. package/test-fixtures/indicator-fixes/11/metadata.json +4 -0
  242. package/test-fixtures/indicator-fixes/11/record.json +10 -0
  243. package/test-fixtures/merge-fields/f05/metadata.json +1 -1
  244. package/test-fixtures/remove-041-zxx/01/expectedResult.json +5 -0
  245. package/test-fixtures/remove-041-zxx/01/metadata.json +5 -0
  246. package/test-fixtures/remove-041-zxx/01/record.json +10 -0
  247. package/test-fixtures/remove-041-zxx/02/expectedResult.json +7 -0
  248. package/test-fixtures/remove-041-zxx/02/metadata.json +5 -0
  249. package/test-fixtures/remove-041-zxx/02/record.json +9 -0
  250. package/test-fixtures/remove-041-zxx/11/expectedResult.json +10 -0
  251. package/test-fixtures/remove-041-zxx/11/metadata.json +5 -0
  252. package/test-fixtures/remove-041-zxx/11/record.json +9 -0
  253. package/test-fixtures/remove-041-zxx/12/expectedResult.json +10 -0
  254. package/test-fixtures/remove-041-zxx/12/metadata.json +5 -0
  255. package/test-fixtures/remove-041-zxx/12/record.json +9 -0
  256. package/test-fixtures/sort-fields/15/input.json +9 -0
  257. package/test-fixtures/sort-fields/15/metadata.json +5 -0
  258. package/test-fixtures/sort-fields/15/result.json +10 -0
  259. package/test-fixtures/sync-language/01/expectedResult.json +5 -0
  260. package/test-fixtures/sync-language/01/metadata.json +5 -0
  261. package/test-fixtures/sync-language/01/record.json +7 -0
  262. package/test-fixtures/sync-language/02/expectedResult.json +6 -0
  263. package/test-fixtures/sync-language/02/metadata.json +5 -0
  264. package/test-fixtures/sync-language/02/record.json +10 -0
  265. package/test-fixtures/sync-language/03/expectedResult.json +6 -0
  266. package/test-fixtures/sync-language/03/metadata.json +5 -0
  267. package/test-fixtures/sync-language/03/record.json +6 -0
  268. package/test-fixtures/sync-language/10/expectedResult.json +10 -0
  269. package/test-fixtures/sync-language/10/metadata.json +5 -0
  270. package/test-fixtures/sync-language/10/record.json +8 -0
  271. package/test-fixtures/sync-language/11/expectedResult.json +10 -0
  272. package/test-fixtures/sync-language/11/metadata.json +5 -0
  273. package/test-fixtures/sync-language/11/record.json +7 -0
  274. package/test-fixtures/sync-language/12/expectedResult.json +9 -0
  275. package/test-fixtures/sync-language/12/metadata.json +6 -0
  276. package/test-fixtures/sync-language/12/record.json +6 -0
  277. package/test-fixtures/sync-language/13/expectedResult.json +10 -0
  278. package/test-fixtures/sync-language/13/metadata.json +5 -0
  279. package/test-fixtures/sync-language/13/record.json +8 -0
  280. package/test-fixtures/sync-language/14/expectedResult.json +9 -0
  281. package/test-fixtures/sync-language/14/metadata.json +5 -0
  282. package/test-fixtures/sync-language/14/record.json +7 -0
  283. package/test-fixtures/sync-language/15/expectedResult.json +9 -0
  284. package/test-fixtures/sync-language/15/metadata.json +5 -0
  285. package/test-fixtures/sync-language/15/record.json +7 -0
  286. package/test-fixtures/translate-terms/05/expectedResult.json +12 -0
  287. package/test-fixtures/translate-terms/05/metadata.json +7 -0
  288. package/test-fixtures/translate-terms/05/record.json +11 -0
  289. package/test-fixtures/translate-terms/06/expectedResult.json +12 -0
  290. package/test-fixtures/translate-terms/06/metadata.json +7 -0
  291. package/test-fixtures/translate-terms/06/record.json +11 -0
  292. package/test-fixtures/translate-terms-data.js +23 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
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"],
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, 'object');\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
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
6
  "names": []
7
7
  }
@@ -3,7 +3,6 @@ import { MarcRecord } from "@natlibfi/marc-record";
3
3
  import validatorFactory from "./fix-country-codes.js";
4
4
  import { READERS } from "@natlibfi/fixura";
5
5
  import generateTests from "@natlibfi/fixugen";
6
- import createDebugLogger from "debug";
7
6
  generateTests({
8
7
  callback,
9
8
  path: [import.meta.dirname, "..", "test-fixtures", "fix-country-codes"],
@@ -18,18 +17,13 @@ generateTests({
18
17
  }
19
18
  }
20
19
  });
21
- const debug = createDebugLogger("@natlibfi/marc-record-validators-melinda/fix-country-codes:test");
22
20
  async function testValidatorFactory() {
23
21
  const validator = await validatorFactory();
24
22
  assert.equal(typeof validator, "object");
25
23
  assert.equal(typeof validator.description, "string");
26
24
  assert.equal(typeof validator.validate, "function");
27
25
  }
28
- async function callback({ getFixture, enabled = true, fix = false }) {
29
- if (enabled === false) {
30
- debug("TEST SKIPPED!");
31
- return;
32
- }
26
+ async function callback({ getFixture, fix = false }) {
33
27
  const validator = await validatorFactory();
34
28
  const record = new MarcRecord(getFixture("record.json"));
35
29
  const expectedResult = getFixture("expectedResult.json");
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
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;",
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';\n//import 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});\n//const 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, 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;AAG1B,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;AAGD,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
6
  "names": []
7
7
  }
@@ -0,0 +1,87 @@
1
+ import clone from "clone";
2
+ import { fieldToString } from "./utils.js";
3
+ export default function() {
4
+ const samiLanguages = ["sma", "sme", "smj", "smn", "sms"];
5
+ const relevantSubfieldCodes = ["a", "d"];
6
+ return {
7
+ description: "Add corresponing 'smi' subfield before a specific sami language subfields, if needed",
8
+ validate,
9
+ fix
10
+ };
11
+ function fix(record, validateMode = false) {
12
+ const relevantFields = record.fields.filter((f) => isRelevantField(f, validateMode)).map((f) => validateMode ? clone(f) : f);
13
+ if (relevantFields.length === 0) {
14
+ if (validateMode) {
15
+ return { message: [], valid: true };
16
+ }
17
+ return { message: [], fix: [], valid: true };
18
+ }
19
+ const relevantFieldsAsStrings = relevantFields.map((f) => fieldToString(f));
20
+ relevantFields.forEach((f) => processField(f));
21
+ const modFieldsAsStrings = relevantFields.map((f) => fieldToString(f));
22
+ const report = [...updateAndReport008(), ...createReport(relevantFieldsAsStrings, modFieldsAsStrings)];
23
+ if (validateMode) {
24
+ return { "message": report, "valid": false };
25
+ }
26
+ return { message: [], fix: report, valid: true };
27
+ function updateAndReport008() {
28
+ const [f008] = record.get("008").map((f) => validateMode ? clone(f) : f);
29
+ if (!f008) {
30
+ return [];
31
+ }
32
+ const currLang = f008.value.substr(35, 3);
33
+ if (!samiLanguages.includes(currLang)) {
34
+ return [];
35
+ }
36
+ const origValue = f008.value;
37
+ const firstRelevantSubfield = relevantFields[0].subfields.find((sf) => sf.code === "a" || sf.code === "d");
38
+ if (firstRelevantSubfield.value === "smi") {
39
+ f008.value = `${f008.value.substr(0, 35)}smi${f008.value.substr(38)}`;
40
+ }
41
+ return createReport([origValue], [f008.value]);
42
+ }
43
+ }
44
+ function createReport(origArray, modArray) {
45
+ return origArray.map((entry, index) => createEntry(entry, index));
46
+ function createEntry(item, index) {
47
+ return `'${item}' => '${modArray[index]}'`;
48
+ }
49
+ }
50
+ function validate(record) {
51
+ return fix(record, true);
52
+ }
53
+ function processField(f) {
54
+ f.subfields = prosessSubfields(f.subfields);
55
+ return f;
56
+ }
57
+ function prosessSubfields(incomingSubfields, outgoingSubfields = []) {
58
+ const [currSubfield, ...otherSubfields] = incomingSubfields;
59
+ if (!currSubfield) {
60
+ return outgoingSubfields;
61
+ }
62
+ if (!isRelevantSamiSubfield(currSubfield, [...outgoingSubfields, ...otherSubfields])) {
63
+ return prosessSubfields(otherSubfields, [...outgoingSubfields, currSubfield]);
64
+ }
65
+ const smiSubfield = {
66
+ code: currSubfield.code,
67
+ value: "smi"
68
+ };
69
+ return prosessSubfields(otherSubfields, [...outgoingSubfields, smiSubfield, currSubfield]);
70
+ }
71
+ function isRelevantField(f) {
72
+ if (f.tag !== "041" || !f.subfields || f.subfields.some((sf) => sf.code === "2")) {
73
+ return false;
74
+ }
75
+ return f.subfields.some((sf) => isRelevantSamiSubfield(sf, f.subfields));
76
+ }
77
+ function isRelevantSamiSubfield(sf, otherSubfields) {
78
+ if (!relevantSubfieldCodes.includes(sf.code) || !samiLanguages.includes(sf.value)) {
79
+ return false;
80
+ }
81
+ if (otherSubfields.some((sf2) => sf2.code === sf.code && sf2.value === "smi")) {
82
+ return false;
83
+ }
84
+ return true;
85
+ }
86
+ }
87
+ //# sourceMappingURL=fix-sami-041.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/fix-sami-041.js"],
4
+ "sourcesContent": ["// Author(s): Nicholas Volk\n\n//import createDebugLogger from 'debug';\nimport clone from 'clone';\n\nimport {fieldToString} from './utils.js';\n\n// const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:fix-sami-041');\n\n\n\nexport default function () {\n /* 'sma': etel\u00E4saame, 'sme': pohjoissaame, 'smj': luulajansaame, 'smn': inarinsaame, 'sms': koltansaame */\n const samiLanguages = ['sma', 'sme', 'smj', 'smn', 'sms'];\n const relevantSubfieldCodes = ['a', 'd']; // Subfield codes that should also have 'smi' if a sami langauge is used. Confirmed by A.R. via Slack 2025-12-05\n\n return {\n description: 'Add corresponing \\'smi\\' subfield before a specific sami language subfields, if needed',\n validate, fix\n };\n\n function fix(record, validateMode = false) {\n const relevantFields = record.fields.filter(f => isRelevantField(f, validateMode)).map(f => validateMode ? clone(f) : f); // NV! relevant fields are cloned in validation mode!\n // Nothing to do:\n if (relevantFields.length === 0) {\n if (validateMode) {\n return {message: [], valid: true};\n }\n return {message: [], fix: [], valid: true};\n }\n\n const relevantFieldsAsStrings = relevantFields.map(f => fieldToString(f)); // get original values\n\n relevantFields.forEach(f => processField(f));\n const modFieldsAsStrings = relevantFields.map(f => fieldToString(f));\n const report = [...updateAndReport008(), ...createReport(relevantFieldsAsStrings, modFieldsAsStrings)];\n\n if (validateMode) {\n return {'message': report, 'valid': false};\n }\n\n return {message: [], fix: report, valid: true};\n\n function updateAndReport008() {\n const [f008] = record.get('008').map(f => validateMode ? clone(f) : f);\n\n if (!f008) {\n return [];\n }\n const currLang = f008.value.substr(35, 3);\n if (!samiLanguages.includes(currLang)) { // NB! If original 008/35-37 was not a sami language, we don't change anything!\n return [];\n }\n const origValue = f008.value;\n const firstRelevantSubfield = relevantFields[0].subfields.find(sf => sf.code === 'a' || sf.code === 'd'); // NB! don't use relevantSubfieldCodes here!\n if (firstRelevantSubfield.value === 'smi') { // First relevant subfield is \n f008.value = `${f008.value.substr(0, 35)}smi${f008.value.substr(38)}`;\n }\n return createReport([origValue], [f008.value]);\n }\n }\n\n function createReport(origArray, modArray) {\n return origArray.map((entry, index) => createEntry(entry, index));\n\n function createEntry(item, index) {\n return `'${item}' => '${modArray[index]}'`;\n }\n }\n\n function validate(record) {\n return fix(record, true);\n }\n\n function processField(f) {\n f.subfields = prosessSubfields(f.subfields);\n return f;\n }\n\n function prosessSubfields(incomingSubfields, outgoingSubfields = []) {\n const [currSubfield, ...otherSubfields] = incomingSubfields;\n if (!currSubfield) {\n return outgoingSubfields;\n }\n if (!isRelevantSamiSubfield(currSubfield, [...outgoingSubfields, ...otherSubfields])) {\n return prosessSubfields(otherSubfields, [...outgoingSubfields, currSubfield]);\n }\n\n const smiSubfield = {\n code: currSubfield.code,\n value: 'smi'\n };\n return prosessSubfields(otherSubfields, [...outgoingSubfields, smiSubfield, currSubfield]);\n }\n\n function isRelevantField(f) {\n if (f.tag !== '041' || !f.subfields || f.subfields.some(sf => sf.code === '2')) {\n return false;\n }\n return f.subfields.some(sf => isRelevantSamiSubfield(sf, f.subfields)); // it's ok to pass sf in f.subfields also\n }\n\n function isRelevantSamiSubfield(sf, otherSubfields) {\n if (!relevantSubfieldCodes.includes(sf.code) || !samiLanguages.includes(sf.value)) {\n return false;\n }\n if (otherSubfields.some(sf2 => sf2.code === sf.code && sf2.value === 'smi')) {\n return false;\n }\n return true;\n }\n}\n\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,40 @@
1
+ import assert from "node:assert/strict";
2
+ import validatorFactory from "./fix-sami-041.js";
3
+ import { MarcRecord } from "@natlibfi/marc-record";
4
+ import { READERS } from "@natlibfi/fixura";
5
+ import generateTests from "@natlibfi/fixugen";
6
+ generateTests({
7
+ callback,
8
+ path: [import.meta.dirname, "..", "test-fixtures", "fix-sami-041"],
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
+ const originalRecord = new MarcRecord(getFixture("record.json"));
34
+ assert.deepEqual(record, originalRecord);
35
+ return;
36
+ }
37
+ await validator.fix(record);
38
+ assert.deepEqual(record, new MarcRecord(expectedResult));
39
+ }
40
+ //# sourceMappingURL=fix-sami-041.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/fix-sami-041.test.js"],
4
+ "sourcesContent": ["import assert from 'node:assert/strict';\n//import createDebugLogger from 'debug';\n\nimport validatorFactory from './fix-sami-041.js';\n\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\n\ngenerateTests({\n callback,\n path: [import.meta.dirname, '..', 'test-fixtures', 'fix-sami-041'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n hooks: {\n before: async () => {\n testValidatorFactory();\n }\n }\n});\n\n//const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/drop-terms: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, fix = false}) {\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n //const expectedResult = new MarcRecord(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 const originalRecord = new MarcRecord(getFixture('record.json'));\n assert.deepEqual(record, originalRecord); // The record should now change in validation-only\n return;\n }\n\n await validator.fix(record);\n assert.deepEqual(record, new MarcRecord(expectedResult));\n}\n"],
5
+ "mappings": "AAAA,OAAO,YAAY;AAGnB,OAAO,sBAAsB;AAE7B,SAAQ,kBAAiB;AACzB,SAAQ,eAAc;AACtB,OAAO,mBAAmB;AAE1B,cAAc;AAAA,EACZ;AAAA,EACA,MAAM,CAAC,YAAY,SAAS,MAAM,iBAAiB,cAAc;AAAA,EACjE,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;AAID,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;AAIvD,MAAI,CAAC,KAAK;AACR,UAAM,SAAS,MAAM,UAAU,SAAS,MAAM;AAC9C,WAAO,UAAU,QAAQ,cAAc;AACvC,UAAM,iBAAiB,IAAI,WAAW,WAAW,aAAa,CAAC;AAC/D,WAAO,UAAU,QAAQ,cAAc;AACvC;AAAA,EACF;AAEA,QAAM,UAAU,IAAI,MAAM;AAC1B,SAAO,UAAU,QAAQ,IAAI,WAAW,cAAc,CAAC;AACzD;",
6
+ "names": []
7
+ }
@@ -1,9 +1,8 @@
1
1
  import assert from "node:assert";
2
2
  import { MarcRecord } from "@natlibfi/marc-record";
3
- import validatorFactory from "../src/fixRelatorTerms.js";
3
+ import validatorFactory from "./fixRelatorTerms.js";
4
4
  import { READERS } from "@natlibfi/fixura";
5
5
  import generateTests from "@natlibfi/fixugen";
6
- import createDebugLogger from "debug";
7
6
  generateTests({
8
7
  callback,
9
8
  path: [import.meta.dirname, "..", "test-fixtures", "fix-relator-terms"],
@@ -18,18 +17,13 @@ generateTests({
18
17
  }
19
18
  }
20
19
  });
21
- const debug = createDebugLogger("@natlibfi/marc-record-validators-melinda/fixRelatorTerms:test");
22
20
  async function testValidatorFactory() {
23
21
  const validator = await validatorFactory();
24
22
  assert.equal(typeof validator, "object");
25
23
  assert.equal(typeof validator.description, "string");
26
24
  assert.equal(typeof validator.validate, "function");
27
25
  }
28
- async function callback({ getFixture, enabled = true, fix = false }) {
29
- if (enabled === false) {
30
- debug("TEST SKIPPED!");
31
- return;
32
- }
26
+ async function callback({ getFixture, fix = false }) {
33
27
  const validator = await validatorFactory();
34
28
  const record = new MarcRecord(getFixture("record.json"));
35
29
  const expectedResult = getFixture("expectedResult.json");
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/fixRelatorTerms.test.js"],
4
- "sourcesContent": ["import assert from 'node:assert';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/fixRelatorTerms.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-relator-terms'],\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/fixRelatorTerms: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,+DAA+D;AAE/F,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;",
4
+ "sourcesContent": ["import assert from 'node:assert';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './fixRelatorTerms.js';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\n//import createDebugLogger from 'debug';\n\ngenerateTests({\n callback,\n path: [import.meta.dirname, '..', 'test-fixtures', 'fix-relator-terms'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n hooks: {\n before: async () => {\n testValidatorFactory();\n }\n }\n});\n\n//const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/fixRelatorTerms: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, 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;AAG1B,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;AAID,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
6
  "names": []
7
7
  }
@@ -1,6 +1,6 @@
1
1
  import assert from "node:assert";
2
2
  import { MarcRecord } from "@natlibfi/marc-record";
3
- import validatorFactory from "../src/fixed-fields.js";
3
+ import validatorFactory from "./fixed-fields.js";
4
4
  import { describe, it } from "node:test";
5
5
  describe("fixed-fields: language", () => {
6
6
  it("Creates a validator", async () => {
@@ -22,11 +22,15 @@ describe("fixed-fields: language", () => {
22
22
  const validator = await validatorFactory([
23
23
  { leader: true, length: 6, rules: [{ position: [0, 6], pattern: /[abcdefg]/u }] },
24
24
  { tag: /^FOO$/u, length: 12, rules: [{ position: 0, pattern: /f/u }] },
25
- { tag: /^BAR$/u, length: 6, rules: [
26
- { position: 0, pattern: /[fb]/u },
27
- { position: 1, pattern: /a/u, dependencies: [{ position: 0, pattern: /b/u }] },
28
- { position: [2, 3], pattern: /u/u, dependencies: [{ position: 0, pattern: /[^b]/u }] }
29
- ] }
25
+ {
26
+ tag: /^BAR$/u,
27
+ length: 6,
28
+ rules: [
29
+ { position: 0, pattern: /[fb]/u },
30
+ { position: 1, pattern: /a/u, dependencies: [{ position: 0, pattern: /b/u }] },
31
+ { position: [2, 3], pattern: /u/u, dependencies: [{ position: 0, pattern: /[^b]/u }] }
32
+ ]
33
+ }
30
34
  ]);
31
35
  const record = new MarcRecord({
32
36
  leader: "bacgfe",
@@ -49,11 +53,15 @@ describe("fixed-fields: language", () => {
49
53
  const validator = await validatorFactory([
50
54
  { leader: true, length: 6, rules: [{ position: [0, 6], pattern: /[abcdefg]/u }] },
51
55
  { tag: /^FOO$/u, length: 12, rules: [{ position: 0, pattern: /f/u }] },
52
- { tag: /^BAR$/u, length: 6, rules: [
53
- { position: 0, pattern: /[fb]/u },
54
- { position: 1, pattern: /a/u, dependencies: [{ position: 0, pattern: /b/u }] },
55
- { position: [2, 3], pattern: /u/u, dependencies: [{ position: 0, pattern: /[^a]/u }] }
56
- ] },
56
+ {
57
+ tag: /^BAR$/u,
58
+ length: 6,
59
+ rules: [
60
+ { position: 0, pattern: /[fb]/u },
61
+ { position: 1, pattern: /a/u, dependencies: [{ position: 0, pattern: /b/u }] },
62
+ { position: [2, 3], pattern: /u/u, dependencies: [{ position: 0, pattern: /[^a]/u }] }
63
+ ]
64
+ },
57
65
  { tag: /^FUB$/u, length: 5 }
58
66
  ]);
59
67
  const record = new MarcRecord({
@@ -74,13 +82,16 @@ describe("fixed-fields: language", () => {
74
82
  ]
75
83
  });
76
84
  const result = await validator.validate(record);
77
- assert.deepEqual(result, { valid: false, messages: [
78
- "Leader has invalid values at positions: 3 (Rule index 0)",
79
- "Field FOO has invalid values at positions: 0 (Rule index 0)",
80
- "Field BAR has invalid values at positions: 1 (Rule index 1)",
81
- "Field BAR has invalid values at positions: 2,3 (Rule index 2)",
82
- "Field FUB has invalid length"
83
- ] });
85
+ assert.deepEqual(result, {
86
+ valid: false,
87
+ messages: [
88
+ "Leader has invalid values at positions: 3 (Rule index 0)",
89
+ "Field FOO has invalid values at positions: 0 (Rule index 0)",
90
+ "Field BAR has invalid values at positions: 1 (Rule index 1)",
91
+ "Field BAR has invalid values at positions: 2,3 (Rule index 2)",
92
+ "Field FUB has invalid length"
93
+ ]
94
+ });
84
95
  });
85
96
  });
86
97
  });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/fixed-fields.test.js"],
4
- "sourcesContent": ["import assert from 'node:assert';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/fixed-fields.js';\nimport {describe, it} from 'node:test';\n\n\ndescribe('fixed-fields: language', () => {\n it('Creates a validator', async () => {\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\n it('Throws an error when configuration is not provided', () => {\n try {\n validatorFactory();\n } catch (error) {\n assert.equal(error instanceof Error, true);\n assert.equal(error.message, 'No configuration provided');\n }\n });\n\n describe('#validate', () => {\n it('Finds the record valid', async () => {\n const validator = await validatorFactory([\n {leader: true, length: 6, rules: [{position: [0, 6], pattern: /[abcdefg]/u}]},\n {tag: /^FOO$/u, length: 12, rules: [{position: 0, pattern: /f/u}]},\n {tag: /^BAR$/u, length: 6, rules: [\n {position: 0, pattern: /[fb]/u},\n {position: 1, pattern: /a/u, dependencies: [{position: 0, pattern: /b/u}]},\n {position: [2, 3], pattern: /u/u, dependencies: [{position: 0, pattern: /[^b]/u}]}\n ]}\n ]);\n const record = new MarcRecord({\n leader: 'bacgfe',\n fields: [\n {\n tag: 'FOO',\n value: 'foobarfoobar'\n },\n {\n tag: 'BAR',\n value: 'bauuoo'\n }\n ]\n });\n const result = await validator.validate(record);\n\n assert.equal(typeof result, 'object');\n assert.partialDeepStrictEqual(result, {valid: true});\n });\n\n it('Finds the record invalid', async () => {\n const validator = await validatorFactory([\n {leader: true, length: 6, rules: [{position: [0, 6], pattern: /[abcdefg]/u}]},\n {tag: /^FOO$/u, length: 12, rules: [{position: 0, pattern: /f/u}]},\n {tag: /^BAR$/u, length: 6, rules: [\n {position: 0, pattern: /[fb]/u},\n {position: 1, pattern: /a/u, dependencies: [{position: 0, pattern: /b/u}]},\n {position: [2, 3], pattern: /u/u, dependencies: [{position: 0, pattern: /[^a]/u}]}\n ]},\n {tag: /^FUB$/u, length: 5}\n ]);\n const record = new MarcRecord({\n leader: 'bacxfe',\n fields: [\n {\n tag: 'FOO',\n value: 'barfoofoobar'\n },\n {\n tag: 'BAR',\n value: 'burfoo'\n },\n {\n tag: 'FUB',\n value: 'foo'\n }\n ]\n });\n\n const result = await validator.validate(record);\n\n assert.deepEqual(result, {valid: false, messages: [\n 'Leader has invalid values at positions: 3 (Rule index 0)',\n 'Field FOO has invalid values at positions: 0 (Rule index 0)',\n 'Field BAR has invalid values at positions: 1 (Rule index 1)',\n 'Field BAR has invalid values at positions: 2,3 (Rule index 2)',\n 'Field FUB has invalid length'\n ]});\n });\n });\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import assert from 'node:assert';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './fixed-fields.js';\nimport {describe, it} from 'node:test';\n\n\ndescribe('fixed-fields: language', () => {\n it('Creates a validator', async () => {\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\n it('Throws an error when configuration is not provided', () => {\n try {\n validatorFactory();\n } catch (error) {\n assert.equal(error instanceof Error, true);\n assert.equal(error.message, 'No configuration provided');\n }\n });\n\n describe('#validate', () => {\n it('Finds the record valid', async () => {\n const validator = await validatorFactory([\n {leader: true, length: 6, rules: [{position: [0, 6], pattern: /[abcdefg]/u}]},\n {tag: /^FOO$/u, length: 12, rules: [{position: 0, pattern: /f/u}]},\n {\n tag: /^BAR$/u, length: 6, rules: [\n {position: 0, pattern: /[fb]/u},\n {position: 1, pattern: /a/u, dependencies: [{position: 0, pattern: /b/u}]},\n {position: [2, 3], pattern: /u/u, dependencies: [{position: 0, pattern: /[^b]/u}]}\n ]\n }\n ]);\n const record = new MarcRecord({\n leader: 'bacgfe',\n fields: [\n {\n tag: 'FOO',\n value: 'foobarfoobar'\n },\n {\n tag: 'BAR',\n value: 'bauuoo'\n }\n ]\n });\n const result = await validator.validate(record);\n\n assert.equal(typeof result, 'object');\n assert.partialDeepStrictEqual(result, {valid: true});\n });\n\n it('Finds the record invalid', async () => {\n const validator = await validatorFactory([\n {leader: true, length: 6, rules: [{position: [0, 6], pattern: /[abcdefg]/u}]},\n {tag: /^FOO$/u, length: 12, rules: [{position: 0, pattern: /f/u}]},\n {\n tag: /^BAR$/u, length: 6, rules: [\n {position: 0, pattern: /[fb]/u},\n {position: 1, pattern: /a/u, dependencies: [{position: 0, pattern: /b/u}]},\n {position: [2, 3], pattern: /u/u, dependencies: [{position: 0, pattern: /[^a]/u}]}\n ]\n },\n {tag: /^FUB$/u, length: 5}\n ]);\n const record = new MarcRecord({\n leader: 'bacxfe',\n fields: [\n {\n tag: 'FOO',\n value: 'barfoofoobar'\n },\n {\n tag: 'BAR',\n value: 'burfoo'\n },\n {\n tag: 'FUB',\n value: 'foo'\n }\n ]\n });\n\n const result = await validator.validate(record);\n\n assert.deepEqual(result, {\n valid: false, messages: [\n 'Leader has invalid values at positions: 3 (Rule index 0)',\n 'Field FOO has invalid values at positions: 0 (Rule index 0)',\n 'Field BAR has invalid values at positions: 1 (Rule index 1)',\n 'Field BAR has invalid values at positions: 2,3 (Rule index 2)',\n 'Field FUB has invalid length'\n ]\n });\n });\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,6 +1,6 @@
1
1
  import assert from "node:assert";
2
2
  import { MarcRecord } from "@natlibfi/marc-record";
3
- import validatorFactory from "../src/identical-fields.js";
3
+ import validatorFactory from "./identical-fields.js";
4
4
  import { describe, it } from "node:test";
5
5
  describe("identical-fields", () => {
6
6
  it("Creates a validator", async () => {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/identical-fields.test.js"],
4
- "sourcesContent": ["import assert from 'node:assert';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/identical-fields.js';\nimport {describe, it} from 'node:test';\n\ndescribe('identical-fields', () => {\n it('Creates a validator', async () => {\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\n describe('#validate', () => {\n it('Finds the record valid', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '700',\n subfields: [\n {\n code: 'e',\n value: 'foo'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n assert.deepEqual(result, {valid: true, messages: []});\n });\n it('Finds the record invalid', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n\n fields: [\n {\n tag: '700',\n subfields: [\n {\n code: 'e',\n value: 'foo'\n }\n ]\n },\n {\n tag: '800',\n subfields: [\n {\n code: 'e',\n value: 'foo'\n }\n ]\n },\n {\n tag: '800',\n subfields: [\n {\n code: 'e',\n value: 'foo'\n }\n ]\n },\n {\n tag: '700',\n subfields: [\n {\n code: 'e',\n value: 'foo'\n }\n ]\n }\n ]\n });\n\n const result = await validator.validate(record);\n\n assert.deepEqual(result, {valid: false, messages: ['Field 800 has duplicates', 'Field 700 has duplicates']});\n });\n });\n\n describe('#fix', () => {\n it('Fixes the record', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '700',\n subfields: [\n {\n code: 'e',\n value: 'dest'\n }\n ]\n },\n {\n tag: '700',\n subfields: [\n {\n code: 'e',\n value: 'dest'\n }\n ]\n }\n ]\n });\n await validator.fix(record);\n\n assert.deepEqual(record.fields, [\n {\n tag: '700',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'e',\n value: 'dest'\n }\n ]\n }\n ]);\n });\n });\n});\n"],
4
+ "sourcesContent": ["import assert from 'node:assert';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './identical-fields.js';\nimport {describe, it} from 'node:test';\n\ndescribe('identical-fields', () => {\n it('Creates a validator', async () => {\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\n describe('#validate', () => {\n it('Finds the record valid', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '700',\n subfields: [\n {\n code: 'e',\n value: 'foo'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n assert.deepEqual(result, {valid: true, messages: []});\n });\n it('Finds the record invalid', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n\n fields: [\n {\n tag: '700',\n subfields: [\n {\n code: 'e',\n value: 'foo'\n }\n ]\n },\n {\n tag: '800',\n subfields: [\n {\n code: 'e',\n value: 'foo'\n }\n ]\n },\n {\n tag: '800',\n subfields: [\n {\n code: 'e',\n value: 'foo'\n }\n ]\n },\n {\n tag: '700',\n subfields: [\n {\n code: 'e',\n value: 'foo'\n }\n ]\n }\n ]\n });\n\n const result = await validator.validate(record);\n\n assert.deepEqual(result, {valid: false, messages: ['Field 800 has duplicates', 'Field 700 has duplicates']});\n });\n });\n\n describe('#fix', () => {\n it('Fixes the record', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '700',\n subfields: [\n {\n code: 'e',\n value: 'dest'\n }\n ]\n },\n {\n tag: '700',\n subfields: [\n {\n code: 'e',\n value: 'dest'\n }\n ]\n }\n ]\n });\n await validator.fix(record);\n\n assert.deepEqual(record.fields, [\n {\n tag: '700',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'e',\n value: 'dest'\n }\n ]\n }\n ]);\n });\n });\n});\n"],
5
5
  "mappings": "AAAA,OAAO,YAAY;AACnB,SAAQ,kBAAiB;AACzB,OAAO,sBAAsB;AAC7B,SAAQ,UAAU,UAAS;AAE3B,SAAS,oBAAoB,MAAM;AACjC,KAAG,uBAAuB,YAAY;AACpC,UAAM,YAAY,MAAM,iBAAiB;AAEzC,WAAO,MAAM,OAAO,WAAW,QAAQ;AACvC,WAAO,MAAM,OAAO,UAAU,aAAa,QAAQ;AACnD,WAAO,MAAM,OAAO,UAAU,UAAU,UAAU;AAAA,EACpD,CAAC;AAED,WAAS,aAAa,MAAM;AAC1B,OAAG,0BAA0B,YAAY;AACvC,YAAM,YAAY,MAAM,iBAAiB;AACzC,YAAM,SAAS,IAAI,WAAW;AAAA,QAC5B,QAAQ;AAAA,UACN;AAAA,YACE,KAAK;AAAA,YACL,WAAW;AAAA,cACT;AAAA,gBACE,MAAM;AAAA,gBACN,OAAO;AAAA,cACT;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AACD,YAAM,SAAS,MAAM,UAAU,SAAS,MAAM;AAE9C,aAAO,UAAU,QAAQ,EAAC,OAAO,MAAM,UAAU,CAAC,EAAC,CAAC;AAAA,IACtD,CAAC;AACD,OAAG,4BAA4B,YAAY;AACzC,YAAM,YAAY,MAAM,iBAAiB;AACzC,YAAM,SAAS,IAAI,WAAW;AAAA,QAE5B,QAAQ;AAAA,UACN;AAAA,YACE,KAAK;AAAA,YACL,WAAW;AAAA,cACT;AAAA,gBACE,MAAM;AAAA,gBACN,OAAO;AAAA,cACT;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,KAAK;AAAA,YACL,WAAW;AAAA,cACT;AAAA,gBACE,MAAM;AAAA,gBACN,OAAO;AAAA,cACT;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,KAAK;AAAA,YACL,WAAW;AAAA,cACT;AAAA,gBACE,MAAM;AAAA,gBACN,OAAO;AAAA,cACT;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,KAAK;AAAA,YACL,WAAW;AAAA,cACT;AAAA,gBACE,MAAM;AAAA,gBACN,OAAO;AAAA,cACT;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AAED,YAAM,SAAS,MAAM,UAAU,SAAS,MAAM;AAE9C,aAAO,UAAU,QAAQ,EAAC,OAAO,OAAO,UAAU,CAAC,4BAA4B,0BAA0B,EAAC,CAAC;AAAA,IAC7G,CAAC;AAAA,EACH,CAAC;AAED,WAAS,QAAQ,MAAM;AACrB,OAAG,oBAAoB,YAAY;AACjC,YAAM,YAAY,MAAM,iBAAiB;AACzC,YAAM,SAAS,IAAI,WAAW;AAAA,QAC5B,QAAQ;AAAA,UACN;AAAA,YACE,KAAK;AAAA,YACL,WAAW;AAAA,cACT;AAAA,gBACE,MAAM;AAAA,gBACN,OAAO;AAAA,cACT;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,KAAK;AAAA,YACL,WAAW;AAAA,cACT;AAAA,gBACE,MAAM;AAAA,gBACN,OAAO;AAAA,cACT;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AACD,YAAM,UAAU,IAAI,MAAM;AAE1B,aAAO,UAAU,OAAO,QAAQ;AAAA,QAC9B;AAAA,UACE,KAAK;AAAA,UACL,MAAM;AAAA,UACN,MAAM;AAAA,UACN,WAAW;AAAA,YACT;AAAA,cACE,MAAM;AAAA,cACN,OAAO;AAAA,YACT;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AACH,CAAC;",
6
6
  "names": []
7
7
  }
package/dist/index.js CHANGED
@@ -21,6 +21,7 @@ import Fix33X from "./fix-33X.js";
21
21
  import FixCountryCodes from "./fix-country-codes.js";
22
22
  import FixLanguageCodes from "./fix-language-codes.js";
23
23
  import FixRelatorTerms from "./fixRelatorTerms.js";
24
+ import FixSami041 from "./fix-sami-041.js";
24
25
  import FixedFields from "./fixed-fields.js";
25
26
  import IdenticalFields from "./identical-fields.js";
26
27
  import IndicatorFixes from "./indicator-fixes.js";
@@ -39,6 +40,7 @@ import NormalizeUTF8Diacritics from "./normalize-utf8-diacritics.js";
39
40
  import Punctuation from "./punctuation/index.js";
40
41
  import Punctuation2 from "./punctuation2.js";
41
42
  import ReindexSubfield6OccurenceNumbers from "./reindexSubfield6OccurenceNumbers.js";
43
+ import Remove041zxx from "./remove-041-zxx.js";
42
44
  import RemoveDuplicateDataFields from "./removeDuplicateDataFields.js";
43
45
  import RemoveInferiorDataFields from "./removeInferiorDataFields.js";
44
46
  import ResolvableExtReferences from "./resolvable-ext-references-melinda.js";
@@ -51,6 +53,7 @@ import SortTags from "./sort-tags.js";
51
53
  import SubfieldValueNormalizations from "./subfieldValueNormalizations.js";
52
54
  import SubfieldExclusion from "./subfield-exclusion.js";
53
55
  import Sync007And300 from "./sync-007-and-300.js";
56
+ import SyncLanguage from "./sync-language.js";
54
57
  import TranslateTerms from "./translate-terms.js";
55
58
  import TypeOfDateF008 from "./typeOfDate-008.js";
56
59
  import UnicodeDecomposition from "./unicode-decomposition.js";
@@ -108,6 +111,7 @@ export {
108
111
  FixCountryCodes,
109
112
  FixLanguageCodes,
110
113
  FixRelatorTerms,
114
+ FixSami041,
111
115
  FixedFields,
112
116
  IdenticalFields,
113
117
  IndicatorFixes,
@@ -126,6 +130,7 @@ export {
126
130
  Punctuation2,
127
131
  ResolveOrphanedSubfield6s,
128
132
  ReindexSubfield6OccurenceNumbers,
133
+ Remove041zxx,
129
134
  RemoveDuplicateDataFields,
130
135
  RemoveInferiorDataFields,
131
136
  ResolvableExtReferences,
@@ -136,8 +141,9 @@ export {
136
141
  SubfieldExclusion,
137
142
  SubfieldValueNormalizations,
138
143
  Sync007And300,
139
- TypeOfDateF008,
144
+ SyncLanguage,
140
145
  TranslateTerms,
146
+ TypeOfDateF008,
141
147
  UnicodeDecomposition,
142
148
  UpdateField540,
143
149
  Urn,
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.js"],
4
- "sourcesContent": ["import AccessRights from './access-rights.js';\nimport AddMissingField041 from './addMissingField041.js';\nimport AddMissingField336 from './addMissingField336.js';\nimport AddMissingField337 from './addMissingField337.js';\nimport AddMissingField338 from './addMissingField338.js';\nimport Cyrillux from './cyrillux.js';\nimport CyrilluxUsemarconReplacement from './cyrillux-usemarcon-replacement.js';\nimport DisambiguateSeriesStatements from './disambiguateSeriesStatements.js';\nimport DoubleCommas from './double-commas.js';\nimport DuplicatesInd1 from './duplicates-ind1.js';\nimport EmptyFields from './empty-fields.js';\nimport EndingPunctuation from './ending-punctuation.js';\nimport EndingWhitespace from './ending-whitespace.js';\nimport Field008CharacterGroups from './field-008-18-34-character-groups.js';\nimport Field505Separators from './field-505-separators.js';\nimport Field521Fix from './field-521-fix.js';\nimport FieldExclusion from './field-exclusion.js';\nimport FieldStructure from './field-structure.js';\nimport FieldsPresent from './fields-present.js';\nimport Fix33X from './fix-33X.js';\nimport FixCountryCodes from './fix-country-codes.js';\nimport FixLanguageCodes from './fix-language-codes.js';\nimport FixRelatorTerms from './fixRelatorTerms.js';\nimport FixedFields from './fixed-fields.js';\nimport IdenticalFields from './identical-fields.js';\nimport IndicatorFixes from './indicator-fixes.js';\nimport IsbnIssn from './isbn-issn.js';\nimport ItemLanguage from './item-language.js';\nimport MergeField500Lisapainokset from './mergeField500Lisapainokset.js';\nimport MergeFields from './merge-fields/index.js';\nimport MergeRelatorTermFields from './mergeRelatorTermFields.js';\nimport Modernize502 from './modernize-502.js';\nimport MultipleSubfield0s from './multiple-subfield-0.js';\nimport NonBreakingSpace from './non-breaking-space.js';\nimport NormalizeDashes from './normalize-dashes.js';\nimport NormalizeIdentifiers from './normalize-identifiers.js';\nimport NormalizeQualifyingInformation from './normalize-qualifying-information.js';\nimport NormalizeUTF8Diacritics from './normalize-utf8-diacritics.js';\nimport Punctuation from './punctuation/index.js';\nimport Punctuation2 from './punctuation2.js';\nimport ReindexSubfield6OccurenceNumbers from './reindexSubfield6OccurenceNumbers.js';\nimport RemoveDuplicateDataFields from './removeDuplicateDataFields.js';\nimport RemoveInferiorDataFields from './removeInferiorDataFields.js';\nimport ResolvableExtReferences from './resolvable-ext-references-melinda.js';\nimport ResolveOrphanedSubfield6s from './resolveOrphanedSubfield6s.js';\nimport SanitizeVocabularySourceCodes from './sanitize-vocabulary-source-codes.js';\nimport SortFields from './sortFields.js';\nimport SortRelatorTerms from './sortRelatorTerms.js';\nimport SortSubfields from './sortSubfields.js';\nimport SortTags from './sort-tags.js';\n// import StripPunctuation from './stripPunctuation'; // Can we add this here? Should be used very cautiosly!\nimport SubfieldValueNormalizations from './subfieldValueNormalizations.js';\nimport SubfieldExclusion from './subfield-exclusion.js';\nimport Sync007And300 from './sync-007-and-300.js';\nimport TranslateTerms from './translate-terms.js';\nimport TypeOfDateF008 from './typeOfDate-008.js';\nimport UnicodeDecomposition from './unicode-decomposition.js';\nimport UpdateField540 from './update-field-540.js';\nimport Urn from './urn.js';\n\nimport {getCounterpart} from './merge-fields/counterpartField.js';\n\nimport {postprocessRecords} from './merge-fields/mergeOrAddPostprocess.js';\nimport {mergeField} from './merge-fields/mergeField.js';\nimport {fieldGetOccurrenceNumberPairs, fieldGetUnambiguousOccurrenceNumber, fieldToNormalizedString, fieldsToNormalizedString, get6s,\n isValidSubfield6, recordGetMaxSubfield6OccurrenceNumberAsInteger,\n intToOccurrenceNumberString, resetSubfield6Tag, subfield6ResetOccurrenceNumber, subfield6GetOccurrenceNumber,\n subfield6GetOccurrenceNumberAsInteger} from './subfield6Utils.js';\n\nimport {getSubfield8LinkingNumber, isValidSubfield8, recordGetAllSubfield8LinkingNumbers, recordGetFieldsWithSubfield8LinkingNumber} from './subfield8Utils.js';\n\nimport {recordFixRelatorTerms} from './fixRelatorTerms.js';\nimport {fieldTrimSubfieldValues} from './normalizeFieldForComparison.js';\nimport {baseHasEqualOrHigherEncodingLevel, deleteAllPrepublicationNotesFromField500InNonPubRecord, encodingLevelIsBetterThanPrepublication, getEncodingLevel, isEnnakkotietoField, isEnnakkotietoSubfield} from './prepublicationUtils.js';\nimport {melindaFieldSpecs} from '@natlibfi/marc-record-validators-melinda/dist/melindaCustomMergeFields.js';\n\nimport {cloneAndRemovePunctuation} from './normalizeFieldForComparison.js';\nimport {removeWorsePrepubField500s, removeWorsePrepubField594s} from './prepublicationUtils.js';\nimport {fieldFixPunctuation} from './punctuation2.js';\nimport {recordResetSubfield6OccurrenceNumbers} from './reindexSubfield6OccurenceNumbers.js';\nimport {sortAdjacentSubfields} from './sortSubfields.js';\nimport {fieldsToString} from './utils.js';\n\nexport {\n AccessRights,\n AddMissingField041,\n AddMissingField336,\n AddMissingField337,\n AddMissingField338,\n Cyrillux,\n CyrilluxUsemarconReplacement,\n DisambiguateSeriesStatements,\n DoubleCommas,\n DuplicatesInd1,\n EmptyFields,\n EndingPunctuation,\n EndingWhitespace,\n Field008CharacterGroups,\n Field505Separators,\n Field521Fix,\n FieldExclusion,\n FieldsPresent,\n FieldStructure,\n Fix33X,\n FixCountryCodes,\n FixLanguageCodes,\n FixRelatorTerms,\n FixedFields,\n IdenticalFields,\n IndicatorFixes,\n IsbnIssn,\n ItemLanguage,\n MergeField500Lisapainokset,\n MergeRelatorTermFields,\n Modernize502, //\n MultipleSubfield0s,\n NonBreakingSpace,\n NormalizeDashes,\n NormalizeIdentifiers,\n NormalizeQualifyingInformation,\n NormalizeUTF8Diacritics,\n Punctuation,\n Punctuation2,\n ResolveOrphanedSubfield6s, // Do this before reindexing! (thus I'm not sticking with alphabetical order here)\n ReindexSubfield6OccurenceNumbers,\n RemoveDuplicateDataFields,\n RemoveInferiorDataFields,\n ResolvableExtReferences,\n SanitizeVocabularySourceCodes,\n SortRelatorTerms,\n SortSubfields,\n SortTags,\n SubfieldExclusion,\n SubfieldValueNormalizations,\n Sync007And300,\n TypeOfDateF008,\n TranslateTerms,\n UnicodeDecomposition,\n UpdateField540,\n Urn,\n SortFields, // Keep this penultimate\n MergeFields, // Run this last *iff* you want to use this at all\n\n // Functions for processing record... These should probably go to some other project.\n // Too specific for marc-record-js though...\n // 1. generic low level stuff\n getEncodingLevel,\n\n // 2. text normalizations (eg. for similarity comparisons, field merge)\n cloneAndRemovePunctuation,\n fieldFixPunctuation,\n fieldToNormalizedString,\n fieldTrimSubfieldValues,\n fieldsToNormalizedString,\n fieldsToString,\n recordFixRelatorTerms,\n sortAdjacentSubfields,\n\n // 3. prepublication stuff\n baseHasEqualOrHigherEncodingLevel,\n deleteAllPrepublicationNotesFromField500InNonPubRecord,\n encodingLevelIsBetterThanPrepublication,\n isEnnakkotietoField,\n isEnnakkotietoSubfield,\n removeWorsePrepubField500s,\n removeWorsePrepubField594s,\n\n // 4. subfield $6 related functions\n fieldGetOccurrenceNumberPairs,\n get6s,\n fieldGetUnambiguousOccurrenceNumber,\n intToOccurrenceNumberString,\n isValidSubfield6,\n recordGetMaxSubfield6OccurrenceNumberAsInteger,\n recordResetSubfield6OccurrenceNumbers,\n resetSubfield6Tag,\n subfield6ResetOccurrenceNumber,\n subfield6GetOccurrenceNumber,\n subfield6GetOccurrenceNumberAsInteger,\n\n // 5. subfield $8 related functions\n getSubfield8LinkingNumber,\n isValidSubfield8,\n recordGetAllSubfield8LinkingNumbers,\n recordGetFieldsWithSubfield8LinkingNumber,\n\n // 6. merge, other\n getCounterpart, // field merge: finds a similar field with which a field can merge\n melindaFieldSpecs, // contains information about the legal fields and subfields, and their repeatability\n mergeField,\n postprocessRecords // clean-up function that cleans up both base and source record (which may be the same)\n\n};\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import AccessRights from './access-rights.js';\nimport AddMissingField041 from './addMissingField041.js';\nimport AddMissingField336 from './addMissingField336.js';\nimport AddMissingField337 from './addMissingField337.js';\nimport AddMissingField338 from './addMissingField338.js';\nimport Cyrillux from './cyrillux.js';\nimport CyrilluxUsemarconReplacement from './cyrillux-usemarcon-replacement.js';\nimport DisambiguateSeriesStatements from './disambiguateSeriesStatements.js';\nimport DoubleCommas from './double-commas.js';\nimport DuplicatesInd1 from './duplicates-ind1.js';\nimport EmptyFields from './empty-fields.js';\nimport EndingPunctuation from './ending-punctuation.js';\nimport EndingWhitespace from './ending-whitespace.js';\nimport Field008CharacterGroups from './field-008-18-34-character-groups.js';\nimport Field505Separators from './field-505-separators.js';\nimport Field521Fix from './field-521-fix.js';\nimport FieldExclusion from './field-exclusion.js';\nimport FieldStructure from './field-structure.js';\nimport FieldsPresent from './fields-present.js';\nimport Fix33X from './fix-33X.js';\nimport FixCountryCodes from './fix-country-codes.js';\nimport FixLanguageCodes from './fix-language-codes.js';\nimport FixRelatorTerms from './fixRelatorTerms.js';\nimport FixSami041 from './fix-sami-041.js';\nimport FixedFields from './fixed-fields.js';\nimport IdenticalFields from './identical-fields.js';\nimport IndicatorFixes from './indicator-fixes.js';\nimport IsbnIssn from './isbn-issn.js';\nimport ItemLanguage from './item-language.js';\nimport MergeField500Lisapainokset from './mergeField500Lisapainokset.js';\nimport MergeFields from './merge-fields/index.js';\nimport MergeRelatorTermFields from './mergeRelatorTermFields.js';\nimport Modernize502 from './modernize-502.js';\nimport MultipleSubfield0s from './multiple-subfield-0.js';\nimport NonBreakingSpace from './non-breaking-space.js';\nimport NormalizeDashes from './normalize-dashes.js';\nimport NormalizeIdentifiers from './normalize-identifiers.js';\nimport NormalizeQualifyingInformation from './normalize-qualifying-information.js';\nimport NormalizeUTF8Diacritics from './normalize-utf8-diacritics.js';\nimport Punctuation from './punctuation/index.js';\nimport Punctuation2 from './punctuation2.js';\nimport ReindexSubfield6OccurenceNumbers from './reindexSubfield6OccurenceNumbers.js';\nimport Remove041zxx from './remove-041-zxx.js';\nimport RemoveDuplicateDataFields from './removeDuplicateDataFields.js';\nimport RemoveInferiorDataFields from './removeInferiorDataFields.js';\nimport ResolvableExtReferences from './resolvable-ext-references-melinda.js';\nimport ResolveOrphanedSubfield6s from './resolveOrphanedSubfield6s.js';\nimport SanitizeVocabularySourceCodes from './sanitize-vocabulary-source-codes.js';\nimport SortFields from './sortFields.js';\nimport SortRelatorTerms from './sortRelatorTerms.js';\nimport SortSubfields from './sortSubfields.js';\nimport SortTags from './sort-tags.js';\n// import StripPunctuation from './stripPunctuation'; // Can we add this here? Should be used very cautiosly!\nimport SubfieldValueNormalizations from './subfieldValueNormalizations.js';\nimport SubfieldExclusion from './subfield-exclusion.js';\nimport Sync007And300 from './sync-007-and-300.js';\nimport SyncLanguage from './sync-language.js';\nimport TranslateTerms from './translate-terms.js';\nimport TypeOfDateF008 from './typeOfDate-008.js';\nimport UnicodeDecomposition from './unicode-decomposition.js';\nimport UpdateField540 from './update-field-540.js';\nimport Urn from './urn.js';\n\nimport {getCounterpart} from './merge-fields/counterpartField.js';\n\nimport {postprocessRecords} from './merge-fields/mergeOrAddPostprocess.js';\nimport {mergeField} from './merge-fields/mergeField.js';\nimport {fieldGetOccurrenceNumberPairs, fieldGetUnambiguousOccurrenceNumber, fieldToNormalizedString, fieldsToNormalizedString, get6s,\n isValidSubfield6, recordGetMaxSubfield6OccurrenceNumberAsInteger,\n intToOccurrenceNumberString, resetSubfield6Tag, subfield6ResetOccurrenceNumber, subfield6GetOccurrenceNumber,\n subfield6GetOccurrenceNumberAsInteger} from './subfield6Utils.js';\n\nimport {getSubfield8LinkingNumber, isValidSubfield8, recordGetAllSubfield8LinkingNumbers, recordGetFieldsWithSubfield8LinkingNumber} from './subfield8Utils.js';\n\nimport {recordFixRelatorTerms} from './fixRelatorTerms.js';\nimport {fieldTrimSubfieldValues} from './normalizeFieldForComparison.js';\nimport {baseHasEqualOrHigherEncodingLevel, deleteAllPrepublicationNotesFromField500InNonPubRecord, encodingLevelIsBetterThanPrepublication, getEncodingLevel, isEnnakkotietoField, isEnnakkotietoSubfield} from './prepublicationUtils.js';\nimport {melindaFieldSpecs} from '@natlibfi/marc-record-validators-melinda/dist/melindaCustomMergeFields.js';\n\nimport {cloneAndRemovePunctuation} from './normalizeFieldForComparison.js';\nimport {removeWorsePrepubField500s, removeWorsePrepubField594s} from './prepublicationUtils.js';\nimport {fieldFixPunctuation} from './punctuation2.js';\nimport {recordResetSubfield6OccurrenceNumbers} from './reindexSubfield6OccurenceNumbers.js';\nimport {sortAdjacentSubfields} from './sortSubfields.js';\nimport {fieldsToString} from './utils.js';\n\nexport {\n AccessRights,\n AddMissingField041,\n AddMissingField336,\n AddMissingField337,\n AddMissingField338,\n Cyrillux,\n CyrilluxUsemarconReplacement,\n DisambiguateSeriesStatements,\n DoubleCommas,\n DuplicatesInd1,\n EmptyFields,\n EndingPunctuation,\n EndingWhitespace,\n Field008CharacterGroups,\n Field505Separators,\n Field521Fix,\n FieldExclusion,\n FieldsPresent,\n FieldStructure,\n Fix33X,\n FixCountryCodes,\n FixLanguageCodes,\n FixRelatorTerms,\n FixSami041,\n FixedFields,\n IdenticalFields,\n IndicatorFixes,\n IsbnIssn,\n ItemLanguage,\n\n MergeField500Lisapainokset,\n MergeRelatorTermFields,\n Modernize502, //\n MultipleSubfield0s,\n NonBreakingSpace,\n NormalizeDashes,\n NormalizeIdentifiers,\n NormalizeQualifyingInformation,\n NormalizeUTF8Diacritics,\n Punctuation,\n Punctuation2,\n ResolveOrphanedSubfield6s, // Do this before reindexing! (thus I'm not sticking with alphabetical order here)\n ReindexSubfield6OccurenceNumbers,\n Remove041zxx,\n RemoveDuplicateDataFields,\n RemoveInferiorDataFields,\n ResolvableExtReferences,\n SanitizeVocabularySourceCodes,\n SortRelatorTerms,\n SortSubfields,\n SortTags,\n SubfieldExclusion,\n SubfieldValueNormalizations,\n Sync007And300,\n SyncLanguage,\n TranslateTerms,\n TypeOfDateF008,\n UnicodeDecomposition,\n UpdateField540,\n Urn,\n SortFields, // Keep this penultimate\n MergeFields, // Run this last *iff* you want to use this at all\n\n // Functions for processing record... These should probably go to some other project.\n // Too specific for marc-record-js though...\n // 1. generic low level stuff\n getEncodingLevel,\n\n // 2. text normalizations (eg. for similarity comparisons, field merge)\n cloneAndRemovePunctuation,\n fieldFixPunctuation,\n fieldToNormalizedString,\n fieldTrimSubfieldValues,\n fieldsToNormalizedString,\n fieldsToString,\n recordFixRelatorTerms,\n sortAdjacentSubfields,\n\n // 3. prepublication stuff\n baseHasEqualOrHigherEncodingLevel,\n deleteAllPrepublicationNotesFromField500InNonPubRecord,\n encodingLevelIsBetterThanPrepublication,\n isEnnakkotietoField,\n isEnnakkotietoSubfield,\n removeWorsePrepubField500s,\n removeWorsePrepubField594s,\n\n // 4. subfield $6 related functions\n fieldGetOccurrenceNumberPairs,\n get6s,\n fieldGetUnambiguousOccurrenceNumber,\n intToOccurrenceNumberString,\n isValidSubfield6,\n recordGetMaxSubfield6OccurrenceNumberAsInteger,\n recordResetSubfield6OccurrenceNumbers,\n resetSubfield6Tag,\n subfield6ResetOccurrenceNumber,\n subfield6GetOccurrenceNumber,\n subfield6GetOccurrenceNumberAsInteger,\n\n // 5. subfield $8 related functions\n getSubfield8LinkingNumber,\n isValidSubfield8,\n recordGetAllSubfield8LinkingNumbers,\n recordGetFieldsWithSubfield8LinkingNumber,\n\n // 6. merge, other\n getCounterpart, // field merge: finds a similar field with which a field can merge\n melindaFieldSpecs, // contains information about the legal fields and subfields, and their repeatability\n mergeField,\n postprocessRecords // clean-up function that cleans up both base and source record (which may be the same)\n\n};\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -174,12 +174,22 @@ function getLanguages(record) {
174
174
  return true;
175
175
  }
176
176
  }
177
+ function translated041Indicator1(field) {
178
+ if (field.tag !== "041" || !field.subfields) {
179
+ return;
180
+ }
181
+ if (field.ind1 !== "1" && field.subfields.some((sf) => ["h", "k", "m", "n"].includes(sf.code))) {
182
+ field.ind1 = "1";
183
+ return;
184
+ }
185
+ }
177
186
  function recordNormalizeIndicators(record) {
178
187
  recordNormalize490(record);
179
188
  const languages = getLanguages(record);
180
189
  record.fields.forEach((field) => fieldNormalizeIndicators(field, record, languages));
181
190
  }
182
191
  function fieldNormalizeIndicators(field, record, languages) {
192
+ translated041Indicator1(field);
183
193
  normalize084Indicator1(field);
184
194
  normalize245Indicator1(field, record);
185
195
  noDisplayConstantGenerated520Indicator1(field);