@natlibfi/marc-record-validators-melinda 11.2.1 → 11.2.2-alpha.2

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 (229) hide show
  1. package/dist/access-rights.spec.js +1 -1
  2. package/dist/access-rights.spec.js.map +1 -1
  3. package/dist/addMissingField041.js.map +1 -1
  4. package/dist/addMissingField041.spec.js +1 -1
  5. package/dist/addMissingField041.spec.js.map +1 -1
  6. package/dist/addMissingField336.js.map +1 -1
  7. package/dist/addMissingField336.spec.js +1 -1
  8. package/dist/addMissingField336.spec.js.map +1 -1
  9. package/dist/addMissingField337.js.map +1 -1
  10. package/dist/addMissingField337.spec.js +1 -1
  11. package/dist/addMissingField337.spec.js.map +1 -1
  12. package/dist/addMissingField338.js.map +1 -1
  13. package/dist/addMissingField338.spec.js +1 -1
  14. package/dist/addMissingField338.spec.js.map +1 -1
  15. package/dist/cyrillux-usemarcon-replacement.js +82 -22
  16. package/dist/cyrillux-usemarcon-replacement.js.map +1 -1
  17. package/dist/cyrillux-usemarcon-replacement.spec.js +1 -1
  18. package/dist/cyrillux-usemarcon-replacement.spec.js.map +1 -1
  19. package/dist/double-commas.spec.js +1 -1
  20. package/dist/double-commas.spec.js.map +1 -1
  21. package/dist/duplicates-ind1.js.map +1 -1
  22. package/dist/duplicates-ind1.spec.js +1 -1
  23. package/dist/duplicates-ind1.spec.js.map +1 -1
  24. package/dist/empty-fields.js.map +1 -1
  25. package/dist/empty-fields.spec.js +1 -1
  26. package/dist/empty-fields.spec.js.map +1 -1
  27. package/dist/ending-punctuation.js +1 -1
  28. package/dist/ending-punctuation.js.map +1 -1
  29. package/dist/ending-punctuation.spec.js +1 -1
  30. package/dist/ending-punctuation.spec.js.map +1 -1
  31. package/dist/ending-whitespace.js.map +1 -1
  32. package/dist/ending-whitespace.spec.js +1 -1
  33. package/dist/ending-whitespace.spec.js.map +1 -1
  34. package/dist/field-008-18-34-character-groups.js +1 -1
  35. package/dist/field-008-18-34-character-groups.js.map +1 -1
  36. package/dist/field-008-18-34-character-groups.spec.js +1 -1
  37. package/dist/field-008-18-34-character-groups.spec.js.map +1 -1
  38. package/dist/field-505-separators.js +1 -1
  39. package/dist/field-505-separators.js.map +1 -1
  40. package/dist/field-505-separators.spec.js +1 -1
  41. package/dist/field-505-separators.spec.js.map +1 -1
  42. package/dist/field-521-fix.js +1 -1
  43. package/dist/field-521-fix.js.map +1 -1
  44. package/dist/field-521-fix.spec.js +1 -1
  45. package/dist/field-521-fix.spec.js.map +1 -1
  46. package/dist/field-exclusion.js.map +1 -1
  47. package/dist/field-exclusion.spec.js +1 -1
  48. package/dist/field-exclusion.spec.js.map +1 -1
  49. package/dist/field-structure.js.map +1 -1
  50. package/dist/field-structure.spec.js +1 -1
  51. package/dist/field-structure.spec.js.map +1 -1
  52. package/dist/fields-present.spec.js +1 -1
  53. package/dist/fields-present.spec.js.map +1 -1
  54. package/dist/fix-33X.js +1 -1
  55. package/dist/fix-33X.js.map +1 -1
  56. package/dist/fix-33X.spec.js +1 -1
  57. package/dist/fix-33X.spec.js.map +1 -1
  58. package/dist/fix-country-codes.js.map +1 -1
  59. package/dist/fix-country-codes.spec.js +1 -1
  60. package/dist/fix-country-codes.spec.js.map +1 -1
  61. package/dist/fix-language-codes.js +1 -1
  62. package/dist/fix-language-codes.js.map +1 -1
  63. package/dist/fix-language-codes.spec.js +1 -1
  64. package/dist/fix-language-codes.spec.js.map +1 -1
  65. package/dist/fixRelatorTerms.js +6 -3
  66. package/dist/fixRelatorTerms.js.map +1 -1
  67. package/dist/fixRelatorTerms.spec.js +1 -1
  68. package/dist/fixRelatorTerms.spec.js.map +1 -1
  69. package/dist/fixed-fields.js.map +1 -1
  70. package/dist/fixed-fields.spec.js +1 -1
  71. package/dist/fixed-fields.spec.js.map +1 -1
  72. package/dist/identical-fields.js.map +1 -1
  73. package/dist/identical-fields.spec.js +1 -1
  74. package/dist/identical-fields.spec.js.map +1 -1
  75. package/dist/index.js +66 -3
  76. package/dist/index.js.map +1 -1
  77. package/dist/indicator-fixes.js +17 -0
  78. package/dist/indicator-fixes.js.map +1 -1
  79. package/dist/indicator-fixes.spec.js +1 -1
  80. package/dist/indicator-fixes.spec.js.map +1 -1
  81. package/dist/isbn-issn.js +1 -1
  82. package/dist/isbn-issn.js.map +1 -1
  83. package/dist/isbn-issn.spec.js +1 -1
  84. package/dist/isbn-issn.spec.js.map +1 -1
  85. package/dist/item-language.js +1 -1
  86. package/dist/item-language.js.map +1 -1
  87. package/dist/item-language.spec.js +1 -1
  88. package/dist/item-language.spec.js.map +1 -1
  89. package/dist/mergeField500Lisapainokset.js.map +1 -1
  90. package/dist/mergeField500Lisapainokset.spec.js +1 -1
  91. package/dist/mergeField500Lisapainokset.spec.js.map +1 -1
  92. package/dist/mergeRelatorTermFields.js +1 -1
  93. package/dist/mergeRelatorTermFields.js.map +1 -1
  94. package/dist/mergeRelatorTermFields.spec.js +1 -1
  95. package/dist/mergeRelatorTermFields.spec.js.map +1 -1
  96. package/dist/multiple-subfield-0.js.map +1 -1
  97. package/dist/multiple-subfield-0.spec.js +1 -1
  98. package/dist/multiple-subfield-0.spec.js.map +1 -1
  99. package/dist/non-breaking-space.js.map +1 -1
  100. package/dist/non-breaking-space.spec.js +1 -1
  101. package/dist/non-breaking-space.spec.js.map +1 -1
  102. package/dist/normalize-dashes.js +1 -1
  103. package/dist/normalize-dashes.js.map +1 -1
  104. package/dist/normalize-dashes.spec.js +1 -1
  105. package/dist/normalize-dashes.spec.js.map +1 -1
  106. package/dist/normalize-identifiers.js +1 -1
  107. package/dist/normalize-identifiers.js.map +1 -1
  108. package/dist/normalize-identifiers.spec.js +1 -1
  109. package/dist/normalize-identifiers.spec.js.map +1 -1
  110. package/dist/normalize-qualifying-information.js +1 -1
  111. package/dist/normalize-qualifying-information.js.map +1 -1
  112. package/dist/normalize-qualifying-information.spec.js +1 -1
  113. package/dist/normalize-qualifying-information.spec.js.map +1 -1
  114. package/dist/normalize-utf8-diacritics.js +1 -1
  115. package/dist/normalize-utf8-diacritics.js.map +1 -1
  116. package/dist/normalize-utf8-diacritics.spec.js +1 -1
  117. package/dist/normalize-utf8-diacritics.spec.js.map +1 -1
  118. package/dist/normalizeFieldForComparison.js +1 -1
  119. package/dist/normalizeFieldForComparison.js.map +1 -1
  120. package/dist/normalizeSubfieldValueForComparison.js +1 -1
  121. package/dist/normalizeSubfieldValueForComparison.js.map +1 -1
  122. package/dist/prepublicationUtils.js +1 -1
  123. package/dist/prepublicationUtils.js.map +1 -1
  124. package/dist/punctuation/index.js +1 -1
  125. package/dist/punctuation/index.js.map +1 -1
  126. package/dist/punctuation/rules/index.js +1 -1
  127. package/dist/punctuation/rules/index.js.map +1 -1
  128. package/dist/punctuation.spec.js +1 -1
  129. package/dist/punctuation.spec.js.map +1 -1
  130. package/dist/punctuation2.js +1 -1
  131. package/dist/punctuation2.js.map +1 -1
  132. package/dist/punctuation2.spec.js +1 -1
  133. package/dist/punctuation2.spec.js.map +1 -1
  134. package/dist/reindexSubfield6OccurenceNumbers.js +1 -1
  135. package/dist/reindexSubfield6OccurenceNumbers.js.map +1 -1
  136. package/dist/reindexSubfield6OccurenceNumbers.spec.js +1 -1
  137. package/dist/reindexSubfield6OccurenceNumbers.spec.js.map +1 -1
  138. package/dist/removeDuplicateDataFields.js +1 -1
  139. package/dist/removeDuplicateDataFields.js.map +1 -1
  140. package/dist/removeDuplicateDataFields.spec.js +1 -1
  141. package/dist/removeDuplicateDataFields.spec.js.map +1 -1
  142. package/dist/removeInferiorDataFields.js +1 -1
  143. package/dist/removeInferiorDataFields.js.map +1 -1
  144. package/dist/removeInferiorDataFields.spec.js +1 -1
  145. package/dist/removeInferiorDataFields.spec.js.map +1 -1
  146. package/dist/resolvable-ext-references-melinda.js +1 -1
  147. package/dist/resolvable-ext-references-melinda.js.map +1 -1
  148. package/dist/resolvable-ext-references-melinda.spec.js +1 -1
  149. package/dist/resolvable-ext-references-melinda.spec.js.map +1 -1
  150. package/dist/resolveOrphanedSubfield6s.js +1 -1
  151. package/dist/resolveOrphanedSubfield6s.js.map +1 -1
  152. package/dist/resolveOrphanedSubfield6s.spec.js +1 -1
  153. package/dist/resolveOrphanedSubfield6s.spec.js.map +1 -1
  154. package/dist/sanitize-vocabulary-source-codes.js +5 -1
  155. package/dist/sanitize-vocabulary-source-codes.js.map +1 -1
  156. package/dist/sanitize-vocabulary-source-codes.spec.js +1 -1
  157. package/dist/sanitize-vocabulary-source-codes.spec.js.map +1 -1
  158. package/dist/sort-tags.spec.js +1 -1
  159. package/dist/sort-tags.spec.js.map +1 -1
  160. package/dist/sortFields.js +1 -1
  161. package/dist/sortFields.js.map +1 -1
  162. package/dist/sortFields.spec.js +1 -1
  163. package/dist/sortFields.spec.js.map +1 -1
  164. package/dist/sortRelatorTerms.js +1 -1
  165. package/dist/sortRelatorTerms.js.map +1 -1
  166. package/dist/sortRelatorTerms.spec.js +1 -1
  167. package/dist/sortRelatorTerms.spec.js.map +1 -1
  168. package/dist/sortSubfields.js +1 -1
  169. package/dist/sortSubfields.js.map +1 -1
  170. package/dist/sortSubfields.spec.js +1 -1
  171. package/dist/sortSubfields.spec.js.map +1 -1
  172. package/dist/stripPunctuation.js.map +1 -1
  173. package/dist/stripPunctuation.spec.js +1 -1
  174. package/dist/stripPunctuation.spec.js.map +1 -1
  175. package/dist/subfield-exclusion.js.map +1 -1
  176. package/dist/subfield-exclusion.spec.js +1 -1
  177. package/dist/subfield-exclusion.spec.js.map +1 -1
  178. package/dist/subfield6Utils.js.map +1 -1
  179. package/dist/subfield8Utils.js.map +1 -1
  180. package/dist/subfieldValueNormalizations.js +1 -1
  181. package/dist/subfieldValueNormalizations.js.map +1 -1
  182. package/dist/subfieldValueNormalizations.spec.js +1 -1
  183. package/dist/subfieldValueNormalizations.spec.js.map +1 -1
  184. package/dist/sync-007-and-300.js +1 -1
  185. package/dist/sync-007-and-300.js.map +1 -1
  186. package/dist/sync-007-and-300.spec.js +1 -1
  187. package/dist/sync-007-and-300.spec.js.map +1 -1
  188. package/dist/typeOfDate-008.js +1 -1
  189. package/dist/typeOfDate-008.js.map +1 -1
  190. package/dist/typeOfDate-008.spec.js +1 -1
  191. package/dist/typeOfDate-008.spec.js.map +1 -1
  192. package/dist/unicode-decomposition.js.map +1 -1
  193. package/dist/unicode-decomposition.spec.js +1 -1
  194. package/dist/unicode-decomposition.spec.js.map +1 -1
  195. package/dist/update-field-540.spec.js +1 -1
  196. package/dist/update-field-540.spec.js.map +1 -1
  197. package/dist/urn.js +1 -1
  198. package/dist/urn.js.map +1 -1
  199. package/dist/urn.spec.js +1 -1
  200. package/dist/urn.spec.js.map +1 -1
  201. package/dist/utils.js +17 -0
  202. package/dist/utils.js.map +1 -1
  203. package/package.json +1 -1
  204. package/src/cyrillux-usemarcon-replacement.js +87 -24
  205. package/src/fixRelatorTerms.js +5 -2
  206. package/src/index.js +21 -3
  207. package/src/indicator-fixes.js +19 -0
  208. package/src/sanitize-vocabulary-source-codes.js +4 -0
  209. package/src/utils.js +16 -0
  210. package/test-fixtures/cyrillux-usemarcon-replacement/f11/expectedResult.json +3 -0
  211. package/test-fixtures/cyrillux-usemarcon-replacement/f11/record.json +8 -0
  212. package/test-fixtures/cyrillux-usemarcon-replacement/f12/expectedResult.json +32 -0
  213. package/test-fixtures/cyrillux-usemarcon-replacement/f12/metadata.json +6 -0
  214. package/test-fixtures/cyrillux-usemarcon-replacement/f12/record.json +30 -0
  215. package/test-fixtures/cyrillux-usemarcon-replacement/f13/expectedResult.json +38 -0
  216. package/test-fixtures/cyrillux-usemarcon-replacement/f13/metadata.json +6 -0
  217. package/test-fixtures/cyrillux-usemarcon-replacement/f13/record.json +29 -0
  218. package/test-fixtures/cyrillux-usemarcon-replacement/f14/expectedResult.json +42 -0
  219. package/test-fixtures/cyrillux-usemarcon-replacement/f14/metadata.json +6 -0
  220. package/test-fixtures/cyrillux-usemarcon-replacement/f14/record.json +33 -0
  221. package/test-fixtures/indicator-fixes/09/expectedResult.json +10 -0
  222. package/test-fixtures/indicator-fixes/09/metadata.json +4 -0
  223. package/test-fixtures/indicator-fixes/09/record.json +11 -0
  224. package/test-fixtures/sanitize-vocabulary-source-codes/f04/expectedResult.json +74 -0
  225. package/test-fixtures/sanitize-vocabulary-source-codes/f04/metadata.json +8 -0
  226. package/test-fixtures/sanitize-vocabulary-source-codes/f04/record.json +75 -0
  227. package/test-fixtures/sanitize-vocabulary-source-codes/v04/expectedResult.json +5 -0
  228. package/test-fixtures/sanitize-vocabulary-source-codes/v04/metadata.json +8 -0
  229. package/test-fixtures/sanitize-vocabulary-source-codes/v04/record.json +75 -0
@@ -1 +1 @@
1
- {"version":3,"file":"fixed-fields.spec.js","names":["_chai","_interopRequireDefault","require","_chaiAsPromised","_marcRecord","_fixedFields","obj","__esModule","default","expect","chai","use","chaiAsPromised","describe","it","validator","validatorFactory","to","be","an","that","has","any","keys","description","a","validate","error","with","property","leader","length","rules","position","pattern","tag","dependencies","record","MarcRecord","fields","value","result","and","include","valid","eql","messages"],"sources":["../src/fixed-fields.spec.js"],"sourcesContent":["import chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/fixed-fields';\n\nconst {expect} = chai;\nchai.use(chaiAsPromised);\n\ndescribe('fixed-fields: language', () => {\n it('Creates a validator', async () => {\n const validator = await validatorFactory([]);\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n });\n\n it('Throws an error when configuration is not provided', () => {\n try {\n validatorFactory();\n } catch (error) {\n expect(error).to.be.an('error').with.property('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 expect(result).to.be.an('object').and.to.include({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 expect(result).to.eql({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"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,eAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,WAAA,GAAAF,OAAA;AACA,IAAAG,YAAA,GAAAJ,sBAAA,CAAAC,OAAA;AAAmD,SAAAD,uBAAAK,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEnD,MAAM;EAACG;AAAM,CAAC,GAAGC,aAAI;AACrBA,aAAI,CAACC,GAAG,CAACC,uBAAc,CAAC;AAExBC,QAAQ,CAAC,wBAAwB,EAAE,MAAM;EACvCC,EAAE,CAAC,qBAAqB,EAAE,YAAY;IACpC,MAAMC,SAAS,GAAG,MAAM,IAAAC,oBAAgB,EAAC,EAAE,CAAC;IAE5CP,MAAM,CAACM,SAAS,CAAC,CACdE,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;IAE/Cd,MAAM,CAACM,SAAS,CAACS,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;IAC/ChB,MAAM,CAACM,SAAS,CAACW,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;EAChD,CAAC,CAAC;EAEFX,EAAE,CAAC,oDAAoD,EAAE,MAAM;IAC7D,IAAI;MACF,IAAAE,oBAAgB,EAAC,CAAC;IACpB,CAAC,CAAC,OAAOW,KAAK,EAAE;MACdlB,MAAM,CAACkB,KAAK,CAAC,CAACV,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,OAAO,CAAC,CAACS,IAAI,CAACC,QAAQ,CAAC,SAAS,EAAE,2BAA2B,CAAC;IACvF;EACF,CAAC,CAAC;EAEFhB,QAAQ,CAAC,WAAW,EAAE,MAAM;IAC1BC,EAAE,CAAC,wBAAwB,EAAE,YAAY;MACvC,MAAMC,SAAS,GAAG,MAAM,IAAAC,oBAAgB,EAAC,CACvC;QAACc,MAAM,EAAE,IAAI;QAAEC,MAAM,EAAE,CAAC;QAAEC,KAAK,EAAE,CAAC;UAACC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;UAAEC,OAAO,EAAE;QAAY,CAAC;MAAC,CAAC,EAC7E;QAACC,GAAG,EAAE,QAAQ;QAAEJ,MAAM,EAAE,EAAE;QAAEC,KAAK,EAAE,CAAC;UAACC,QAAQ,EAAE,CAAC;UAAEC,OAAO,EAAE;QAAI,CAAC;MAAC,CAAC,EAClE;QAACC,GAAG,EAAE,QAAQ;QAAEJ,MAAM,EAAE,CAAC;QAAEC,KAAK,EAAE,CAChC;UAACC,QAAQ,EAAE,CAAC;UAAEC,OAAO,EAAE;QAAO,CAAC,EAC/B;UAACD,QAAQ,EAAE,CAAC;UAAEC,OAAO,EAAE,IAAI;UAAEE,YAAY,EAAE,CAAC;YAACH,QAAQ,EAAE,CAAC;YAAEC,OAAO,EAAE;UAAI,CAAC;QAAC,CAAC,EAC1E;UAACD,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;UAAEC,OAAO,EAAE,IAAI;UAAEE,YAAY,EAAE,CAAC;YAACH,QAAQ,EAAE,CAAC;YAAEC,OAAO,EAAE;UAAO,CAAC;QAAC,CAAC;MACnF,CAAC,CACH,CAAC;MACF,MAAMG,MAAM,GAAG,IAAIC,sBAAU,CAAC;QAC5BR,MAAM,EAAE,QAAQ;QAChBS,MAAM,EAAE,CACN;UACEJ,GAAG,EAAE,KAAK;UACVK,KAAK,EAAE;QACT,CAAC,EACD;UACEL,GAAG,EAAE,KAAK;UACVK,KAAK,EAAE;QACT,CAAC;MAEL,CAAC,CAAC;MACF,MAAMC,MAAM,GAAG,MAAM1B,SAAS,CAACW,QAAQ,CAACW,MAAM,CAAC;MAE/C5B,MAAM,CAACgC,MAAM,CAAC,CAACxB,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAACuB,GAAG,CAACzB,EAAE,CAAC0B,OAAO,CAAC;QAACC,KAAK,EAAE;MAAI,CAAC,CAAC;IACjE,CAAC,CAAC;IAEF9B,EAAE,CAAC,0BAA0B,EAAE,YAAY;MACzC,MAAMC,SAAS,GAAG,MAAM,IAAAC,oBAAgB,EAAC,CACvC;QAACc,MAAM,EAAE,IAAI;QAAEC,MAAM,EAAE,CAAC;QAAEC,KAAK,EAAE,CAAC;UAACC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;UAAEC,OAAO,EAAE;QAAY,CAAC;MAAC,CAAC,EAC7E;QAACC,GAAG,EAAE,QAAQ;QAAEJ,MAAM,EAAE,EAAE;QAAEC,KAAK,EAAE,CAAC;UAACC,QAAQ,EAAE,CAAC;UAAEC,OAAO,EAAE;QAAI,CAAC;MAAC,CAAC,EAClE;QAACC,GAAG,EAAE,QAAQ;QAAEJ,MAAM,EAAE,CAAC;QAAEC,KAAK,EAAE,CAChC;UAACC,QAAQ,EAAE,CAAC;UAAEC,OAAO,EAAE;QAAO,CAAC,EAC/B;UAACD,QAAQ,EAAE,CAAC;UAAEC,OAAO,EAAE,IAAI;UAAEE,YAAY,EAAE,CAAC;YAACH,QAAQ,EAAE,CAAC;YAAEC,OAAO,EAAE;UAAI,CAAC;QAAC,CAAC,EAC1E;UAACD,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;UAAEC,OAAO,EAAE,IAAI;UAAEE,YAAY,EAAE,CAAC;YAACH,QAAQ,EAAE,CAAC;YAAEC,OAAO,EAAE;UAAO,CAAC;QAAC,CAAC;MACnF,CAAC,EACF;QAACC,GAAG,EAAE,QAAQ;QAAEJ,MAAM,EAAE;MAAC,CAAC,CAC3B,CAAC;MACF,MAAMM,MAAM,GAAG,IAAIC,sBAAU,CAAC;QAC5BR,MAAM,EAAE,QAAQ;QAChBS,MAAM,EAAE,CACN;UACEJ,GAAG,EAAE,KAAK;UACVK,KAAK,EAAE;QACT,CAAC,EACD;UACEL,GAAG,EAAE,KAAK;UACVK,KAAK,EAAE;QACT,CAAC,EACD;UACEL,GAAG,EAAE,KAAK;UACVK,KAAK,EAAE;QACT,CAAC;MAEL,CAAC,CAAC;MAEF,MAAMC,MAAM,GAAG,MAAM1B,SAAS,CAACW,QAAQ,CAACW,MAAM,CAAC;MAE/C5B,MAAM,CAACgC,MAAM,CAAC,CAACxB,EAAE,CAAC4B,GAAG,CAAC;QAACD,KAAK,EAAE,KAAK;QAAEE,QAAQ,EAAE,CAC7C,0DAA0D,EAC1D,6DAA6D,EAC7D,6DAA6D,EAC7D,+DAA+D,EAC/D,8BAA8B;MAC/B,CAAC,CAAC;IACL,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"fixed-fields.spec.js","names":["_chai","_interopRequireDefault","require","_chaiAsPromised","_marcRecord","_fixedFields","e","__esModule","default","expect","chai","use","chaiAsPromised","describe","it","validator","validatorFactory","to","be","an","that","has","any","keys","description","a","validate","error","with","property","leader","length","rules","position","pattern","tag","dependencies","record","MarcRecord","fields","value","result","and","include","valid","eql","messages"],"sources":["../src/fixed-fields.spec.js"],"sourcesContent":["import chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/fixed-fields';\n\nconst {expect} = chai;\nchai.use(chaiAsPromised);\n\ndescribe('fixed-fields: language', () => {\n it('Creates a validator', async () => {\n const validator = await validatorFactory([]);\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n });\n\n it('Throws an error when configuration is not provided', () => {\n try {\n validatorFactory();\n } catch (error) {\n expect(error).to.be.an('error').with.property('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 expect(result).to.be.an('object').and.to.include({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 expect(result).to.eql({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"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"identical-fields.js","names":["_marcRecord","require","_default","description","validate","fix","record","uniq","uniqWith","fields","valid","length","messages","filter","tag","includes","map","obj","forEach","removeField","reduce","field","some","f","MarcRecord","isEqual","push"],"sources":["../src/identical-fields.js"],"sourcesContent":["/**\n * This validator de-duplicates identical fields in a record.\n */\n\nimport {MarcRecord} from '@natlibfi/marc-record';\n\nexport default function () {\n return {\n description: 'Handles identical duplicate in record fields',\n validate,\n fix\n };\n\n function validate(record) {\n const uniq = uniqWith(record.fields);\n const valid = uniq.length === record.fields.length;\n const messages = record.fields.filter(tag => !uniq.includes(tag))\n .map(obj => `Field ${obj.tag} has duplicates`);\n\n return valid ? {valid, messages: []} : {valid, messages};\n }\n\n function fix(record) {\n record.fields\n .filter(tag => !uniqWith(record.fields).includes(tag))\n .forEach(tag => record.removeField(tag));\n }\n\n function uniqWith(fields) {\n return fields.reduce((uniq, field) => {\n if (!uniq.some(f => MarcRecord.isEqual(f, field))) { // eslint-disable-line functional/no-conditional-statements\n uniq.push(field); // eslint-disable-line functional/immutable-data\n }\n\n return uniq;\n }, []);\n }\n}\n"],"mappings":";;;;;;AAIA,IAAAA,WAAA,GAAAC,OAAA;AAJA;AACA;AACA;;AAIe,SAAAC,SAAA,EAAY;EACzB,OAAO;IACLC,WAAW,EAAE,8CAA8C;IAC3DC,QAAQ;IACRC;EACF,CAAC;EAED,SAASD,QAAQA,CAACE,MAAM,EAAE;IACxB,MAAMC,IAAI,GAAGC,QAAQ,CAACF,MAAM,CAACG,MAAM,CAAC;IACpC,MAAMC,KAAK,GAAGH,IAAI,CAACI,MAAM,KAAKL,MAAM,CAACG,MAAM,CAACE,MAAM;IAClD,MAAMC,QAAQ,GAAGN,MAAM,CAACG,MAAM,CAACI,MAAM,CAACC,GAAG,IAAI,CAACP,IAAI,CAACQ,QAAQ,CAACD,GAAG,CAAC,CAAC,CAC9DE,GAAG,CAACC,GAAG,IAAK,SAAQA,GAAG,CAACH,GAAI,iBAAgB,CAAC;IAEhD,OAAOJ,KAAK,GAAG;MAACA,KAAK;MAAEE,QAAQ,EAAE;IAAE,CAAC,GAAG;MAACF,KAAK;MAAEE;IAAQ,CAAC;EAC1D;EAEA,SAASP,GAAGA,CAACC,MAAM,EAAE;IACnBA,MAAM,CAACG,MAAM,CACVI,MAAM,CAACC,GAAG,IAAI,CAACN,QAAQ,CAACF,MAAM,CAACG,MAAM,CAAC,CAACM,QAAQ,CAACD,GAAG,CAAC,CAAC,CACrDI,OAAO,CAACJ,GAAG,IAAIR,MAAM,CAACa,WAAW,CAACL,GAAG,CAAC,CAAC;EAC5C;EAEA,SAASN,QAAQA,CAACC,MAAM,EAAE;IACxB,OAAOA,MAAM,CAACW,MAAM,CAAC,CAACb,IAAI,EAAEc,KAAK,KAAK;MACpC,IAAI,CAACd,IAAI,CAACe,IAAI,CAACC,CAAC,IAAIC,sBAAU,CAACC,OAAO,CAACF,CAAC,EAAEF,KAAK,CAAC,CAAC,EAAE;QAAE;QACnDd,IAAI,CAACmB,IAAI,CAACL,KAAK,CAAC,CAAC,CAAC;MACpB;MAEA,OAAOd,IAAI;IACb,CAAC,EAAE,EAAE,CAAC;EACR;AACF","ignoreList":[]}
1
+ {"version":3,"file":"identical-fields.js","names":["_marcRecord","require","_default","description","validate","fix","record","uniq","uniqWith","fields","valid","length","messages","filter","tag","includes","map","obj","forEach","removeField","reduce","field","some","f","MarcRecord","isEqual","push"],"sources":["../src/identical-fields.js"],"sourcesContent":["/**\n * This validator de-duplicates identical fields in a record.\n */\n\nimport {MarcRecord} from '@natlibfi/marc-record';\n\nexport default function () {\n return {\n description: 'Handles identical duplicate in record fields',\n validate,\n fix\n };\n\n function validate(record) {\n const uniq = uniqWith(record.fields);\n const valid = uniq.length === record.fields.length;\n const messages = record.fields.filter(tag => !uniq.includes(tag))\n .map(obj => `Field ${obj.tag} has duplicates`);\n\n return valid ? {valid, messages: []} : {valid, messages};\n }\n\n function fix(record) {\n record.fields\n .filter(tag => !uniqWith(record.fields).includes(tag))\n .forEach(tag => record.removeField(tag));\n }\n\n function uniqWith(fields) {\n return fields.reduce((uniq, field) => {\n if (!uniq.some(f => MarcRecord.isEqual(f, field))) { // eslint-disable-line functional/no-conditional-statements\n uniq.push(field); // eslint-disable-line functional/immutable-data\n }\n\n return uniq;\n }, []);\n }\n}\n"],"mappings":";;;;;;AAIA,IAAAA,WAAA,GAAAC,OAAA;AAJA;AACA;AACA;;AAIe,SAAAC,SAAA,EAAY;EACzB,OAAO;IACLC,WAAW,EAAE,8CAA8C;IAC3DC,QAAQ;IACRC;EACF,CAAC;EAED,SAASD,QAAQA,CAACE,MAAM,EAAE;IACxB,MAAMC,IAAI,GAAGC,QAAQ,CAACF,MAAM,CAACG,MAAM,CAAC;IACpC,MAAMC,KAAK,GAAGH,IAAI,CAACI,MAAM,KAAKL,MAAM,CAACG,MAAM,CAACE,MAAM;IAClD,MAAMC,QAAQ,GAAGN,MAAM,CAACG,MAAM,CAACI,MAAM,CAACC,GAAG,IAAI,CAACP,IAAI,CAACQ,QAAQ,CAACD,GAAG,CAAC,CAAC,CAC9DE,GAAG,CAACC,GAAG,IAAI,SAASA,GAAG,CAACH,GAAG,iBAAiB,CAAC;IAEhD,OAAOJ,KAAK,GAAG;MAACA,KAAK;MAAEE,QAAQ,EAAE;IAAE,CAAC,GAAG;MAACF,KAAK;MAAEE;IAAQ,CAAC;EAC1D;EAEA,SAASP,GAAGA,CAACC,MAAM,EAAE;IACnBA,MAAM,CAACG,MAAM,CACVI,MAAM,CAACC,GAAG,IAAI,CAACN,QAAQ,CAACF,MAAM,CAACG,MAAM,CAAC,CAACM,QAAQ,CAACD,GAAG,CAAC,CAAC,CACrDI,OAAO,CAACJ,GAAG,IAAIR,MAAM,CAACa,WAAW,CAACL,GAAG,CAAC,CAAC;EAC5C;EAEA,SAASN,QAAQA,CAACC,MAAM,EAAE;IACxB,OAAOA,MAAM,CAACW,MAAM,CAAC,CAACb,IAAI,EAAEc,KAAK,KAAK;MACpC,IAAI,CAACd,IAAI,CAACe,IAAI,CAACC,CAAC,IAAIC,sBAAU,CAACC,OAAO,CAACF,CAAC,EAAEF,KAAK,CAAC,CAAC,EAAE;QAAE;QACnDd,IAAI,CAACmB,IAAI,CAACL,KAAK,CAAC,CAAC,CAAC;MACpB;MAEA,OAAOd,IAAI;IACb,CAAC,EAAE,EAAE,CAAC;EACR;AACF","ignoreList":[]}
@@ -3,7 +3,7 @@
3
3
  var _chai = require("chai");
4
4
  var _marcRecord = require("@natlibfi/marc-record");
5
5
  var _identicalFields = _interopRequireDefault(require("../src/identical-fields"));
6
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
6
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
7
7
  describe('identical-fields', () => {
8
8
  it('Creates a validator', async () => {
9
9
  const validator = await (0, _identicalFields.default)();
@@ -1 +1 @@
1
- {"version":3,"file":"identical-fields.spec.js","names":["_chai","require","_marcRecord","_identicalFields","_interopRequireDefault","obj","__esModule","default","describe","it","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","record","MarcRecord","fields","tag","subfields","code","value","result","eql","valid","messages","fix","ind1","ind2"],"sources":["../src/identical-fields.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/identical-fields';\n\ndescribe('identical-fields', () => {\n it('Creates a validator', async () => {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n });\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 expect(result).to.eql({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 expect(result).to.eql({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 expect(record.fields).to.eql([\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"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"identical-fields.spec.js","names":["_chai","require","_marcRecord","_identicalFields","_interopRequireDefault","e","__esModule","default","describe","it","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","record","MarcRecord","fields","tag","subfields","code","value","result","eql","valid","messages","fix","ind1","ind2"],"sources":["../src/identical-fields.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/identical-fields';\n\ndescribe('identical-fields', () => {\n it('Creates a validator', async () => {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n });\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 expect(result).to.eql({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 expect(result).to.eql({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 expect(record.fields).to.eql([\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"],"mappings":"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","ignoreList":[]}
package/dist/index.js CHANGED
@@ -9,6 +9,36 @@ Object.defineProperty(exports, "AccessRights", {
9
9
  return _accessRights.default;
10
10
  }
11
11
  });
12
+ Object.defineProperty(exports, "AddMissingField041", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _addMissingField.default;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "AddMissingField336", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _addMissingField2.default;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "AddMissingField337", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _addMissingField3.default;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "AddMissingField338", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _addMissingField4.default;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "CyrilluxUsemarconReplacement", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _cyrilluxUsemarconReplacement.default;
40
+ }
41
+ });
12
42
  Object.defineProperty(exports, "DoubleCommas", {
13
43
  enumerable: true,
14
44
  get: function () {
@@ -39,6 +69,12 @@ Object.defineProperty(exports, "EndingWhitespace", {
39
69
  return _endingWhitespace.default;
40
70
  }
41
71
  });
72
+ Object.defineProperty(exports, "Field008CharacterGroups", {
73
+ enumerable: true,
74
+ get: function () {
75
+ return _field0081834CharacterGroups.default;
76
+ }
77
+ });
42
78
  Object.defineProperty(exports, "Field505Separators", {
43
79
  enumerable: true,
44
80
  get: function () {
@@ -69,6 +105,24 @@ Object.defineProperty(exports, "FieldsPresent", {
69
105
  return _fieldsPresent.default;
70
106
  }
71
107
  });
108
+ Object.defineProperty(exports, "Fix33X", {
109
+ enumerable: true,
110
+ get: function () {
111
+ return _fix33X.default;
112
+ }
113
+ });
114
+ Object.defineProperty(exports, "FixCountryCodes", {
115
+ enumerable: true,
116
+ get: function () {
117
+ return _fixCountryCodes.default;
118
+ }
119
+ });
120
+ Object.defineProperty(exports, "FixLanguageCodes", {
121
+ enumerable: true,
122
+ get: function () {
123
+ return _fixLanguageCodes.default;
124
+ }
125
+ });
72
126
  Object.defineProperty(exports, "FixRelatorTerms", {
73
127
  enumerable: true,
74
128
  get: function () {
@@ -268,18 +322,27 @@ Object.defineProperty(exports, "Urn", {
268
322
  }
269
323
  });
270
324
  var _accessRights = _interopRequireDefault(require("./access-rights"));
325
+ var _addMissingField = _interopRequireDefault(require("./addMissingField041"));
326
+ var _addMissingField2 = _interopRequireDefault(require("./addMissingField336"));
327
+ var _addMissingField3 = _interopRequireDefault(require("./addMissingField337"));
328
+ var _addMissingField4 = _interopRequireDefault(require("./addMissingField338"));
329
+ var _cyrilluxUsemarconReplacement = _interopRequireDefault(require("./cyrillux-usemarcon-replacement"));
271
330
  var _doubleCommas = _interopRequireDefault(require("./double-commas"));
272
331
  var _duplicatesInd = _interopRequireDefault(require("./duplicates-ind1"));
273
332
  var _emptyFields = _interopRequireDefault(require("./empty-fields"));
274
333
  var _endingPunctuation = _interopRequireDefault(require("./ending-punctuation"));
275
334
  var _endingWhitespace = _interopRequireDefault(require("./ending-whitespace"));
335
+ var _field0081834CharacterGroups = _interopRequireDefault(require("./field-008-18-34-character-groups"));
276
336
  var _field505Separators = _interopRequireDefault(require("./field-505-separators"));
277
337
  var _field521Fix = _interopRequireDefault(require("./field-521-fix"));
278
338
  var _fieldExclusion = _interopRequireDefault(require("./field-exclusion"));
279
339
  var _fieldStructure = _interopRequireDefault(require("./field-structure"));
280
340
  var _fieldsPresent = _interopRequireDefault(require("./fields-present"));
281
- var _fixedFields = _interopRequireDefault(require("./fixed-fields"));
341
+ var _fix33X = _interopRequireDefault(require("./fix-33X"));
342
+ var _fixCountryCodes = _interopRequireDefault(require("./fix-country-codes"));
343
+ var _fixLanguageCodes = _interopRequireDefault(require("./fix-language-codes"));
282
344
  var _fixRelatorTerms = _interopRequireDefault(require("./fixRelatorTerms"));
345
+ var _fixedFields = _interopRequireDefault(require("./fixed-fields"));
283
346
  var _identicalFields = _interopRequireDefault(require("./identical-fields"));
284
347
  var _indicatorFixes = _interopRequireDefault(require("./indicator-fixes"));
285
348
  var _isbnIssn = _interopRequireDefault(require("./isbn-issn"));
@@ -294,11 +357,11 @@ var _normalizeQualifyingInformation = _interopRequireDefault(require("./normaliz
294
357
  var _normalizeUtf8Diacritics = _interopRequireDefault(require("./normalize-utf8-diacritics"));
295
358
  var _punctuation = _interopRequireDefault(require("./punctuation/"));
296
359
  var _punctuation2 = _interopRequireDefault(require("./punctuation2"));
297
- var _resolveOrphanedSubfield6s = _interopRequireDefault(require("./resolveOrphanedSubfield6s"));
298
360
  var _reindexSubfield6OccurenceNumbers = _interopRequireDefault(require("./reindexSubfield6OccurenceNumbers"));
299
361
  var _removeDuplicateDataFields = _interopRequireDefault(require("./removeDuplicateDataFields"));
300
362
  var _removeInferiorDataFields = _interopRequireDefault(require("./removeInferiorDataFields"));
301
363
  var _resolvableExtReferencesMelinda = _interopRequireDefault(require("./resolvable-ext-references-melinda"));
364
+ var _resolveOrphanedSubfield6s = _interopRequireDefault(require("./resolveOrphanedSubfield6s"));
302
365
  var _sanitizeVocabularySourceCodes = _interopRequireDefault(require("./sanitize-vocabulary-source-codes"));
303
366
  var _sortFields = _interopRequireDefault(require("./sortFields"));
304
367
  var _sortRelatorTerms = _interopRequireDefault(require("./sortRelatorTerms"));
@@ -311,5 +374,5 @@ var _typeOfDate = _interopRequireDefault(require("./typeOfDate-008"));
311
374
  var _unicodeDecomposition = _interopRequireDefault(require("./unicode-decomposition"));
312
375
  var _updateField = _interopRequireDefault(require("./update-field-540"));
313
376
  var _urn = _interopRequireDefault(require("./urn"));
314
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
377
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
315
378
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_accessRights","_interopRequireDefault","require","_doubleCommas","_duplicatesInd","_emptyFields","_endingPunctuation","_endingWhitespace","_field505Separators","_field521Fix","_fieldExclusion","_fieldStructure","_fieldsPresent","_fixedFields","_fixRelatorTerms","_identicalFields","_indicatorFixes","_isbnIssn","_itemLanguage","_mergeField500Lisapainokset","_mergeRelatorTermFields","_multipleSubfield","_nonBreakingSpace","_normalizeDashes","_normalizeIdentifiers","_normalizeQualifyingInformation","_normalizeUtf8Diacritics","_punctuation","_punctuation2","_resolveOrphanedSubfield6s","_reindexSubfield6OccurenceNumbers","_removeDuplicateDataFields","_removeInferiorDataFields","_resolvableExtReferencesMelinda","_sanitizeVocabularySourceCodes","_sortFields","_sortRelatorTerms","_sortSubfields","_sortTags","_subfieldValueNormalizations","_subfieldExclusion","_sync007And","_typeOfDate","_unicodeDecomposition","_updateField","_urn","obj","__esModule","default"],"sources":["../src/index.js"],"sourcesContent":["import AccessRights from './access-rights';\nimport DoubleCommas from './double-commas';\nimport DuplicatesInd1 from './duplicates-ind1';\nimport EmptyFields from './empty-fields';\nimport EndingPunctuation from './ending-punctuation';\nimport EndingWhitespace from './ending-whitespace';\nimport Field505Separators from './field-505-separators';\nimport Field521Fix from './field-521-fix';\nimport FieldExclusion from './field-exclusion';\nimport FieldStructure from './field-structure';\nimport FieldsPresent from './fields-present';\nimport FixedFields from './fixed-fields';\nimport FixRelatorTerms from './fixRelatorTerms';\nimport IdenticalFields from './identical-fields';\nimport IndicatorFixes from './indicator-fixes';\nimport IsbnIssn from './isbn-issn';\nimport ItemLanguage from './item-language';\nimport MergeField500Lisapainokset from './mergeField500Lisapainokset';\nimport MergeRelatorTermFields from './mergeRelatorTermFields';\nimport MultipleSubfield0s from './multiple-subfield-0';\nimport NonBreakingSpace from './non-breaking-space';\nimport NormalizeDashes from './normalize-dashes';\nimport NormalizeIdentifiers from './normalize-identifiers';\nimport NormalizeQualifyingInformation from './normalize-qualifying-information';\nimport NormalizeUTF8Diacritics from './normalize-utf8-diacritics';\nimport Punctuation from './punctuation/';\nimport Punctuation2 from './punctuation2';\nimport ResolveOrphanedSubfield6s from './resolveOrphanedSubfield6s'; // Do this before reindexing! (thus not in alphabetical order)\nimport ReindexSubfield6OccurenceNumbers from './reindexSubfield6OccurenceNumbers';\nimport RemoveDuplicateDataFields from './removeDuplicateDataFields';\nimport RemoveInferiorDataFields from './removeInferiorDataFields';\nimport ResolvableExtReferences from './resolvable-ext-references-melinda';\nimport SanitizeVocabularySourceCodes from './sanitize-vocabulary-source-codes';\nimport SortFields from './sortFields';\nimport SortRelatorTerms from './sortRelatorTerms';\nimport SortSubfields from './sortSubfields';\nimport SortTags from './sort-tags';\n// import StripPunctuation from './stripPunctuation'; // Can we add this here? Should be used very cautiosly!\nimport SubfieldValueNormalizations from './subfieldValueNormalizations';\nimport SubfieldExclusion from './subfield-exclusion';\nimport Sync007And300 from './sync-007-and-300';\nimport TypeOfDateF008 from './typeOfDate-008';\nimport UnicodeDecomposition from './unicode-decomposition';\nimport UpdateField540 from './update-field-540';\nimport Urn from './urn';\n\nexport {\n AccessRights,\n DoubleCommas,\n DuplicatesInd1,\n EmptyFields,\n EndingPunctuation,\n EndingWhitespace,\n Field505Separators,\n Field521Fix,\n FieldExclusion,\n FieldsPresent,\n FieldStructure,\n FixRelatorTerms,\n FixedFields,\n IdenticalFields,\n IndicatorFixes,\n IsbnIssn,\n ItemLanguage,\n MergeField500Lisapainokset,\n MergeRelatorTermFields,\n MultipleSubfield0s,\n NonBreakingSpace,\n NormalizeDashes,\n NormalizeIdentifiers,\n NormalizeQualifyingInformation,\n NormalizeUTF8Diacritics,\n Punctuation,\n Punctuation2,\n ResolveOrphanedSubfield6s,\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 UnicodeDecomposition,\n UpdateField540,\n Urn,\n SortFields // Keep this as last\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_accessRights","_interopRequireDefault","require","_addMissingField","_addMissingField2","_addMissingField3","_addMissingField4","_cyrilluxUsemarconReplacement","_doubleCommas","_duplicatesInd","_emptyFields","_endingPunctuation","_endingWhitespace","_field0081834CharacterGroups","_field505Separators","_field521Fix","_fieldExclusion","_fieldStructure","_fieldsPresent","_fix33X","_fixCountryCodes","_fixLanguageCodes","_fixRelatorTerms","_fixedFields","_identicalFields","_indicatorFixes","_isbnIssn","_itemLanguage","_mergeField500Lisapainokset","_mergeRelatorTermFields","_multipleSubfield","_nonBreakingSpace","_normalizeDashes","_normalizeIdentifiers","_normalizeQualifyingInformation","_normalizeUtf8Diacritics","_punctuation","_punctuation2","_reindexSubfield6OccurenceNumbers","_removeDuplicateDataFields","_removeInferiorDataFields","_resolvableExtReferencesMelinda","_resolveOrphanedSubfield6s","_sanitizeVocabularySourceCodes","_sortFields","_sortRelatorTerms","_sortSubfields","_sortTags","_subfieldValueNormalizations","_subfieldExclusion","_sync007And","_typeOfDate","_unicodeDecomposition","_updateField","_urn","e","__esModule","default"],"sources":["../src/index.js"],"sourcesContent":["import AccessRights from './access-rights';\nimport AddMissingField041 from './addMissingField041';\nimport AddMissingField336 from './addMissingField336';\nimport AddMissingField337 from './addMissingField337';\nimport AddMissingField338 from './addMissingField338';\nimport CyrilluxUsemarconReplacement from './cyrillux-usemarcon-replacement';\nimport DoubleCommas from './double-commas';\nimport DuplicatesInd1 from './duplicates-ind1';\nimport EmptyFields from './empty-fields';\nimport EndingPunctuation from './ending-punctuation';\nimport EndingWhitespace from './ending-whitespace';\nimport Field008CharacterGroups from './field-008-18-34-character-groups';\nimport Field505Separators from './field-505-separators';\nimport Field521Fix from './field-521-fix';\nimport FieldExclusion from './field-exclusion';\nimport FieldStructure from './field-structure';\nimport FieldsPresent from './fields-present';\nimport Fix33X from './fix-33X';\nimport FixCountryCodes from './fix-country-codes';\nimport FixLanguageCodes from './fix-language-codes';\nimport FixRelatorTerms from './fixRelatorTerms';\nimport FixedFields from './fixed-fields';\nimport IdenticalFields from './identical-fields';\nimport IndicatorFixes from './indicator-fixes';\nimport IsbnIssn from './isbn-issn';\nimport ItemLanguage from './item-language';\nimport MergeField500Lisapainokset from './mergeField500Lisapainokset';\nimport MergeRelatorTermFields from './mergeRelatorTermFields';\nimport MultipleSubfield0s from './multiple-subfield-0';\nimport NonBreakingSpace from './non-breaking-space';\nimport NormalizeDashes from './normalize-dashes';\nimport NormalizeIdentifiers from './normalize-identifiers';\nimport NormalizeQualifyingInformation from './normalize-qualifying-information';\nimport NormalizeUTF8Diacritics from './normalize-utf8-diacritics';\nimport Punctuation from './punctuation/';\nimport Punctuation2 from './punctuation2';\nimport ReindexSubfield6OccurenceNumbers from './reindexSubfield6OccurenceNumbers';\nimport RemoveDuplicateDataFields from './removeDuplicateDataFields';\nimport RemoveInferiorDataFields from './removeInferiorDataFields';\nimport ResolvableExtReferences from './resolvable-ext-references-melinda';\nimport ResolveOrphanedSubfield6s from './resolveOrphanedSubfield6s';\nimport SanitizeVocabularySourceCodes from './sanitize-vocabulary-source-codes';\nimport SortFields from './sortFields';\nimport SortRelatorTerms from './sortRelatorTerms';\nimport SortSubfields from './sortSubfields';\nimport SortTags from './sort-tags';\n// import StripPunctuation from './stripPunctuation'; // Can we add this here? Should be used very cautiosly!\nimport SubfieldValueNormalizations from './subfieldValueNormalizations';\nimport SubfieldExclusion from './subfield-exclusion';\nimport Sync007And300 from './sync-007-and-300';\nimport TypeOfDateF008 from './typeOfDate-008';\nimport UnicodeDecomposition from './unicode-decomposition';\nimport UpdateField540 from './update-field-540';\nimport Urn from './urn';\n\nexport {\n AccessRights,\n AddMissingField041,\n AddMissingField336,\n AddMissingField337,\n AddMissingField338,\n CyrilluxUsemarconReplacement,\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 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 UnicodeDecomposition,\n UpdateField540,\n Urn,\n SortFields // Keep this as last\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,aAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,gBAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,iBAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,iBAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,iBAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,6BAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,aAAA,GAAAP,sBAAA,CAAAC,OAAA;AACA,IAAAO,cAAA,GAAAR,sBAAA,CAAAC,OAAA;AACA,IAAAQ,YAAA,GAAAT,sBAAA,CAAAC,OAAA;AACA,IAAAS,kBAAA,GAAAV,sBAAA,CAAAC,OAAA;AACA,IAAAU,iBAAA,GAAAX,sBAAA,CAAAC,OAAA;AACA,IAAAW,4BAAA,GAAAZ,sBAAA,CAAAC,OAAA;AACA,IAAAY,mBAAA,GAAAb,sBAAA,CAAAC,OAAA;AACA,IAAAa,YAAA,GAAAd,sBAAA,CAAAC,OAAA;AACA,IAAAc,eAAA,GAAAf,sBAAA,CAAAC,OAAA;AACA,IAAAe,eAAA,GAAAhB,sBAAA,CAAAC,OAAA;AACA,IAAAgB,cAAA,GAAAjB,sBAAA,CAAAC,OAAA;AACA,IAAAiB,OAAA,GAAAlB,sBAAA,CAAAC,OAAA;AACA,IAAAkB,gBAAA,GAAAnB,sBAAA,CAAAC,OAAA;AACA,IAAAmB,iBAAA,GAAApB,sBAAA,CAAAC,OAAA;AACA,IAAAoB,gBAAA,GAAArB,sBAAA,CAAAC,OAAA;AACA,IAAAqB,YAAA,GAAAtB,sBAAA,CAAAC,OAAA;AACA,IAAAsB,gBAAA,GAAAvB,sBAAA,CAAAC,OAAA;AACA,IAAAuB,eAAA,GAAAxB,sBAAA,CAAAC,OAAA;AACA,IAAAwB,SAAA,GAAAzB,sBAAA,CAAAC,OAAA;AACA,IAAAyB,aAAA,GAAA1B,sBAAA,CAAAC,OAAA;AACA,IAAA0B,2BAAA,GAAA3B,sBAAA,CAAAC,OAAA;AACA,IAAA2B,uBAAA,GAAA5B,sBAAA,CAAAC,OAAA;AACA,IAAA4B,iBAAA,GAAA7B,sBAAA,CAAAC,OAAA;AACA,IAAA6B,iBAAA,GAAA9B,sBAAA,CAAAC,OAAA;AACA,IAAA8B,gBAAA,GAAA/B,sBAAA,CAAAC,OAAA;AACA,IAAA+B,qBAAA,GAAAhC,sBAAA,CAAAC,OAAA;AACA,IAAAgC,+BAAA,GAAAjC,sBAAA,CAAAC,OAAA;AACA,IAAAiC,wBAAA,GAAAlC,sBAAA,CAAAC,OAAA;AACA,IAAAkC,YAAA,GAAAnC,sBAAA,CAAAC,OAAA;AACA,IAAAmC,aAAA,GAAApC,sBAAA,CAAAC,OAAA;AACA,IAAAoC,iCAAA,GAAArC,sBAAA,CAAAC,OAAA;AACA,IAAAqC,0BAAA,GAAAtC,sBAAA,CAAAC,OAAA;AACA,IAAAsC,yBAAA,GAAAvC,sBAAA,CAAAC,OAAA;AACA,IAAAuC,+BAAA,GAAAxC,sBAAA,CAAAC,OAAA;AACA,IAAAwC,0BAAA,GAAAzC,sBAAA,CAAAC,OAAA;AACA,IAAAyC,8BAAA,GAAA1C,sBAAA,CAAAC,OAAA;AACA,IAAA0C,WAAA,GAAA3C,sBAAA,CAAAC,OAAA;AACA,IAAA2C,iBAAA,GAAA5C,sBAAA,CAAAC,OAAA;AACA,IAAA4C,cAAA,GAAA7C,sBAAA,CAAAC,OAAA;AACA,IAAA6C,SAAA,GAAA9C,sBAAA,CAAAC,OAAA;AAEA,IAAA8C,4BAAA,GAAA/C,sBAAA,CAAAC,OAAA;AACA,IAAA+C,kBAAA,GAAAhD,sBAAA,CAAAC,OAAA;AACA,IAAAgD,WAAA,GAAAjD,sBAAA,CAAAC,OAAA;AACA,IAAAiD,WAAA,GAAAlD,sBAAA,CAAAC,OAAA;AACA,IAAAkD,qBAAA,GAAAnD,sBAAA,CAAAC,OAAA;AACA,IAAAmD,YAAA,GAAApD,sBAAA,CAAAC,OAAA;AACA,IAAAoD,IAAA,GAAArD,sBAAA,CAAAC,OAAA;AAAwB,SAAAD,uBAAAsD,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA","ignoreList":[]}
@@ -130,6 +130,22 @@ function normalizeNonFilingIndicator2(field, languages = []) {
130
130
  }
131
131
  field.ind2 = determineNonFilingIndicatorValue(field, languages); // eslint-disable-line functional/immutable-data
132
132
  }
133
+ const fiktiivisenAineistonLisaluokatFI = ['Eläimet', 'Erotiikka', 'Erä', 'Fantasia', 'Historia', 'Huumori', 'Jännitys', 'Kauhu', 'Novellit', 'Romantiikka', 'Scifi', 'Sota', 'Urheilu', 'Uskonto'];
134
+ function containsFiktiivisenAineistonLisaluokka(field) {
135
+ // Should we check Swedish versions as well?
136
+ return field.subfields.some(sf => sf.code === 'a' && fiktiivisenAineistonLisaluokatFI.includes(sf.value));
137
+ }
138
+ function normalize084Indicator1(field) {
139
+ if (field.tag !== '084') {
140
+ return;
141
+ }
142
+
143
+ // https://marc21.kansalliskirjasto.fi/bib/05X-08X.htm#084 and https://finto.fi/ykl/fi/page/fiktioluokka
144
+ if (field.ind1 !== '9' && containsFiktiivisenAineistonLisaluokka(field) && field.subfields.some(sf => sf.code === '2' && sf.value === 'ykl')) {
145
+ field.ind1 = '9'; // eslint-disable-line functional/immutable-data
146
+ return;
147
+ }
148
+ }
133
149
  function normalize245Indicator1(field, record) {
134
150
  if (field.tag !== '245') {
135
151
  return;
@@ -194,6 +210,7 @@ function recordNormalizeIndicators(record) {
194
210
  record.fields.forEach(field => fieldNormalizeIndicators(field, record, languages));
195
211
  }
196
212
  function fieldNormalizeIndicators(field, record, languages) {
213
+ normalize084Indicator1(field);
197
214
  normalize245Indicator1(field, record);
198
215
  normalizeNonFilingIndicator1(field, languages);
199
216
  normalizeNonFilingIndicator2(field, languages);
@@ -1 +1 @@
1
- {"version":3,"file":"indicator-fixes.js","names":["_utils","require","_default","description","validate","fix","record","res","message","valid","recordNormalizeIndicators","validateRecord","length","clonedFields","JSON","parse","stringify","fields","forEach","field","index","compareFields","origFieldAsString","fieldToString","ind1","push","ind2","ind1NonFilingChars","ind2NonFilingChars","hasNonFilingIndicator1","includes","tag","modifiableIndicatorValue","value","hasNonFilingIndicator2","valueBeginsWithDeterminer","cands","find","cand","substring","determineNonFilingIndicatorValue","languages","undefined","subfieldA","subfields","sf","code","name","toLowerCase","match","normalizeNonFilingIndicator1","normalizeNonFilingIndicator2","normalize245Indicator1","field1XX","get","normalize776Indicator2","some","recordNormalize490","fields490","fields8XX","f","getLanguages","langFields","filter","isRelevantSubfield","map","subfield","fieldNormalizeIndicators"],"sources":["../src/indicator-fixes.js"],"sourcesContent":["// Relocated from melinda-marc-record-merge-reducers (and renamed)\n//import createDebugLogger from 'debug';\n//const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:normalizeIdentifiers');\n\nimport {fieldToString} from './utils';\n\n\nexport default function () {\n\n return {\n description: 'Normalizes indicator values',\n validate, fix\n };\n\n function fix(record) {\n const res = {message: [], fix: [], valid: true};\n\n recordNormalizeIndicators(record);\n\n return res;\n }\n\n function validate(record) {\n const res = {message: []};\n\n validateRecord(record, res);\n\n res.valid = res.message.length < 1; // eslint-disable-line functional/immutable-data\n return res;\n }\n\n\n function validateRecord(record, res) {\n //nvdebug(record);\n const clonedFields = JSON.parse(JSON.stringify(record.fields));\n recordNormalizeIndicators(record);\n\n record.fields.forEach((field, index) => compareFields(field, index));\n\n function compareFields(field, index) {\n const origFieldAsString = fieldToString(clonedFields[index]);\n //const clonedFieldAsString = fieldToString(field);\n if (clonedFields[index].ind1 !== field.ind1) { // eslint-disable-line functional/no-conditional-statements\n //nvdebug(`FIX IND1: '${clonedFields[index].ind1}' => '${field.ind1}': ${clonedFieldAsString}`);\n res.message.push(`Expected IND1 for '${origFieldAsString}' is '${field.ind1}'`); // eslint-disable-line functional/immutable-data\n }\n if (clonedFields[index].ind2 !== field.ind2) { // eslint-disable-line functional/no-conditional-statements\n //nvdebug(`FIX IND2: '${clonedFields[index].ind2}' => '${field.ind2}': ${clonedFieldAsString}`);\n res.message.push(`Expected IND2 for '${origFieldAsString}' is '${field.ind2}'`); // eslint-disable-line functional/immutable-data\n }\n }\n // Validator should not change the original record:\n record.fields = clonedFields; // eslint-disable-line functional/immutable-data\n return;\n }\n}\n\n\nconst ind1NonFilingChars = ['130', '630', '730', '740'];\nconst ind2NonFilingChars = ['222', '240', '242', '243', '245', '830'];\n\nfunction hasNonFilingIndicator1(field) {\n return ind1NonFilingChars.includes(field.tag);\n}\n\nfunction modifiableIndicatorValue(value) {\n // If field contains a legit-looking value, don't try to modify it here...\n return !['9', '8', '7', '6', '5', '4', '3', '2', '1'].includes(value);\n}\n\nfunction hasNonFilingIndicator2(field) {\n return ind2NonFilingChars.includes(field.tag);\n}\n\nfunction valueBeginsWithDeterminer(value, cands) {\n return cands.find(cand => value.substring(0, cand.length) === cand);\n}\n\nfunction determineNonFilingIndicatorValue(field, languages = undefined) {\n const subfieldA = field.subfields.find(sf => sf.code === 'a');\n if (!subfieldA) {\n // nvdebug(' Subfield $a miss!');\n return;\n }\n\n const name = subfieldA.value.toLowerCase();\n\n if (languages.includes('eng')) {\n const match = valueBeginsWithDeterminer(name, ['a ', 'an ', 'the ']);\n if (match) {\n return `${match.length}`;\n }\n }\n\n if (languages.includes('fre')) {\n const match = valueBeginsWithDeterminer(name, ['l\\'', 'le ']);\n if (match) {\n return `${match.length}`;\n }\n }\n\n if (languages.includes('ger')) {\n const match = valueBeginsWithDeterminer(name, ['das ', 'der ', 'die ']);\n if (match) {\n return `${match.length}`;\n }\n }\n\n if (languages.includes('swe')) {\n const match = valueBeginsWithDeterminer(name, ['en ', 'ett ']);\n if (match) {\n return `${match.length}`;\n }\n if (name.match(/^de[nt] /u) && !name.match(/^de[nt] som /u)) {\n return '4';\n }\n }\n\n // Fallback-ish: try to guess even without languages:\n const match = valueBeginsWithDeterminer(name, ['the ']);\n if (match) {\n return `${match.length}`;\n }\n if (name.match(/^a /u) && !languages.includes('hun') && !name.match(/^a (?:b |la )/u)) { // Skip \"a b c\", \"a la carte\"...\n return '2';\n }\n\n return '0';\n}\n\nfunction normalizeNonFilingIndicator1(field, languages = []) {\n if (!hasNonFilingIndicator1(field) || !modifiableIndicatorValue(field.ind1)) {\n return;\n }\n\n field.ind1 = determineNonFilingIndicatorValue(field, languages); // eslint-disable-line functional/immutable-data\n}\n\nfunction normalizeNonFilingIndicator2(field, languages = []) {\n if (!hasNonFilingIndicator2(field) || !modifiableIndicatorValue(field.ind2)) {\n return;\n }\n\n field.ind2 = determineNonFilingIndicatorValue(field, languages); // eslint-disable-line functional/immutable-data\n}\n\n\nfunction normalize245Indicator1(field, record) {\n if (field.tag !== '245') {\n return;\n }\n const field1XX = record.get('^1..$');\n field.ind1 = field1XX.length === 0 ? '0' : '1'; // eslint-disable-line functional/immutable-data\n}\n\nfunction normalize776Indicator2(field) {\n if (field.tag !== '776') {\n return;\n }\n // If subfield $i exists, ind2 must me '8'\n if (field.subfields.some(sf => sf.code === 'i')) {\n field.ind2 = '8'; // eslint-disable-line functional/immutable-data\n return;\n }\n}\n\n\nfunction recordNormalize490(record) {\n const fields490 = record.get('^490$');\n const fields8XX = record.get('^(?:800|810|811|830)$');\n\n if (fields490.length === 0) {\n return;\n }\n if (fields490.length <= fields8XX.length) {\n // Trace found for each field 490:\n fields490.forEach(f => {\n f.ind1 = '1'; // eslint-disable-line functional/immutable-data\n });\n return;\n }\n if (fields8XX.length === 0) { // Fields 490 are always untraced (no traces found)\n fields490.forEach(f => {\n f.ind1 = '0'; // eslint-disable-line functional/immutable-data\n });\n return;\n }\n // For other combinations we just can't be sure, so leave them as they are.\n}\n\n\nfunction getLanguages(record) {\n const langFields = record.get('^041$');\n\n if (langFields.length === 0) {\n return [];\n }\n\n return langFields[0].subfields.filter(sf => isRelevantSubfield(sf)).map(subfield => subfield.value);\n\n function isRelevantSubfield(subfield) {\n if (!['a', 'd', 'h'].includes(subfield.code)) {\n return false;\n }\n if (subfield.value.length !== 3) {\n return false;\n }\n // We could require /^[a-z][a-z][a-z]$/ etc as well, but it's not really that relevant.\n return true;\n }\n\n}\n\nexport function recordNormalizeIndicators(record) {\n recordNormalize490(record);\n\n // Language is used to handle non-filing indicators\n const languages = getLanguages(record);\n\n record.fields.forEach(field => fieldNormalizeIndicators(field, record, languages));\n\n}\n\nfunction fieldNormalizeIndicators(field, record, languages) {\n normalize245Indicator1(field, record);\n normalizeNonFilingIndicator1(field, languages);\n normalizeNonFilingIndicator2(field, languages);\n normalize776Indicator2(field);\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"indicator-fixes.js","names":["_utils","require","_default","description","validate","fix","record","res","message","valid","recordNormalizeIndicators","validateRecord","length","clonedFields","JSON","parse","stringify","fields","forEach","field","index","compareFields","origFieldAsString","fieldToString","ind1","push","ind2","ind1NonFilingChars","ind2NonFilingChars","hasNonFilingIndicator1","includes","tag","modifiableIndicatorValue","value","hasNonFilingIndicator2","valueBeginsWithDeterminer","cands","find","cand","substring","determineNonFilingIndicatorValue","languages","undefined","subfieldA","subfields","sf","code","name","toLowerCase","match","normalizeNonFilingIndicator1","normalizeNonFilingIndicator2","fiktiivisenAineistonLisaluokatFI","containsFiktiivisenAineistonLisaluokka","some","normalize084Indicator1","normalize245Indicator1","field1XX","get","normalize776Indicator2","recordNormalize490","fields490","fields8XX","f","getLanguages","langFields","filter","isRelevantSubfield","map","subfield","fieldNormalizeIndicators"],"sources":["../src/indicator-fixes.js"],"sourcesContent":["// Relocated from melinda-marc-record-merge-reducers (and renamed)\n//import createDebugLogger from 'debug';\n//const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:normalizeIdentifiers');\n\nimport {fieldToString} from './utils';\n\n\nexport default function () {\n\n return {\n description: 'Normalizes indicator values',\n validate, fix\n };\n\n function fix(record) {\n const res = {message: [], fix: [], valid: true};\n\n recordNormalizeIndicators(record);\n\n return res;\n }\n\n function validate(record) {\n const res = {message: []};\n\n validateRecord(record, res);\n\n res.valid = res.message.length < 1; // eslint-disable-line functional/immutable-data\n return res;\n }\n\n\n function validateRecord(record, res) {\n //nvdebug(record);\n const clonedFields = JSON.parse(JSON.stringify(record.fields));\n recordNormalizeIndicators(record);\n\n record.fields.forEach((field, index) => compareFields(field, index));\n\n function compareFields(field, index) {\n const origFieldAsString = fieldToString(clonedFields[index]);\n //const clonedFieldAsString = fieldToString(field);\n if (clonedFields[index].ind1 !== field.ind1) { // eslint-disable-line functional/no-conditional-statements\n //nvdebug(`FIX IND1: '${clonedFields[index].ind1}' => '${field.ind1}': ${clonedFieldAsString}`);\n res.message.push(`Expected IND1 for '${origFieldAsString}' is '${field.ind1}'`); // eslint-disable-line functional/immutable-data\n }\n if (clonedFields[index].ind2 !== field.ind2) { // eslint-disable-line functional/no-conditional-statements\n //nvdebug(`FIX IND2: '${clonedFields[index].ind2}' => '${field.ind2}': ${clonedFieldAsString}`);\n res.message.push(`Expected IND2 for '${origFieldAsString}' is '${field.ind2}'`); // eslint-disable-line functional/immutable-data\n }\n }\n // Validator should not change the original record:\n record.fields = clonedFields; // eslint-disable-line functional/immutable-data\n return;\n }\n}\n\n\nconst ind1NonFilingChars = ['130', '630', '730', '740'];\nconst ind2NonFilingChars = ['222', '240', '242', '243', '245', '830'];\n\nfunction hasNonFilingIndicator1(field) {\n return ind1NonFilingChars.includes(field.tag);\n}\n\nfunction modifiableIndicatorValue(value) {\n // If field contains a legit-looking value, don't try to modify it here...\n return !['9', '8', '7', '6', '5', '4', '3', '2', '1'].includes(value);\n}\n\nfunction hasNonFilingIndicator2(field) {\n return ind2NonFilingChars.includes(field.tag);\n}\n\nfunction valueBeginsWithDeterminer(value, cands) {\n return cands.find(cand => value.substring(0, cand.length) === cand);\n}\n\nfunction determineNonFilingIndicatorValue(field, languages = undefined) {\n const subfieldA = field.subfields.find(sf => sf.code === 'a');\n if (!subfieldA) {\n // nvdebug(' Subfield $a miss!');\n return;\n }\n\n const name = subfieldA.value.toLowerCase();\n\n if (languages.includes('eng')) {\n const match = valueBeginsWithDeterminer(name, ['a ', 'an ', 'the ']);\n if (match) {\n return `${match.length}`;\n }\n }\n\n if (languages.includes('fre')) {\n const match = valueBeginsWithDeterminer(name, ['l\\'', 'le ']);\n if (match) {\n return `${match.length}`;\n }\n }\n\n if (languages.includes('ger')) {\n const match = valueBeginsWithDeterminer(name, ['das ', 'der ', 'die ']);\n if (match) {\n return `${match.length}`;\n }\n }\n\n if (languages.includes('swe')) {\n const match = valueBeginsWithDeterminer(name, ['en ', 'ett ']);\n if (match) {\n return `${match.length}`;\n }\n if (name.match(/^de[nt] /u) && !name.match(/^de[nt] som /u)) {\n return '4';\n }\n }\n\n // Fallback-ish: try to guess even without languages:\n const match = valueBeginsWithDeterminer(name, ['the ']);\n if (match) {\n return `${match.length}`;\n }\n if (name.match(/^a /u) && !languages.includes('hun') && !name.match(/^a (?:b |la )/u)) { // Skip \"a b c\", \"a la carte\"...\n return '2';\n }\n\n return '0';\n}\n\nfunction normalizeNonFilingIndicator1(field, languages = []) {\n if (!hasNonFilingIndicator1(field) || !modifiableIndicatorValue(field.ind1)) {\n return;\n }\n\n field.ind1 = determineNonFilingIndicatorValue(field, languages); // eslint-disable-line functional/immutable-data\n}\n\nfunction normalizeNonFilingIndicator2(field, languages = []) {\n if (!hasNonFilingIndicator2(field) || !modifiableIndicatorValue(field.ind2)) {\n return;\n }\n\n field.ind2 = determineNonFilingIndicatorValue(field, languages); // eslint-disable-line functional/immutable-data\n}\n\nconst fiktiivisenAineistonLisaluokatFI = ['Eläimet', 'Erotiikka', 'Erä', 'Fantasia', 'Historia', 'Huumori', 'Jännitys', 'Kauhu', 'Novellit', 'Romantiikka', 'Scifi', 'Sota', 'Urheilu', 'Uskonto'];\n\nfunction containsFiktiivisenAineistonLisaluokka(field) {\n // Should we check Swedish versions as well?\n return field.subfields.some(sf => sf.code === 'a' && fiktiivisenAineistonLisaluokatFI.includes(sf.value));\n}\n\nfunction normalize084Indicator1(field) {\n if (field.tag !== '084') {\n return;\n }\n\n // https://marc21.kansalliskirjasto.fi/bib/05X-08X.htm#084 and https://finto.fi/ykl/fi/page/fiktioluokka\n if (field.ind1 !== '9' && containsFiktiivisenAineistonLisaluokka(field) && field.subfields.some(sf => sf.code === '2' && sf.value === 'ykl')) {\n field.ind1 = '9'; // eslint-disable-line functional/immutable-data\n return;\n }\n}\n\nfunction normalize245Indicator1(field, record) {\n if (field.tag !== '245') {\n return;\n }\n const field1XX = record.get('^1..$');\n field.ind1 = field1XX.length === 0 ? '0' : '1'; // eslint-disable-line functional/immutable-data\n}\n\nfunction normalize776Indicator2(field) {\n if (field.tag !== '776') {\n return;\n }\n // If subfield $i exists, ind2 must me '8'\n if (field.subfields.some(sf => sf.code === 'i')) {\n field.ind2 = '8'; // eslint-disable-line functional/immutable-data\n return;\n }\n}\n\n\nfunction recordNormalize490(record) {\n const fields490 = record.get('^490$');\n const fields8XX = record.get('^(?:800|810|811|830)$');\n\n if (fields490.length === 0) {\n return;\n }\n if (fields490.length <= fields8XX.length) {\n // Trace found for each field 490:\n fields490.forEach(f => {\n f.ind1 = '1'; // eslint-disable-line functional/immutable-data\n });\n return;\n }\n if (fields8XX.length === 0) { // Fields 490 are always untraced (no traces found)\n fields490.forEach(f => {\n f.ind1 = '0'; // eslint-disable-line functional/immutable-data\n });\n return;\n }\n // For other combinations we just can't be sure, so leave them as they are.\n}\n\n\nfunction getLanguages(record) {\n const langFields = record.get('^041$');\n\n if (langFields.length === 0) {\n return [];\n }\n\n return langFields[0].subfields.filter(sf => isRelevantSubfield(sf)).map(subfield => subfield.value);\n\n function isRelevantSubfield(subfield) {\n if (!['a', 'd', 'h'].includes(subfield.code)) {\n return false;\n }\n if (subfield.value.length !== 3) {\n return false;\n }\n // We could require /^[a-z][a-z][a-z]$/ etc as well, but it's not really that relevant.\n return true;\n }\n\n}\n\nexport function recordNormalizeIndicators(record) {\n recordNormalize490(record);\n\n // Language is used to handle non-filing indicators\n const languages = getLanguages(record);\n\n record.fields.forEach(field => fieldNormalizeIndicators(field, record, languages));\n\n}\n\nfunction fieldNormalizeIndicators(field, record, languages) {\n normalize084Indicator1(field);\n normalize245Indicator1(field, record);\n normalizeNonFilingIndicator1(field, languages);\n normalizeNonFilingIndicator2(field, languages);\n normalize776Indicator2(field);\n}\n"],"mappings":"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","ignoreList":[]}
@@ -6,7 +6,7 @@ var _indicatorFixes = _interopRequireDefault(require("./indicator-fixes"));
6
6
  var _fixura = require("@natlibfi/fixura");
7
7
  var _fixugen = _interopRequireDefault(require("@natlibfi/fixugen"));
8
8
  var _debug = _interopRequireDefault(require("debug"));
9
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
10
  (0, _fixugen.default)({
11
11
  callback,
12
12
  path: [__dirname, '..', 'test-fixtures', 'indicator-fixes'],
@@ -1 +1 @@
1
- {"version":3,"file":"indicator-fixes.spec.js","names":["_chai","require","_marcRecord","_indicatorFixes","_interopRequireDefault","_fixura","_fixugen","_debug","obj","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","debug","createDebugLogger","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","getFixture","enabled","fix","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/indicator-fixes.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './indicator-fixes';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\nimport createDebugLogger from 'debug';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'indicator-fixes'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/indicator-fixes:test');\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n}\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 expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,eAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AACA,IAAAM,MAAA,GAAAH,sBAAA,CAAAH,OAAA;AAAsC,SAAAG,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEtC,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,iBAAiB,CAAC;EAC3DC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AACF,MAAMC,KAAK,GAAG,IAAAC,cAAiB,EAAC,+DAA+D,CAAC;AAEhG,eAAeF,oBAAoBA,CAAA,EAAG;EACpC,MAAMG,SAAS,GAAG,MAAM,IAAAC,uBAAgB,EAAC,CAAC;EAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAChD;AAEA,eAAezB,QAAQA,CAAC;EAAC2B,UAAU;EAAEC,OAAO,GAAG,IAAI;EAAEC,GAAG,GAAG;AAAK,CAAC,EAAE;EACjE,IAAID,OAAO,KAAK,KAAK,EAAE;IACrBhB,KAAK,CAAC,eAAe,CAAC;IACtB;EACF;EAEA,MAAME,SAAS,GAAG,MAAM,IAAAC,uBAAgB,EAAC,CAAC;EAC1C,MAAMe,MAAM,GAAG,IAAIC,sBAAU,CAACJ,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMK,cAAc,GAAGL,UAAU,CAAC,qBAAqB,CAAC;EACxD;;EAEA,IAAI,CAACE,GAAG,EAAE;IACR,MAAMI,MAAM,GAAG,MAAMnB,SAAS,CAACY,QAAQ,CAACI,MAAM,CAAC;IAC/C,IAAAd,YAAM,EAACiB,MAAM,CAAC,CAAChB,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMlB,SAAS,CAACe,GAAG,CAACC,MAAM,CAAC;EAC3B,IAAAd,YAAM,EAACc,MAAM,CAAC,CAACb,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;AACvC","ignoreList":[]}
1
+ {"version":3,"file":"indicator-fixes.spec.js","names":["_chai","require","_marcRecord","_indicatorFixes","_interopRequireDefault","_fixura","_fixugen","_debug","e","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","debug","createDebugLogger","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","getFixture","enabled","fix","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/indicator-fixes.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './indicator-fixes';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\nimport createDebugLogger from 'debug';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'indicator-fixes'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/indicator-fixes:test');\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n}\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 expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,eAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AACA,IAAAM,MAAA,GAAAH,sBAAA,CAAAH,OAAA;AAAsC,SAAAG,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEtC,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,iBAAiB,CAAC;EAC3DC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AACF,MAAMC,KAAK,GAAG,IAAAC,cAAiB,EAAC,+DAA+D,CAAC;AAEhG,eAAeF,oBAAoBA,CAAA,EAAG;EACpC,MAAMG,SAAS,GAAG,MAAM,IAAAC,uBAAgB,EAAC,CAAC;EAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAChD;AAEA,eAAezB,QAAQA,CAAC;EAAC2B,UAAU;EAAEC,OAAO,GAAG,IAAI;EAAEC,GAAG,GAAG;AAAK,CAAC,EAAE;EACjE,IAAID,OAAO,KAAK,KAAK,EAAE;IACrBhB,KAAK,CAAC,eAAe,CAAC;IACtB;EACF;EAEA,MAAME,SAAS,GAAG,MAAM,IAAAC,uBAAgB,EAAC,CAAC;EAC1C,MAAMe,MAAM,GAAG,IAAIC,sBAAU,CAACJ,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMK,cAAc,GAAGL,UAAU,CAAC,qBAAqB,CAAC;EACxD;;EAEA,IAAI,CAACE,GAAG,EAAE;IACR,MAAMI,MAAM,GAAG,MAAMnB,SAAS,CAACY,QAAQ,CAACI,MAAM,CAAC;IAC/C,IAAAd,YAAM,EAACiB,MAAM,CAAC,CAAChB,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMlB,SAAS,CAACe,GAAG,CAACC,MAAM,CAAC;EAC3B,IAAAd,YAAM,EAACc,MAAM,CAAC,CAACb,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;AACvC","ignoreList":[]}
package/dist/isbn-issn.js CHANGED
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _isbn = _interopRequireDefault(require("isbn3"));
8
8
  var _issnVerify = _interopRequireDefault(require("@natlibfi/issn-verify"));
9
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
10
  // handleInvalid: move invalid 020$a to 020$z, and invalid 022$a to 022$y
11
11
  var _default = ({
12
12
  hyphenateISBN = false,
@@ -1 +1 @@
1
- {"version":3,"file":"isbn-issn.js","names":["_isbn","_interopRequireDefault","require","_issnVerify","obj","__esModule","default","_default","hyphenateISBN","handleInvalid","validate","fix","description","stringHasSpace","str","indexOf","trimSpaces","value","replace","isMultiWord","inputString","trimmedString","getFirstWord","arr","split","invalidISBN","isbn","isbnOnly","auditedIsbn","ISBN","audit","validIsbn","invalidSubfield","subfield","code","invalidField020","field","subfields","some","sf","subfieldsIsbnRequiresHyphenation","includes","requiresHyphenation","isbn2","parsedIsbn","parse","isbn10h","isbn13h","getRelevantFields","record","fields","filter","tag","fieldsIsbnRequiresHyphenation","invalidField022","find","validateISSN","subfieldAorL","undefined","subfieldY","length","valid","map","subfieldA","name","subfieldZ","getISSN","reduce","acc","msg","messages","concat","forEach","fixField020Subfield","push","removeSubfield","split020A","addHyphens","handleInvalidIsbn","normalizedValue","normalizeIsbnValue","head","position","tail","substring","trimmedValue","auditResult","numbersOnly","isbn10","isbn13","exports"],"sources":["../src/isbn-issn.js"],"sourcesContent":["import ISBN from 'isbn3';\nimport validateISSN from '@natlibfi/issn-verify';\n\n// handleInvalid: move invalid 020$a to 020$z, and invalid 022$a to 022$y\nexport default ({hyphenateISBN = false, handleInvalid = false} = {}) => {\n return {\n validate, fix,\n description: 'Validates ISBN and ISSN values'\n };\n\n function stringHasSpace(str) {\n return str.indexOf(' ') > -1;\n }\n\n function trimSpaces(value) {\n return value.replace(/^\\s+/u, '').replace(/\\s+$/u, '').replace(/\\s+/gu, ' ');\n }\n\n function isMultiWord(inputString) {\n const trimmedString = trimSpaces(inputString);\n return stringHasSpace(trimmedString);\n }\n\n function getFirstWord(inputString) {\n const trimmedString = trimSpaces(inputString);\n const arr = trimmedString.split(' ');\n return arr[0];\n }\n\n function invalidISBN(isbn) {\n const isbnOnly = getFirstWord(isbn);\n const auditedIsbn = ISBN.audit(isbnOnly);\n return !auditedIsbn.validIsbn;\n }\n\n function invalidSubfield(subfield) {\n if (subfield.code !== 'a') {\n return false;\n }\n return invalidISBN(subfield.value) || isMultiWord(subfield.value);\n }\n\n\n function invalidField020(field) {\n if (field.subfields && field.subfields.some(sf => invalidSubfield(sf))) {\n return true;\n }\n return false;\n }\n\n function subfieldsIsbnRequiresHyphenation(subfield) {\n if (!hyphenateISBN || !['a', 'z'].includes(subfield.code)) {\n return false;\n }\n\n const isbn = getFirstWord(subfield.value);\n if (subfield.code === 'a') {\n return requiresHyphenation(isbn);\n }\n\n // $z is a bit hacky: hyphenation is required only iff valid and no '-' chars\n if (isbn.indexOf('-') > -1) {\n return false;\n }\n return !invalidISBN(isbn);\n\n function requiresHyphenation(isbn) {\n if (!hyphenateISBN) {\n return false;\n }\n // Handle old notation such as \"978-952-396-001-5 (nid.)\"\n const isbn2 = getFirstWord(isbn);\n\n if (invalidISBN(isbn2)) {\n return false;\n }\n\n const parsedIsbn = ISBN.parse(isbn2);\n // Return true only if existing ISBN is a valid and hyphenated 10 or 13 digit ISBN:\n return !(isbn2 === parsedIsbn.isbn10h || isbn2 === parsedIsbn.isbn13h);\n }\n }\n\n function getRelevantFields(record) {\n //return record.get(/^(?:020|022)$/u).filter(field => {\n return record.fields.filter(field => {\n if (!field.subfields) {\n return false;\n }\n // Check ISBN:\n if (field.tag === '020') {\n if (invalidField020(field)) { // checks multiwordness\n return true;\n }\n return fieldsIsbnRequiresHyphenation(field);\n }\n\n // Check ISSN:\n if (field.tag === '022') {\n if (invalidField022(field)) {\n return true;\n }\n\n const subfield = field.subfields.find(sf => sf.code === 'a' || sf.code === 'l');\n\n return !validateISSN(subfield.value);\n }\n return false;\n });\n\n function fieldsIsbnRequiresHyphenation(field) {\n return field.subfields && field.subfields.some(sf => subfieldsIsbnRequiresHyphenation(sf));\n }\n\n function invalidField022(field) {\n const subfieldAorL = field.subfields.find(sf => sf.code === 'a' || sf.code === 'l');\n\n if (subfieldAorL === undefined) {\n const subfieldY = field.subfields.find(sf => sf.code === 'y');\n if (subfieldY) {\n return false;\n }\n\n return true;\n }\n return false;\n }\n }\n\n function validate(record) {\n const fields = getRelevantFields(record);\n\n if (fields.length === 0) {\n return {valid: true};\n }\n\n return fields\n .map(field => {\n if (field.tag === '020') {\n const subfieldA = field.subfields.find(sf => sf.code === 'a');\n if (subfieldA) {\n return {name: 'ISBN', value: subfieldA.value};\n }\n const subfieldZ = field.subfields.find(sf => sf.code === 'z');\n if (subfieldZ) {\n return {name: 'ISBN (subfield Z)', value: subfieldZ.value};\n }\n\n return {name: 'ISBN', value: undefined};\n }\n\n return {name: 'ISSN', value: getISSN()};\n\n function getISSN() {\n const subfieldAorL = field.subfields.find(sf => sf.code === 'a' || sf.code === 'l');\n\n if (subfieldAorL) {\n return subfieldAorL.value;\n }\n\n return undefined;\n }\n })\n .reduce((acc, obj) => {\n const {name, value} = obj;\n const msg = `${name} (${value}) is not valid`;\n\n return {...acc, messages: acc.messages.concat(msg)};\n }, {valid: false, messages: []});\n }\n\n\n function fix(record) {\n getRelevantFields(record).forEach(field => {\n if (field.tag === '020') {\n field.subfields.forEach(subfield => fixField020Subfield(field, subfield));\n return;\n }\n // 022 ISSN:\n const subfield = field.subfields.find(sf => sf.code === 'a' || sf.code === 'l');\n if (subfield && handleInvalid) { // eslint-disable-line functional/no-conditional-statements\n // $a/$l => $y (bit overkill to add $z and remove $a/$l instead of just renaming)\n field.subfields.push({code: 'y', value: subfield.value}); // eslint-disable-line functional/immutable-data\n record.removeSubfield(subfield, field);\n }\n });\n\n\n function fixField020Subfield(field, subfield) {\n split020A(); // subfield and field are in the scope\n addHyphens(subfield);\n handleInvalidIsbn(field, subfield); // remove 020$a, add 020$z, Do this last, as it uses deletion\n return;\n\n function addHyphens(subfield) {\n if (!subfieldsIsbnRequiresHyphenation(subfield)) {\n return;\n }\n // ISBN is valid but is missing hyphens\n const normalizedValue = normalizeIsbnValue(subfield.value);\n if (normalizedValue !== undefined) { // eslint-disable-line functional/no-conditional-statements\n subfield.value = normalizedValue; // eslint-disable-line functional/immutable-data\n }\n }\n\n function handleInvalidIsbn(field, subfield) {\n if (subfield.code !== 'a' || !handleInvalid) {\n return;\n }\n const head = getFirstWord(subfield.value);\n if (!invalidISBN(head)) {\n return;\n }\n // $a => $z (bit overkill to add $z and remove $a instead of just renaming, but too lazy to fix/test thorougly)\n field.subfields.push({code: 'z', value: subfield.value}); // eslint-disable-line functional/immutable-data\n record.removeSubfield(subfield, field);\n }\n\n function split020A() {\n // Move non-initial words from $a to $q:\n if (subfield.code !== 'a') {\n return;\n }\n const value = trimSpaces(subfield.value);\n const position = value.indexOf(' ');\n if (position === -1) {\n return;\n }\n const head = getFirstWord(value);\n if (invalidISBN(head)) { // Don't split, if first word ain't ISBN\n return;\n }\n const tail = value.substring(position + 1);\n subfield.value = head; // eslint-disable-line functional/immutable-data\n field.subfields.push({code: 'q', value: tail}); // eslint-disable-line functional/immutable-data\n }\n\n function normalizeIsbnValue(value) {\n const trimmedValue = getFirstWord(value);\n //const trimmedValue = trimISBN(value); // NB! This might lose information that should be stored in $q...\n const auditResult = ISBN.audit(trimmedValue);\n if (!auditResult.validIsbn) {\n return undefined;\n }\n const numbersOnly = trimmedValue.replace(/[^0-9Xx]+/ug, '');\n const parsedIsbn = ISBN.parse(trimmedValue);\n if (hyphenateISBN) { // eslint-disable-line functional/no-conditional-statements\n return numbersOnly.length === 10 ? parsedIsbn.isbn10h : parsedIsbn.isbn13h; // eslint-disable-line functional/immutable-data\n }\n return numbersOnly.length === 10 ? parsedIsbn.isbn10 : parsedIsbn.isbn13; // eslint-disable-line functional/immutable-data\n }\n }\n }\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"isbn-issn.js","names":["_isbn","_interopRequireDefault","require","_issnVerify","e","__esModule","default","_default","hyphenateISBN","handleInvalid","validate","fix","description","stringHasSpace","str","indexOf","trimSpaces","value","replace","isMultiWord","inputString","trimmedString","getFirstWord","arr","split","invalidISBN","isbn","isbnOnly","auditedIsbn","ISBN","audit","validIsbn","invalidSubfield","subfield","code","invalidField020","field","subfields","some","sf","subfieldsIsbnRequiresHyphenation","includes","requiresHyphenation","isbn2","parsedIsbn","parse","isbn10h","isbn13h","getRelevantFields","record","fields","filter","tag","fieldsIsbnRequiresHyphenation","invalidField022","find","validateISSN","subfieldAorL","undefined","subfieldY","length","valid","map","subfieldA","name","subfieldZ","getISSN","reduce","acc","obj","msg","messages","concat","forEach","fixField020Subfield","push","removeSubfield","split020A","addHyphens","handleInvalidIsbn","normalizedValue","normalizeIsbnValue","head","position","tail","substring","trimmedValue","auditResult","numbersOnly","isbn10","isbn13","exports"],"sources":["../src/isbn-issn.js"],"sourcesContent":["import ISBN from 'isbn3';\nimport validateISSN from '@natlibfi/issn-verify';\n\n// handleInvalid: move invalid 020$a to 020$z, and invalid 022$a to 022$y\nexport default ({hyphenateISBN = false, handleInvalid = false} = {}) => {\n return {\n validate, fix,\n description: 'Validates ISBN and ISSN values'\n };\n\n function stringHasSpace(str) {\n return str.indexOf(' ') > -1;\n }\n\n function trimSpaces(value) {\n return value.replace(/^\\s+/u, '').replace(/\\s+$/u, '').replace(/\\s+/gu, ' ');\n }\n\n function isMultiWord(inputString) {\n const trimmedString = trimSpaces(inputString);\n return stringHasSpace(trimmedString);\n }\n\n function getFirstWord(inputString) {\n const trimmedString = trimSpaces(inputString);\n const arr = trimmedString.split(' ');\n return arr[0];\n }\n\n function invalidISBN(isbn) {\n const isbnOnly = getFirstWord(isbn);\n const auditedIsbn = ISBN.audit(isbnOnly);\n return !auditedIsbn.validIsbn;\n }\n\n function invalidSubfield(subfield) {\n if (subfield.code !== 'a') {\n return false;\n }\n return invalidISBN(subfield.value) || isMultiWord(subfield.value);\n }\n\n\n function invalidField020(field) {\n if (field.subfields && field.subfields.some(sf => invalidSubfield(sf))) {\n return true;\n }\n return false;\n }\n\n function subfieldsIsbnRequiresHyphenation(subfield) {\n if (!hyphenateISBN || !['a', 'z'].includes(subfield.code)) {\n return false;\n }\n\n const isbn = getFirstWord(subfield.value);\n if (subfield.code === 'a') {\n return requiresHyphenation(isbn);\n }\n\n // $z is a bit hacky: hyphenation is required only iff valid and no '-' chars\n if (isbn.indexOf('-') > -1) {\n return false;\n }\n return !invalidISBN(isbn);\n\n function requiresHyphenation(isbn) {\n if (!hyphenateISBN) {\n return false;\n }\n // Handle old notation such as \"978-952-396-001-5 (nid.)\"\n const isbn2 = getFirstWord(isbn);\n\n if (invalidISBN(isbn2)) {\n return false;\n }\n\n const parsedIsbn = ISBN.parse(isbn2);\n // Return true only if existing ISBN is a valid and hyphenated 10 or 13 digit ISBN:\n return !(isbn2 === parsedIsbn.isbn10h || isbn2 === parsedIsbn.isbn13h);\n }\n }\n\n function getRelevantFields(record) {\n //return record.get(/^(?:020|022)$/u).filter(field => {\n return record.fields.filter(field => {\n if (!field.subfields) {\n return false;\n }\n // Check ISBN:\n if (field.tag === '020') {\n if (invalidField020(field)) { // checks multiwordness\n return true;\n }\n return fieldsIsbnRequiresHyphenation(field);\n }\n\n // Check ISSN:\n if (field.tag === '022') {\n if (invalidField022(field)) {\n return true;\n }\n\n const subfield = field.subfields.find(sf => sf.code === 'a' || sf.code === 'l');\n\n return !validateISSN(subfield.value);\n }\n return false;\n });\n\n function fieldsIsbnRequiresHyphenation(field) {\n return field.subfields && field.subfields.some(sf => subfieldsIsbnRequiresHyphenation(sf));\n }\n\n function invalidField022(field) {\n const subfieldAorL = field.subfields.find(sf => sf.code === 'a' || sf.code === 'l');\n\n if (subfieldAorL === undefined) {\n const subfieldY = field.subfields.find(sf => sf.code === 'y');\n if (subfieldY) {\n return false;\n }\n\n return true;\n }\n return false;\n }\n }\n\n function validate(record) {\n const fields = getRelevantFields(record);\n\n if (fields.length === 0) {\n return {valid: true};\n }\n\n return fields\n .map(field => {\n if (field.tag === '020') {\n const subfieldA = field.subfields.find(sf => sf.code === 'a');\n if (subfieldA) {\n return {name: 'ISBN', value: subfieldA.value};\n }\n const subfieldZ = field.subfields.find(sf => sf.code === 'z');\n if (subfieldZ) {\n return {name: 'ISBN (subfield Z)', value: subfieldZ.value};\n }\n\n return {name: 'ISBN', value: undefined};\n }\n\n return {name: 'ISSN', value: getISSN()};\n\n function getISSN() {\n const subfieldAorL = field.subfields.find(sf => sf.code === 'a' || sf.code === 'l');\n\n if (subfieldAorL) {\n return subfieldAorL.value;\n }\n\n return undefined;\n }\n })\n .reduce((acc, obj) => {\n const {name, value} = obj;\n const msg = `${name} (${value}) is not valid`;\n\n return {...acc, messages: acc.messages.concat(msg)};\n }, {valid: false, messages: []});\n }\n\n\n function fix(record) {\n getRelevantFields(record).forEach(field => {\n if (field.tag === '020') {\n field.subfields.forEach(subfield => fixField020Subfield(field, subfield));\n return;\n }\n // 022 ISSN:\n const subfield = field.subfields.find(sf => sf.code === 'a' || sf.code === 'l');\n if (subfield && handleInvalid) { // eslint-disable-line functional/no-conditional-statements\n // $a/$l => $y (bit overkill to add $z and remove $a/$l instead of just renaming)\n field.subfields.push({code: 'y', value: subfield.value}); // eslint-disable-line functional/immutable-data\n record.removeSubfield(subfield, field);\n }\n });\n\n\n function fixField020Subfield(field, subfield) {\n split020A(); // subfield and field are in the scope\n addHyphens(subfield);\n handleInvalidIsbn(field, subfield); // remove 020$a, add 020$z, Do this last, as it uses deletion\n return;\n\n function addHyphens(subfield) {\n if (!subfieldsIsbnRequiresHyphenation(subfield)) {\n return;\n }\n // ISBN is valid but is missing hyphens\n const normalizedValue = normalizeIsbnValue(subfield.value);\n if (normalizedValue !== undefined) { // eslint-disable-line functional/no-conditional-statements\n subfield.value = normalizedValue; // eslint-disable-line functional/immutable-data\n }\n }\n\n function handleInvalidIsbn(field, subfield) {\n if (subfield.code !== 'a' || !handleInvalid) {\n return;\n }\n const head = getFirstWord(subfield.value);\n if (!invalidISBN(head)) {\n return;\n }\n // $a => $z (bit overkill to add $z and remove $a instead of just renaming, but too lazy to fix/test thorougly)\n field.subfields.push({code: 'z', value: subfield.value}); // eslint-disable-line functional/immutable-data\n record.removeSubfield(subfield, field);\n }\n\n function split020A() {\n // Move non-initial words from $a to $q:\n if (subfield.code !== 'a') {\n return;\n }\n const value = trimSpaces(subfield.value);\n const position = value.indexOf(' ');\n if (position === -1) {\n return;\n }\n const head = getFirstWord(value);\n if (invalidISBN(head)) { // Don't split, if first word ain't ISBN\n return;\n }\n const tail = value.substring(position + 1);\n subfield.value = head; // eslint-disable-line functional/immutable-data\n field.subfields.push({code: 'q', value: tail}); // eslint-disable-line functional/immutable-data\n }\n\n function normalizeIsbnValue(value) {\n const trimmedValue = getFirstWord(value);\n //const trimmedValue = trimISBN(value); // NB! This might lose information that should be stored in $q...\n const auditResult = ISBN.audit(trimmedValue);\n if (!auditResult.validIsbn) {\n return undefined;\n }\n const numbersOnly = trimmedValue.replace(/[^0-9Xx]+/ug, '');\n const parsedIsbn = ISBN.parse(trimmedValue);\n if (hyphenateISBN) { // eslint-disable-line functional/no-conditional-statements\n return numbersOnly.length === 10 ? parsedIsbn.isbn10h : parsedIsbn.isbn13h; // eslint-disable-line functional/immutable-data\n }\n return numbersOnly.length === 10 ? parsedIsbn.isbn10 : parsedIsbn.isbn13; // eslint-disable-line functional/immutable-data\n }\n }\n }\n};\n"],"mappings":"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","ignoreList":[]}
@@ -3,7 +3,7 @@
3
3
  var _chai = require("chai");
4
4
  var _marcRecord = require("@natlibfi/marc-record");
5
5
  var _isbnIssn = _interopRequireDefault(require("../src/isbn-issn"));
6
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
6
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
7
7
  describe('isbn-issn', () => {
8
8
  it('Creates a validator', async () => {
9
9
  const validator = await (0, _isbnIssn.default)();