@natlibfi/marc-record-validators-melinda 10.16.0 → 10.16.1-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/dist/access-rights.js.map +1 -1
  2. package/dist/access-rights.spec.js.map +1 -1
  3. package/dist/double-commas.js.map +1 -1
  4. package/dist/double-commas.spec.js.map +1 -1
  5. package/dist/duplicates-ind1.js.map +1 -1
  6. package/dist/duplicates-ind1.spec.js.map +1 -1
  7. package/dist/empty-fields.js.map +1 -1
  8. package/dist/empty-fields.spec.js.map +1 -1
  9. package/dist/ending-punctuation-conf.js.map +1 -1
  10. package/dist/ending-punctuation.js.map +1 -1
  11. package/dist/ending-punctuation.spec.js.map +1 -1
  12. package/dist/ending-whitespace.js.map +1 -1
  13. package/dist/ending-whitespace.spec.js.map +1 -1
  14. package/dist/field-008-18-34-character-groups.js.map +1 -1
  15. package/dist/field-008-18-34-character-groups.spec.js.map +1 -1
  16. package/dist/field-505-separators.js.map +1 -1
  17. package/dist/field-505-separators.spec.js.map +1 -1
  18. package/dist/field-521-fix.js.map +1 -1
  19. package/dist/field-521-fix.spec.js.map +1 -1
  20. package/dist/field-exclusion.js.map +1 -1
  21. package/dist/field-exclusion.spec.js.map +1 -1
  22. package/dist/field-structure.js.map +1 -1
  23. package/dist/field-structure.spec.js.map +1 -1
  24. package/dist/fields-present.js.map +1 -1
  25. package/dist/fields-present.spec.js.map +1 -1
  26. package/dist/fix-country-codes.js.map +1 -1
  27. package/dist/fix-country-codes.spec.js.map +1 -1
  28. package/dist/fixRelatorTerms.js.map +1 -1
  29. package/dist/fixRelatorTerms.spec.js.map +1 -1
  30. package/dist/fixed-fields.js.map +1 -1
  31. package/dist/fixed-fields.spec.js.map +1 -1
  32. package/dist/identical-fields.js.map +1 -1
  33. package/dist/identical-fields.spec.js.map +1 -1
  34. package/dist/index.js.map +1 -1
  35. package/dist/indicator-fixes.js.map +1 -1
  36. package/dist/indicator-fixes.spec.js.map +1 -1
  37. package/dist/isbn-issn.js.map +1 -1
  38. package/dist/isbn-issn.spec.js.map +1 -1
  39. package/dist/item-language.js.map +1 -1
  40. package/dist/item-language.spec.js.map +1 -1
  41. package/dist/mergeField500Lisapainokset.js.map +1 -1
  42. package/dist/mergeField500Lisapainokset.spec.js.map +1 -1
  43. package/dist/mergeRelatorTermFields.js.map +1 -1
  44. package/dist/mergeRelatorTermFields.spec.js.map +1 -1
  45. package/dist/multiple-subfield-0.js.map +1 -1
  46. package/dist/multiple-subfield-0.spec.js.map +1 -1
  47. package/dist/non-breaking-space.js.map +1 -1
  48. package/dist/non-breaking-space.spec.js.map +1 -1
  49. package/dist/normalize-dashes.js.map +1 -1
  50. package/dist/normalize-dashes.spec.js.map +1 -1
  51. package/dist/normalize-identifiers.js.map +1 -1
  52. package/dist/normalize-identifiers.spec.js.map +1 -1
  53. package/dist/normalize-qualifying-information.js.map +1 -1
  54. package/dist/normalize-qualifying-information.spec.js.map +1 -1
  55. package/dist/normalize-utf8-diacritics.js.map +1 -1
  56. package/dist/normalize-utf8-diacritics.spec.js.map +1 -1
  57. package/dist/normalizeFieldForComparison.js.map +1 -1
  58. package/dist/normalizeSubfieldValueForComparison.js.map +1 -1
  59. package/dist/prepublicationUtils.js.map +1 -1
  60. package/dist/punctuation/index.js.map +1 -1
  61. package/dist/punctuation/rules/aut.js.map +1 -1
  62. package/dist/punctuation/rules/bib.js.map +1 -1
  63. package/dist/punctuation/rules/index.js.map +1 -1
  64. package/dist/punctuation.spec.js.map +1 -1
  65. package/dist/punctuation2.js +131 -89
  66. package/dist/punctuation2.js.map +1 -1
  67. package/dist/punctuation2.spec.js.map +1 -1
  68. package/dist/reindexSubfield6OccurenceNumbers.js.map +1 -1
  69. package/dist/reindexSubfield6OccurenceNumbers.spec.js.map +1 -1
  70. package/dist/removeDuplicateDataFields.js.map +1 -1
  71. package/dist/removeDuplicateDataFields.spec.js.map +1 -1
  72. package/dist/removeInferiorDataFields.js.map +1 -1
  73. package/dist/removeInferiorDataFields.spec.js.map +1 -1
  74. package/dist/resolvable-ext-references-melinda.js.map +1 -1
  75. package/dist/resolvable-ext-references-melinda.spec.js.map +1 -1
  76. package/dist/resolveOrphanedSubfield6s.js.map +1 -1
  77. package/dist/resolveOrphanedSubfield6s.spec.js.map +1 -1
  78. package/dist/sanitize-vocabulary-source-codes.js.map +1 -1
  79. package/dist/sanitize-vocabulary-source-codes.spec.js.map +1 -1
  80. package/dist/sort-tags.js.map +1 -1
  81. package/dist/sort-tags.spec.js.map +1 -1
  82. package/dist/sortFields.js.map +1 -1
  83. package/dist/sortFields.spec.js.map +1 -1
  84. package/dist/sortRelatorTerms.js.map +1 -1
  85. package/dist/sortRelatorTerms.spec.js.map +1 -1
  86. package/dist/sortSubfields.js.map +1 -1
  87. package/dist/sortSubfields.spec.js.map +1 -1
  88. package/dist/stripPunctuation.js.map +1 -1
  89. package/dist/stripPunctuation.spec.js.map +1 -1
  90. package/dist/subfield-exclusion.js.map +1 -1
  91. package/dist/subfield-exclusion.spec.js.map +1 -1
  92. package/dist/subfield6Utils.js.map +1 -1
  93. package/dist/subfield8Utils.js.map +1 -1
  94. package/dist/subfieldValueNormalizations.js +28 -8
  95. package/dist/subfieldValueNormalizations.js.map +1 -1
  96. package/dist/subfieldValueNormalizations.spec.js.map +1 -1
  97. package/dist/sync-007-and-300.js.map +1 -1
  98. package/dist/sync-007-and-300.spec.js.map +1 -1
  99. package/dist/typeOfDate-008.js.map +1 -1
  100. package/dist/typeOfDate-008.spec.js.map +1 -1
  101. package/dist/unicode-decomposition.js.map +1 -1
  102. package/dist/unicode-decomposition.spec.js.map +1 -1
  103. package/dist/update-field-540.js.map +1 -1
  104. package/dist/update-field-540.spec.js.map +1 -1
  105. package/dist/urn.js.map +1 -1
  106. package/dist/urn.spec.js.map +1 -1
  107. package/dist/utils.js.map +1 -1
  108. package/package.json +6 -6
  109. package/src/punctuation2.js +103 -56
  110. package/src/subfieldValueNormalizations.js +32 -9
  111. package/test-fixtures/normalize-subfield-value/03/expectedResult.json +26 -0
  112. package/test-fixtures/normalize-subfield-value/03/metadata.json +6 -0
  113. package/test-fixtures/normalize-subfield-value/03/record.json +25 -0
  114. package/test-fixtures/normalize-subfield-value/100_and_880/expectedResult.json +22 -0
  115. package/test-fixtures/normalize-subfield-value/100_and_880/metadata.json +5 -0
  116. package/test-fixtures/normalize-subfield-value/100_and_880/record.json +20 -0
  117. package/test-fixtures/punctuation2/100_and_880/expectedResult.json +22 -0
  118. package/test-fixtures/punctuation2/100_and_880/metadata.json +6 -0
  119. package/test-fixtures/punctuation2/100_and_880/record.json +20 -0
  120. package/test-fixtures/punctuation2/240/expectedResult.json +12 -0
  121. package/test-fixtures/punctuation2/240/metadata.json +6 -0
  122. package/test-fixtures/punctuation2/240/record.json +10 -0
  123. package/test-fixtures/punctuation2/800/expectedResult.json +15 -0
  124. package/test-fixtures/punctuation2/800/metadata.json +6 -0
  125. package/test-fixtures/punctuation2/800/record.json +14 -0
  126. package/test-fixtures/strip-punctuation/100_and_880/expectedResult.json +37 -0
  127. package/test-fixtures/strip-punctuation/100_and_880/metadata.json +5 -0
  128. package/test-fixtures/strip-punctuation/100_and_880/record.json +35 -0
  129. package/test-fixtures/strip-punctuation/240/expectedResult.json +16 -0
  130. package/test-fixtures/strip-punctuation/240/metadata.json +6 -0
  131. package/test-fixtures/strip-punctuation/240/record.json +14 -0
@@ -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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"}
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":[]}
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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"}
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 +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","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 }\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\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\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 (subfield.code !== 'a' && subfield.code !== 'd') {\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}\n"],"mappings":";;;;;;;AAIA,IAAAA,MAAA,GAAAC,OAAA;AAJA;AACA;AACA;;AAKe,SAAAC,SAAA,EAAY;EAEzB,OAAO;IACLC,WAAW,EAAE,6BAA6B;IAC1CC,QAAQ;IAAEC;EACZ,CAAC;EAED,SAASA,GAAGA,CAACC,MAAM,EAAE;IACnB,MAAMC,GAAG,GAAG;MAACC,OAAO,EAAE,EAAE;MAAEH,GAAG,EAAE,EAAE;MAAEI,KAAK,EAAE;IAAI,CAAC;IAE/CC,yBAAyB,CAACJ,MAAM,CAAC;IAEjC,OAAOC,GAAG;EACZ;EAEA,SAASH,QAAQA,CAACE,MAAM,EAAE;IACxB,MAAMC,GAAG,GAAG;MAACC,OAAO,EAAE;IAAE,CAAC;IAEzBG,cAAc,CAACL,MAAM,EAAEC,GAAG,CAAC;IAE3BA,GAAG,CAACE,KAAK,GAAGF,GAAG,CAACC,OAAO,CAACI,MAAM,GAAG,CAAC,CAAC,CAAC;IACpC,OAAOL,GAAG;EACZ;EAGA,SAASI,cAAcA,CAACL,MAAM,EAAEC,GAAG,EAAE;IACnC;IACA,MAAMM,YAAY,GAAGC,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,SAAS,CAACV,MAAM,CAACW,MAAM,CAAC,CAAC;IAC9DP,yBAAyB,CAACJ,MAAM,CAAC;IAEjCA,MAAM,CAACW,MAAM,CAACC,OAAO,CAAC,CAACC,KAAK,EAAEC,KAAK,KAAKC,aAAa,CAACF,KAAK,EAAEC,KAAK,CAAC,CAAC;IAEpE,SAASC,aAAaA,CAACF,KAAK,EAAEC,KAAK,EAAE;MACnC,MAAME,iBAAiB,GAAG,IAAAC,oBAAa,EAACV,YAAY,CAACO,KAAK,CAAC,CAAC;MAC5D;MACA,IAAIP,YAAY,CAACO,KAAK,CAAC,CAACI,IAAI,KAAKL,KAAK,CAACK,IAAI,EAAE;QAAE;QAC7C;QACAjB,GAAG,CAACC,OAAO,CAACiB,IAAI,CAAE,sBAAqBH,iBAAkB,SAAQH,KAAK,CAACK,IAAK,GAAE,CAAC,CAAC,CAAC;MACnF;MACA,IAAIX,YAAY,CAACO,KAAK,CAAC,CAACM,IAAI,KAAKP,KAAK,CAACO,IAAI,EAAE;QAAE;QAC7C;QACAnB,GAAG,CAACC,OAAO,CAACiB,IAAI,CAAE,sBAAqBH,iBAAkB,SAAQH,KAAK,CAACO,IAAK,GAAE,CAAC,CAAC,CAAC;MACnF;IACF;IACA;IACApB,MAAM,CAACW,MAAM,GAAGJ,YAAY,CAAC,CAAC;IAC9B;EACF;AACF;AAGA,MAAMc,kBAAkB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACvD,MAAMC,kBAAkB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AAErE,SAASC,sBAAsBA,CAACV,KAAK,EAAE;EACrC,OAAOQ,kBAAkB,CAACG,QAAQ,CAACX,KAAK,CAACY,GAAG,CAAC;AAC/C;AAEA,SAASC,wBAAwBA,CAACC,KAAK,EAAE;EACvC;EACA,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAACH,QAAQ,CAACG,KAAK,CAAC;AACvE;AAEA,SAASC,sBAAsBA,CAACf,KAAK,EAAE;EACrC,OAAOS,kBAAkB,CAACE,QAAQ,CAACX,KAAK,CAACY,GAAG,CAAC;AAC/C;AAEA,SAASI,yBAAyBA,CAACF,KAAK,EAAEG,KAAK,EAAE;EAC/C,OAAOA,KAAK,CAACC,IAAI,CAACC,IAAI,IAAIL,KAAK,CAACM,SAAS,CAAC,CAAC,EAAED,IAAI,CAAC1B,MAAM,CAAC,KAAK0B,IAAI,CAAC;AACrE;AAEA,SAASE,gCAAgCA,CAACrB,KAAK,EAAEsB,SAAS,GAAGC,SAAS,EAAE;EACtE,MAAMC,SAAS,GAAGxB,KAAK,CAACyB,SAAS,CAACP,IAAI,CAACQ,EAAE,IAAIA,EAAE,CAACC,IAAI,KAAK,GAAG,CAAC;EAC7D,IAAI,CAACH,SAAS,EAAE;IACd;IACA;EACF;EAEA,MAAMI,IAAI,GAAGJ,SAAS,CAACV,KAAK,CAACe,WAAW,CAAC,CAAC;EAE1C,IAAIP,SAAS,CAACX,QAAQ,CAAC,KAAK,CAAC,EAAE;IAC7B,MAAMmB,KAAK,GAAGd,yBAAyB,CAACY,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACpE,IAAIE,KAAK,EAAE;MACT,OAAQ,GAAEA,KAAK,CAACrC,MAAO,EAAC;IAC1B;EACF;EAEA,IAAI6B,SAAS,CAACX,QAAQ,CAAC,KAAK,CAAC,EAAE;IAC7B,MAAMmB,KAAK,GAAGd,yBAAyB,CAACY,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC7D,IAAIE,KAAK,EAAE;MACT,OAAQ,GAAEA,KAAK,CAACrC,MAAO,EAAC;IAC1B;EACF;EAEA,IAAI6B,SAAS,CAACX,QAAQ,CAAC,KAAK,CAAC,EAAE;IAC7B,MAAMmB,KAAK,GAAGd,yBAAyB,CAACY,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACvE,IAAIE,KAAK,EAAE;MACT,OAAQ,GAAEA,KAAK,CAACrC,MAAO,EAAC;IAC1B;EACF;EAEA,IAAI6B,SAAS,CAACX,QAAQ,CAAC,KAAK,CAAC,EAAE;IAC7B,MAAMmB,KAAK,GAAGd,yBAAyB,CAACY,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC9D,IAAIE,KAAK,EAAE;MACT,OAAQ,GAAEA,KAAK,CAACrC,MAAO,EAAC;IAC1B;EACF;;EAEA;EACA,MAAMqC,KAAK,GAAGd,yBAAyB,CAACY,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC;EACvD,IAAIE,KAAK,EAAE;IACT,OAAQ,GAAEA,KAAK,CAACrC,MAAO,EAAC;EAC1B;EAEA,OAAO,GAAG;AACZ;AAEA,SAASsC,4BAA4BA,CAAC/B,KAAK,EAAEsB,SAAS,GAAG,EAAE,EAAE;EAC3D,IAAI,CAACZ,sBAAsB,CAACV,KAAK,CAAC,IAAI,CAACa,wBAAwB,CAACb,KAAK,CAACK,IAAI,CAAC,EAAE;IAC3E;EACF;EAEAL,KAAK,CAACK,IAAI,GAAGgB,gCAAgC,CAACrB,KAAK,EAAEsB,SAAS,CAAC,CAAC,CAAC;AACnE;AAEA,SAASU,4BAA4BA,CAAChC,KAAK,EAAEsB,SAAS,GAAG,EAAE,EAAE;EAC3D,IAAI,CAACP,sBAAsB,CAACf,KAAK,CAAC,IAAI,CAACa,wBAAwB,CAACb,KAAK,CAACO,IAAI,CAAC,EAAE;IAC3E;EACF;EAEAP,KAAK,CAACO,IAAI,GAAGc,gCAAgC,CAACrB,KAAK,EAAEsB,SAAS,CAAC,CAAC,CAAC;AACnE;AAGA,SAASW,sBAAsBA,CAACjC,KAAK,EAAEb,MAAM,EAAE;EAC7C,IAAIa,KAAK,CAACY,GAAG,KAAK,KAAK,EAAE;IACvB;EACF;EACA,MAAMsB,QAAQ,GAAG/C,MAAM,CAACgD,GAAG,CAAC,OAAO,CAAC;EACpCnC,KAAK,CAACK,IAAI,GAAG6B,QAAQ,CAACzC,MAAM,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAClD;AAGA,SAAS2C,kBAAkBA,CAACjD,MAAM,EAAE;EAClC,MAAMkD,SAAS,GAAGlD,MAAM,CAACgD,GAAG,CAAC,OAAO,CAAC;EACrC,MAAMG,SAAS,GAAGnD,MAAM,CAACgD,GAAG,CAAC,uBAAuB,CAAC;EAErD,IAAIE,SAAS,CAAC5C,MAAM,KAAK,CAAC,EAAE;IAC1B;EACF;EACA,IAAI4C,SAAS,CAAC5C,MAAM,IAAI6C,SAAS,CAAC7C,MAAM,EAAE;IACxC;IACA4C,SAAS,CAACtC,OAAO,CAACwC,CAAC,IAAI;MACrBA,CAAC,CAAClC,IAAI,GAAG,GAAG,CAAC,CAAC;IAChB,CAAC,CAAC;IACF;EACF;EACA,IAAIiC,SAAS,CAAC7C,MAAM,KAAK,CAAC,EAAE;IAAE;IAC5B4C,SAAS,CAACtC,OAAO,CAACwC,CAAC,IAAI;MACrBA,CAAC,CAAClC,IAAI,GAAG,GAAG,CAAC,CAAC;IAChB,CAAC,CAAC;IACF;EACF;EACA;AACF;AAGA,SAASmC,YAAYA,CAACrD,MAAM,EAAE;EAC5B,MAAMsD,UAAU,GAAGtD,MAAM,CAACgD,GAAG,CAAC,OAAO,CAAC;EAEtC,IAAIM,UAAU,CAAChD,MAAM,KAAK,CAAC,EAAE;IAC3B,OAAO,EAAE;EACX;EAEA,OAAOgD,UAAU,CAAC,CAAC,CAAC,CAAChB,SAAS,CAACiB,MAAM,CAAChB,EAAE,IAAIiB,kBAAkB,CAACjB,EAAE,CAAC,CAAC,CAACkB,GAAG,CAACC,QAAQ,IAAIA,QAAQ,CAAC/B,KAAK,CAAC;EAEnG,SAAS6B,kBAAkBA,CAACE,QAAQ,EAAE;IACpC,IAAIA,QAAQ,CAAClB,IAAI,KAAK,GAAG,IAAIkB,QAAQ,CAAClB,IAAI,KAAK,GAAG,EAAE;MAClD,OAAO,KAAK;IACd;IACA,IAAIkB,QAAQ,CAAC/B,KAAK,CAACrB,MAAM,KAAK,CAAC,EAAE;MAC/B,OAAO,KAAK;IACd;IACA;IACA,OAAO,IAAI;EACb;AAEF;AAEO,SAASF,yBAAyBA,CAACJ,MAAM,EAAE;EAChDiD,kBAAkB,CAACjD,MAAM,CAAC;;EAE1B;EACA,MAAMmC,SAAS,GAAGkB,YAAY,CAACrD,MAAM,CAAC;EAEtCA,MAAM,CAACW,MAAM,CAACC,OAAO,CAACC,KAAK,IAAI8C,wBAAwB,CAAC9C,KAAK,EAAEb,MAAM,EAAEmC,SAAS,CAAC,CAAC;AAEpF;AAEA,SAASwB,wBAAwBA,CAAC9C,KAAK,EAAEb,MAAM,EAAEmC,SAAS,EAAE;EAC1DW,sBAAsB,CAACjC,KAAK,EAAEb,MAAM,CAAC;EACrC4C,4BAA4B,CAAC/B,KAAK,EAAEsB,SAAS,CAAC;EAC9CU,4BAA4B,CAAChC,KAAK,EAAEsB,SAAS,CAAC;AAChD"}
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","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 }\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\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\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 (subfield.code !== 'a' && subfield.code !== 'd') {\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}\n"],"mappings":"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","ignoreList":[]}
@@ -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"}
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 +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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"}
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 +1 @@
1
- {"version":3,"file":"isbn-issn.spec.js","names":["_chai","require","_marcRecord","_isbnIssn","_interopRequireDefault","obj","__esModule","default","describe","it","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","hyphenateISBN","record","MarcRecord","fields","tag","ind1","ind2","subfields","code","value","result","eql","valid","messages","skip","handleInvalid","fix"],"sources":["../src/isbn-issn.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/isbn-issn';\n\ndescribe('isbn-issn', () => {\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({hyphenateISBN: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '978-600-377-017-1'}]\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '90-6831-372-X'}]\n },\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '978-600-377-017-1'}]},\n {\n tag: '022',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '0355-0893'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true});\n });\n\n it('Finds the record invalid', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'foo'}]\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '90-68-31-372-X'}] // contains an extra hyphen\n },\n {\n tag: '022',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'bar'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({\n valid: false, messages: [\n 'ISBN (foo) is not valid',\n 'ISSN (bar) is not valid'\n ]\n });\n });\n\n it('020 field without $a and $z is ok in this context (= no invalid ISBNs)', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'q', value: 'nidottu'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({\n valid: true\n });\n });\n\n it('Finds the invalid 022 field', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '022',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'z', value: '0000-0000'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({\n valid: false, messages: ['ISSN (undefined) is not valid']\n });\n });\n\n it('Finds the record invalid (reason: multiword)', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '978-600-377-017-1 (nid.)'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false, messages: ['ISBN (978-600-377-017-1 (nid.)) is not valid']});\n });\n\n it('Finds the record invalid (ISSN in \\'l\\'-subfield)', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'foo'}]\n },\n {\n tag: '022',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'l', value: 'bar'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({\n valid: false, messages: [\n 'ISBN (foo) is not valid',\n 'ISSN (bar) is not valid'\n ]\n });\n });\n\n it('Finds the record invalid (valid ISBN without hyphens)', async () => {\n const validator = await validatorFactory({hyphenateISBN: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '9789519155470'}]\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '9068-31-372-X'}] // legal digits, but bad hyphenation\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '386006004X'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false, messages: [\n 'ISBN (9789519155470) is not valid',\n 'ISBN (9068-31-372-X) is not valid',\n 'ISBN (386006004X) is not valid'\n ]});\n });\n\n it.skip('Finds the record invalid (Missing ISBN)');\n it.skip('Finds the record invalid (Missing ISSN)');\n });\n\n describe('#fix', () => {\n it('Moves invalid ISBN to z-subfield', async () => {\n const validator = await validatorFactory({handleInvalid: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '020', ind1: ' ', ind2: ' ',\n subfields: [{code: 'a', value: 'foo'}]\n },\n {\n tag: '020', ind1: ' ', ind2: ' ',\n subfields: [{code: 'a', value: 'crappy val'}]\n },\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: '97895234216609'}]},\n // Just a sanity check due to earlier issues:\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '97895234216609'}]}\n ]\n });\n\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: 'foo'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: 'crappy val'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '97895234216609'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '97895234216609'}]}\n ]);\n });\n\n it('Moves invalid ISSN to y-subfield', async () => {\n const validator = await validatorFactory({handleInvalid: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '022', ind1: ' ', ind2: ' ',\n subfields: [{code: 'a', value: 'foo'}]\n }\n ]\n });\n\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '022', ind1: ' ', ind2: ' ', subfields: [{code: 'y', value: 'foo'}]\n }\n ]);\n });\n\n it('Moves invalid ISSN to y-subfield (Origin l-subfield)', async () => {\n const validator = await validatorFactory({handleInvalid: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '022', ind1: ' ', ind2: ' ',\n subfields: [{code: 'l', value: 'foo'}]\n }\n ]\n });\n\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '022', ind1: ' ', ind2: ' ', subfields: [{code: 'y', value: 'foo'}]\n }\n ]);\n });\n\n it('Trims spaces from value (No hyphenate)', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: ' 9786003770171'}]\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '9786003770171 (nidottu)'}]\n }\n ]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n // NB! Initial space does not need to be removed. It's crap, but not this fixer's crap.\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: ' 9786003770171'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: '9786003770171'}, {code: 'q', value: '(nidottu)'}]}\n ]);\n });\n\n it('Trims spaces and hyphenates value', async () => {\n const validator = await validatorFactory({hyphenateISBN: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: '9786003770171 (nid.)'},\n {code: 'z', value: '9786003770171 (nid.)'},\n {code: 'z', value: 'foo bar'}\n ]\n }\n ]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: '978-600-377-017-1'},\n {code: 'z', value: '978-600-377-017-1'},\n {code: 'z', value: 'foo bar'},\n // NB! Technically $q should come before $z subfields, but this is good enough.\n {code: 'q', value: '(nid.)'}\n ]\n }\n ]);\n });\n\n it('No relevant data', async () => {\n const validator = await validatorFactory({hyphenateISBN: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '005',\n value: 'whatever'\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'q', value: 'sidottu'}]\n },\n {\n tag: '024',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: ' 9786003770171'}]\n }\n ]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {tag: '005', value: 'whatever'},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'q', value: 'sidottu'}]},\n {tag: '024', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: ' 9786003770171'}]}\n ]);\n });\n\n it('Add hyphens to ISBN', async () => {\n const validator = await validatorFactory({hyphenateISBN: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '020', ind1: ' ', ind2: ' ',\n subfields: [{code: 'a', value: '9789916605325'}]\n },\n {\n tag: '020', ind1: ' ', ind2: ' ',\n subfields: [{code: 'a', value: '917153086X'}]\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '9068-31-372-X'}] // legal digits, but bad hyphenation\n },\n {\n tag: '020', ind1: ' ', ind2: ' ',\n subfields: [{code: 'a', value: '386006004X (nid.)'}]\n },\n {\n tag: '020', ind1: ' ', ind2: ' ',\n subfields: [{code: 'z', value: '9789916605325'}]\n },\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '9789916605325 (sid.)'}]}\n ]\n });\n\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: '978-9916-605-32-5'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: '91-7153-086-X'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: '90-6831-372-X'}]}, // corrected hyphens\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: '3-86006-004-X'}, {code: 'q', value: '(nid.)'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '978-9916-605-32-5'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '978-9916-605-32-5'}]}\n ]);\n });\n });\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"isbn-issn.spec.js","names":["_chai","require","_marcRecord","_isbnIssn","_interopRequireDefault","obj","__esModule","default","describe","it","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","hyphenateISBN","record","MarcRecord","fields","tag","ind1","ind2","subfields","code","value","result","eql","valid","messages","skip","handleInvalid","fix"],"sources":["../src/isbn-issn.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/isbn-issn';\n\ndescribe('isbn-issn', () => {\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({hyphenateISBN: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '978-600-377-017-1'}]\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '90-6831-372-X'}]\n },\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '978-600-377-017-1'}]},\n {\n tag: '022',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '0355-0893'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true});\n });\n\n it('Finds the record invalid', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'foo'}]\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '90-68-31-372-X'}] // contains an extra hyphen\n },\n {\n tag: '022',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'bar'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({\n valid: false, messages: [\n 'ISBN (foo) is not valid',\n 'ISSN (bar) is not valid'\n ]\n });\n });\n\n it('020 field without $a and $z is ok in this context (= no invalid ISBNs)', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'q', value: 'nidottu'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({\n valid: true\n });\n });\n\n it('Finds the invalid 022 field', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '022',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'z', value: '0000-0000'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({\n valid: false, messages: ['ISSN (undefined) is not valid']\n });\n });\n\n it('Finds the record invalid (reason: multiword)', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '978-600-377-017-1 (nid.)'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false, messages: ['ISBN (978-600-377-017-1 (nid.)) is not valid']});\n });\n\n it('Finds the record invalid (ISSN in \\'l\\'-subfield)', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'foo'}]\n },\n {\n tag: '022',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'l', value: 'bar'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({\n valid: false, messages: [\n 'ISBN (foo) is not valid',\n 'ISSN (bar) is not valid'\n ]\n });\n });\n\n it('Finds the record invalid (valid ISBN without hyphens)', async () => {\n const validator = await validatorFactory({hyphenateISBN: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '9789519155470'}]\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '9068-31-372-X'}] // legal digits, but bad hyphenation\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '386006004X'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false, messages: [\n 'ISBN (9789519155470) is not valid',\n 'ISBN (9068-31-372-X) is not valid',\n 'ISBN (386006004X) is not valid'\n ]});\n });\n\n it.skip('Finds the record invalid (Missing ISBN)');\n it.skip('Finds the record invalid (Missing ISSN)');\n });\n\n describe('#fix', () => {\n it('Moves invalid ISBN to z-subfield', async () => {\n const validator = await validatorFactory({handleInvalid: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '020', ind1: ' ', ind2: ' ',\n subfields: [{code: 'a', value: 'foo'}]\n },\n {\n tag: '020', ind1: ' ', ind2: ' ',\n subfields: [{code: 'a', value: 'crappy val'}]\n },\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: '97895234216609'}]},\n // Just a sanity check due to earlier issues:\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '97895234216609'}]}\n ]\n });\n\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: 'foo'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: 'crappy val'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '97895234216609'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '97895234216609'}]}\n ]);\n });\n\n it('Moves invalid ISSN to y-subfield', async () => {\n const validator = await validatorFactory({handleInvalid: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '022', ind1: ' ', ind2: ' ',\n subfields: [{code: 'a', value: 'foo'}]\n }\n ]\n });\n\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '022', ind1: ' ', ind2: ' ', subfields: [{code: 'y', value: 'foo'}]\n }\n ]);\n });\n\n it('Moves invalid ISSN to y-subfield (Origin l-subfield)', async () => {\n const validator = await validatorFactory({handleInvalid: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '022', ind1: ' ', ind2: ' ',\n subfields: [{code: 'l', value: 'foo'}]\n }\n ]\n });\n\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '022', ind1: ' ', ind2: ' ', subfields: [{code: 'y', value: 'foo'}]\n }\n ]);\n });\n\n it('Trims spaces from value (No hyphenate)', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: ' 9786003770171'}]\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '9786003770171 (nidottu)'}]\n }\n ]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n // NB! Initial space does not need to be removed. It's crap, but not this fixer's crap.\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: ' 9786003770171'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: '9786003770171'}, {code: 'q', value: '(nidottu)'}]}\n ]);\n });\n\n it('Trims spaces and hyphenates value', async () => {\n const validator = await validatorFactory({hyphenateISBN: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: '9786003770171 (nid.)'},\n {code: 'z', value: '9786003770171 (nid.)'},\n {code: 'z', value: 'foo bar'}\n ]\n }\n ]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: '978-600-377-017-1'},\n {code: 'z', value: '978-600-377-017-1'},\n {code: 'z', value: 'foo bar'},\n // NB! Technically $q should come before $z subfields, but this is good enough.\n {code: 'q', value: '(nid.)'}\n ]\n }\n ]);\n });\n\n it('No relevant data', async () => {\n const validator = await validatorFactory({hyphenateISBN: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '005',\n value: 'whatever'\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'q', value: 'sidottu'}]\n },\n {\n tag: '024',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: ' 9786003770171'}]\n }\n ]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {tag: '005', value: 'whatever'},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'q', value: 'sidottu'}]},\n {tag: '024', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: ' 9786003770171'}]}\n ]);\n });\n\n it('Add hyphens to ISBN', async () => {\n const validator = await validatorFactory({hyphenateISBN: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '020', ind1: ' ', ind2: ' ',\n subfields: [{code: 'a', value: '9789916605325'}]\n },\n {\n tag: '020', ind1: ' ', ind2: ' ',\n subfields: [{code: 'a', value: '917153086X'}]\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '9068-31-372-X'}] // legal digits, but bad hyphenation\n },\n {\n tag: '020', ind1: ' ', ind2: ' ',\n subfields: [{code: 'a', value: '386006004X (nid.)'}]\n },\n {\n tag: '020', ind1: ' ', ind2: ' ',\n subfields: [{code: 'z', value: '9789916605325'}]\n },\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '9789916605325 (sid.)'}]}\n ]\n });\n\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: '978-9916-605-32-5'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: '91-7153-086-X'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: '90-6831-372-X'}]}, // corrected hyphens\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: '3-86006-004-X'}, {code: 'q', value: '(nid.)'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '978-9916-605-32-5'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '978-9916-605-32-5'}]}\n ]);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"item-language.js","names":["_cld3Asm","require","_langs","_interopRequireDefault","_debug","obj","__esModule","default","_default","tagPattern","treshold","debug","createDebugLogger","cldFactory","loadCLD","RegExp","description","validate","fix","Error","record","results","checkLanguage","failed","valid","Boolean","currentCode","messages","detected","suggested","join","f008","get","shift","start","value","slice","end","f041","subfield","subfields","find","sf","code","push","sort","a","b","insertField","tag","ind1","ind2","text","getText","langCode","getLanguageCode","Identifier","create","length","dispose","findLanguage","is_reliable","probability","get2TLangCode","language","err","err2","stack","message","reduce","acc","field","fieldText","test","LanguageCodes","where"],"sources":["../src/item-language.js"],"sourcesContent":["import {loadModule as loadCLD} from 'cld3-asm';\nimport LanguageCodes from 'langs';\nimport createDebugLogger from 'debug';\n\nexport default async function (tagPattern, treshold = 0.9) {\n const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/item-language');\n const cldFactory = await loadCLD();\n\n if (tagPattern instanceof RegExp) {\n return {\n description:\n 'Handles invalid/missing item language code',\n validate,\n fix\n };\n }\n\n throw new Error('No tagPattern provided');\n\n async function validate(record) {\n const results = await checkLanguage(record);\n\n if (results.failed) {\n return {valid: Boolean(results.currentCode), messages: ['Language detection failed']};\n }\n\n if (results.detected) {\n if (results.detected !== results.currentCode) {\n return {valid: false, messages: [`Item language code is invalid. Correct language code: ${results.detected}`]};\n }\n\n return {valid: true};\n }\n\n if (results.suggested) {\n return {valid: Boolean(results.currentCode), messages: [`Item language code is invalid. Current code: ${results.currentCode}, suggestions: ${results.suggested.join()}`]};\n }\n }\n\n async function fix(record) {\n const results = await checkLanguage(record);\n\n if (results.suggested && results.currentCode) {\n return;\n }\n\n if (results.failed && !results.currentCode) {\n return;\n }\n\n if (results.detected && results.detected !== results.currentCode) {\n const f008 = record.get(/^008$/u).shift(); // eslint-disable-line functional/immutable-data\n\n if (f008) { // eslint-disable-line functional/no-conditional-statements\n const start = f008.value.slice(0, 35);\n const end = f008.value.slice(38);\n f008.value = `${start}${results.detected}${end}`; // eslint-disable-line functional/immutable-data\n }\n\n const f041 = record.get(/^041$/u).shift(); // eslint-disable-line functional/immutable-data\n\n if (f041) {\n const subfield = f041.subfields.find(sf => sf.code === 'a');\n\n if (subfield) { // eslint-disable-line functional/no-conditional-statements\n subfield.value = results.detected; // eslint-disable-line functional/immutable-data\n } else { // eslint-disable-line functional/no-conditional-statements\n f041.subfields.push({code: 'a', value: results.detected}); // eslint-disable-line functional/immutable-data\n f041.subfields.sort((a, b) => { // eslint-disable-line functional/immutable-data\n if (a.code < b.code) {\n return -1;\n }\n\n if (a.code > b.code) {\n return 1;\n }\n\n return 0;\n });\n }\n } else { // eslint-disable-line functional/no-conditional-statements\n record.insertField({tag: '041', ind1: ' ', ind2: ' ', subfields: [\n {\n code: 'a',\n value: results.detected\n }\n ]});\n }\n }\n }\n\n async function checkLanguage(record) {\n const text = getText(record);\n const langCode = getLanguageCode(record);\n\n const Identifier = cldFactory.create();\n\n if (text.length === 0) {\n Identifier.dispose();\n return {failed: true, currentCode: langCode};\n }\n\n try {\n const results = await Identifier.findLanguage(text);\n Identifier.dispose();\n\n if (results.is_reliable) {\n if (results.probability >= treshold) {\n return {\n detected: get2TLangCode(results.language),\n currentCode: langCode\n };\n }\n\n return {\n currentCode: langCode,\n suggested: [get2TLangCode(results.language)]\n };\n }\n\n return {failed: true, currentCode: langCode};\n } catch (err) {\n /* istanbul ignore next: How to cause errors? */\n try {\n Identifier.dispose();\n } catch (err2) {\n debug(`Got error disposing identifier: ${err2 instanceof Error ? err2.stack : err2}`);\n }\n\n /* istanbul ignore next: How to cause errors? */\n throw err instanceof Error ? err : new Error(err.message);\n }\n\n function getText(record) {\n return record.get(tagPattern).reduce((acc, field) => {\n const fieldText = field.subfields.find(sf => sf.code === 'a').value;\n return `${acc}${fieldText}`;\n }, '');\n }\n\n function getLanguageCode(record) {\n const f008 = record.get(/^008$/u).shift(); // eslint-disable-line functional/immutable-data\n\n if (f008) {\n const code = f008.value.slice(35, 38);\n if ((/^[a-z][a-z][a-z]$/u).test(code) && code !== 'zxx') {\n return code;\n }\n }\n\n const f041 = record.get(/^041$/u).shift(); // eslint-disable-line functional/immutable-data\n\n if (f041) {\n const code = f041.subfields.find(sf => sf.code === 'a').value;\n return code;\n }\n }\n\n function get2TLangCode(code) {\n return LanguageCodes.where('1', code)['2T'];\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"item-language.js","names":["_cld3Asm","require","_langs","_interopRequireDefault","_debug","obj","__esModule","default","_default","tagPattern","treshold","debug","createDebugLogger","cldFactory","loadCLD","RegExp","description","validate","fix","Error","record","results","checkLanguage","failed","valid","Boolean","currentCode","messages","detected","suggested","join","f008","get","shift","start","value","slice","end","f041","subfield","subfields","find","sf","code","push","sort","a","b","insertField","tag","ind1","ind2","text","getText","langCode","getLanguageCode","Identifier","create","length","dispose","findLanguage","is_reliable","probability","get2TLangCode","language","err","err2","stack","message","reduce","acc","field","fieldText","test","LanguageCodes","where"],"sources":["../src/item-language.js"],"sourcesContent":["import {loadModule as loadCLD} from 'cld3-asm';\nimport LanguageCodes from 'langs';\nimport createDebugLogger from 'debug';\n\nexport default async function (tagPattern, treshold = 0.9) {\n const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/item-language');\n const cldFactory = await loadCLD();\n\n if (tagPattern instanceof RegExp) {\n return {\n description:\n 'Handles invalid/missing item language code',\n validate,\n fix\n };\n }\n\n throw new Error('No tagPattern provided');\n\n async function validate(record) {\n const results = await checkLanguage(record);\n\n if (results.failed) {\n return {valid: Boolean(results.currentCode), messages: ['Language detection failed']};\n }\n\n if (results.detected) {\n if (results.detected !== results.currentCode) {\n return {valid: false, messages: [`Item language code is invalid. Correct language code: ${results.detected}`]};\n }\n\n return {valid: true};\n }\n\n if (results.suggested) {\n return {valid: Boolean(results.currentCode), messages: [`Item language code is invalid. Current code: ${results.currentCode}, suggestions: ${results.suggested.join()}`]};\n }\n }\n\n async function fix(record) {\n const results = await checkLanguage(record);\n\n if (results.suggested && results.currentCode) {\n return;\n }\n\n if (results.failed && !results.currentCode) {\n return;\n }\n\n if (results.detected && results.detected !== results.currentCode) {\n const f008 = record.get(/^008$/u).shift(); // eslint-disable-line functional/immutable-data\n\n if (f008) { // eslint-disable-line functional/no-conditional-statements\n const start = f008.value.slice(0, 35);\n const end = f008.value.slice(38);\n f008.value = `${start}${results.detected}${end}`; // eslint-disable-line functional/immutable-data\n }\n\n const f041 = record.get(/^041$/u).shift(); // eslint-disable-line functional/immutable-data\n\n if (f041) {\n const subfield = f041.subfields.find(sf => sf.code === 'a');\n\n if (subfield) { // eslint-disable-line functional/no-conditional-statements\n subfield.value = results.detected; // eslint-disable-line functional/immutable-data\n } else { // eslint-disable-line functional/no-conditional-statements\n f041.subfields.push({code: 'a', value: results.detected}); // eslint-disable-line functional/immutable-data\n f041.subfields.sort((a, b) => { // eslint-disable-line functional/immutable-data\n if (a.code < b.code) {\n return -1;\n }\n\n if (a.code > b.code) {\n return 1;\n }\n\n return 0;\n });\n }\n } else { // eslint-disable-line functional/no-conditional-statements\n record.insertField({tag: '041', ind1: ' ', ind2: ' ', subfields: [\n {\n code: 'a',\n value: results.detected\n }\n ]});\n }\n }\n }\n\n async function checkLanguage(record) {\n const text = getText(record);\n const langCode = getLanguageCode(record);\n\n const Identifier = cldFactory.create();\n\n if (text.length === 0) {\n Identifier.dispose();\n return {failed: true, currentCode: langCode};\n }\n\n try {\n const results = await Identifier.findLanguage(text);\n Identifier.dispose();\n\n if (results.is_reliable) {\n if (results.probability >= treshold) {\n return {\n detected: get2TLangCode(results.language),\n currentCode: langCode\n };\n }\n\n return {\n currentCode: langCode,\n suggested: [get2TLangCode(results.language)]\n };\n }\n\n return {failed: true, currentCode: langCode};\n } catch (err) {\n /* istanbul ignore next: How to cause errors? */\n try {\n Identifier.dispose();\n } catch (err2) {\n debug(`Got error disposing identifier: ${err2 instanceof Error ? err2.stack : err2}`);\n }\n\n /* istanbul ignore next: How to cause errors? */\n throw err instanceof Error ? err : new Error(err.message);\n }\n\n function getText(record) {\n return record.get(tagPattern).reduce((acc, field) => {\n const fieldText = field.subfields.find(sf => sf.code === 'a').value;\n return `${acc}${fieldText}`;\n }, '');\n }\n\n function getLanguageCode(record) {\n const f008 = record.get(/^008$/u).shift(); // eslint-disable-line functional/immutable-data\n\n if (f008) {\n const code = f008.value.slice(35, 38);\n if ((/^[a-z][a-z][a-z]$/u).test(code) && code !== 'zxx') {\n return code;\n }\n }\n\n const f041 = record.get(/^041$/u).shift(); // eslint-disable-line functional/immutable-data\n\n if (f041) {\n const code = f041.subfields.find(sf => sf.code === 'a').value;\n return code;\n }\n }\n\n function get2TLangCode(code) {\n return LanguageCodes.where('1', code)['2T'];\n }\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,MAAA,GAAAD,sBAAA,CAAAF,OAAA;AAAsC,SAAAE,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEvB,eAAAG,SAAgBC,UAAU,EAAEC,QAAQ,GAAG,GAAG,EAAE;EACzD,MAAMC,KAAK,GAAG,IAAAC,cAAiB,EAAC,wDAAwD,CAAC;EACzF,MAAMC,UAAU,GAAG,MAAM,IAAAC,mBAAO,EAAC,CAAC;EAElC,IAAIL,UAAU,YAAYM,MAAM,EAAE;IAChC,OAAO;MACLC,WAAW,EACX,4CAA4C;MAC5CC,QAAQ;MACRC;IACF,CAAC;EACH;EAEA,MAAM,IAAIC,KAAK,CAAC,wBAAwB,CAAC;EAEzC,eAAeF,QAAQA,CAACG,MAAM,EAAE;IAC9B,MAAMC,OAAO,GAAG,MAAMC,aAAa,CAACF,MAAM,CAAC;IAE3C,IAAIC,OAAO,CAACE,MAAM,EAAE;MAClB,OAAO;QAACC,KAAK,EAAEC,OAAO,CAACJ,OAAO,CAACK,WAAW,CAAC;QAAEC,QAAQ,EAAE,CAAC,2BAA2B;MAAC,CAAC;IACvF;IAEA,IAAIN,OAAO,CAACO,QAAQ,EAAE;MACpB,IAAIP,OAAO,CAACO,QAAQ,KAAKP,OAAO,CAACK,WAAW,EAAE;QAC5C,OAAO;UAACF,KAAK,EAAE,KAAK;UAAEG,QAAQ,EAAE,CAAE,yDAAwDN,OAAO,CAACO,QAAS,EAAC;QAAC,CAAC;MAChH;MAEA,OAAO;QAACJ,KAAK,EAAE;MAAI,CAAC;IACtB;IAEA,IAAIH,OAAO,CAACQ,SAAS,EAAE;MACrB,OAAO;QAACL,KAAK,EAAEC,OAAO,CAACJ,OAAO,CAACK,WAAW,CAAC;QAAEC,QAAQ,EAAE,CAAE,gDAA+CN,OAAO,CAACK,WAAY,kBAAiBL,OAAO,CAACQ,SAAS,CAACC,IAAI,CAAC,CAAE,EAAC;MAAC,CAAC;IAC3K;EACF;EAEA,eAAeZ,GAAGA,CAACE,MAAM,EAAE;IACzB,MAAMC,OAAO,GAAG,MAAMC,aAAa,CAACF,MAAM,CAAC;IAE3C,IAAIC,OAAO,CAACQ,SAAS,IAAIR,OAAO,CAACK,WAAW,EAAE;MAC5C;IACF;IAEA,IAAIL,OAAO,CAACE,MAAM,IAAI,CAACF,OAAO,CAACK,WAAW,EAAE;MAC1C;IACF;IAEA,IAAIL,OAAO,CAACO,QAAQ,IAAIP,OAAO,CAACO,QAAQ,KAAKP,OAAO,CAACK,WAAW,EAAE;MAChE,MAAMK,IAAI,GAAGX,MAAM,CAACY,GAAG,CAAC,QAAQ,CAAC,CAACC,KAAK,CAAC,CAAC,CAAC,CAAC;;MAE3C,IAAIF,IAAI,EAAE;QAAE;QACV,MAAMG,KAAK,GAAGH,IAAI,CAACI,KAAK,CAACC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QACrC,MAAMC,GAAG,GAAGN,IAAI,CAACI,KAAK,CAACC,KAAK,CAAC,EAAE,CAAC;QAChCL,IAAI,CAACI,KAAK,GAAI,GAAED,KAAM,GAAEb,OAAO,CAACO,QAAS,GAAES,GAAI,EAAC,CAAC,CAAC;MACpD;MAEA,MAAMC,IAAI,GAAGlB,MAAM,CAACY,GAAG,CAAC,QAAQ,CAAC,CAACC,KAAK,CAAC,CAAC,CAAC,CAAC;;MAE3C,IAAIK,IAAI,EAAE;QACR,MAAMC,QAAQ,GAAGD,IAAI,CAACE,SAAS,CAACC,IAAI,CAACC,EAAE,IAAIA,EAAE,CAACC,IAAI,KAAK,GAAG,CAAC;QAE3D,IAAIJ,QAAQ,EAAE;UAAE;UACdA,QAAQ,CAACJ,KAAK,GAAGd,OAAO,CAACO,QAAQ,CAAC,CAAC;QACrC,CAAC,MAAM;UAAE;UACPU,IAAI,CAACE,SAAS,CAACI,IAAI,CAAC;YAACD,IAAI,EAAE,GAAG;YAAER,KAAK,EAAEd,OAAO,CAACO;UAAQ,CAAC,CAAC,CAAC,CAAC;UAC3DU,IAAI,CAACE,SAAS,CAACK,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAK;YAAE;YAC9B,IAAID,CAAC,CAACH,IAAI,GAAGI,CAAC,CAACJ,IAAI,EAAE;cACnB,OAAO,CAAC,CAAC;YACX;YAEA,IAAIG,CAAC,CAACH,IAAI,GAAGI,CAAC,CAACJ,IAAI,EAAE;cACnB,OAAO,CAAC;YACV;YAEA,OAAO,CAAC;UACV,CAAC,CAAC;QACJ;MACF,CAAC,MAAM;QAAE;QACPvB,MAAM,CAAC4B,WAAW,CAAC;UAACC,GAAG,EAAE,KAAK;UAAEC,IAAI,EAAE,GAAG;UAAEC,IAAI,EAAE,GAAG;UAAEX,SAAS,EAAE,CAC/D;YACEG,IAAI,EAAE,GAAG;YACTR,KAAK,EAAEd,OAAO,CAACO;UACjB,CAAC;QACF,CAAC,CAAC;MACL;IACF;EACF;EAEA,eAAeN,aAAaA,CAACF,MAAM,EAAE;IACnC,MAAMgC,IAAI,GAAGC,OAAO,CAACjC,MAAM,CAAC;IAC5B,MAAMkC,QAAQ,GAAGC,eAAe,CAACnC,MAAM,CAAC;IAExC,MAAMoC,UAAU,GAAG3C,UAAU,CAAC4C,MAAM,CAAC,CAAC;IAEtC,IAAIL,IAAI,CAACM,MAAM,KAAK,CAAC,EAAE;MACrBF,UAAU,CAACG,OAAO,CAAC,CAAC;MACpB,OAAO;QAACpC,MAAM,EAAE,IAAI;QAAEG,WAAW,EAAE4B;MAAQ,CAAC;IAC9C;IAEA,IAAI;MACF,MAAMjC,OAAO,GAAG,MAAMmC,UAAU,CAACI,YAAY,CAACR,IAAI,CAAC;MACnDI,UAAU,CAACG,OAAO,CAAC,CAAC;MAEpB,IAAItC,OAAO,CAACwC,WAAW,EAAE;QACvB,IAAIxC,OAAO,CAACyC,WAAW,IAAIpD,QAAQ,EAAE;UACnC,OAAO;YACLkB,QAAQ,EAAEmC,aAAa,CAAC1C,OAAO,CAAC2C,QAAQ,CAAC;YACzCtC,WAAW,EAAE4B;UACf,CAAC;QACH;QAEA,OAAO;UACL5B,WAAW,EAAE4B,QAAQ;UACrBzB,SAAS,EAAE,CAACkC,aAAa,CAAC1C,OAAO,CAAC2C,QAAQ,CAAC;QAC7C,CAAC;MACH;MAEA,OAAO;QAACzC,MAAM,EAAE,IAAI;QAAEG,WAAW,EAAE4B;MAAQ,CAAC;IAC9C,CAAC,CAAC,OAAOW,GAAG,EAAE;MACZ;MACA,IAAI;QACFT,UAAU,CAACG,OAAO,CAAC,CAAC;MACtB,CAAC,CAAC,OAAOO,IAAI,EAAE;QACbvD,KAAK,CAAE,mCAAkCuD,IAAI,YAAY/C,KAAK,GAAG+C,IAAI,CAACC,KAAK,GAAGD,IAAK,EAAC,CAAC;MACvF;;MAEA;MACA,MAAMD,GAAG,YAAY9C,KAAK,GAAG8C,GAAG,GAAG,IAAI9C,KAAK,CAAC8C,GAAG,CAACG,OAAO,CAAC;IAC3D;IAEA,SAASf,OAAOA,CAACjC,MAAM,EAAE;MACvB,OAAOA,MAAM,CAACY,GAAG,CAACvB,UAAU,CAAC,CAAC4D,MAAM,CAAC,CAACC,GAAG,EAAEC,KAAK,KAAK;QACnD,MAAMC,SAAS,GAAGD,KAAK,CAAC/B,SAAS,CAACC,IAAI,CAACC,EAAE,IAAIA,EAAE,CAACC,IAAI,KAAK,GAAG,CAAC,CAACR,KAAK;QACnE,OAAQ,GAAEmC,GAAI,GAAEE,SAAU,EAAC;MAC7B,CAAC,EAAE,EAAE,CAAC;IACR;IAEA,SAASjB,eAAeA,CAACnC,MAAM,EAAE;MAC/B,MAAMW,IAAI,GAAGX,MAAM,CAACY,GAAG,CAAC,QAAQ,CAAC,CAACC,KAAK,CAAC,CAAC,CAAC,CAAC;;MAE3C,IAAIF,IAAI,EAAE;QACR,MAAMY,IAAI,GAAGZ,IAAI,CAACI,KAAK,CAACC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;QACrC,IAAK,oBAAoB,CAAEqC,IAAI,CAAC9B,IAAI,CAAC,IAAIA,IAAI,KAAK,KAAK,EAAE;UACvD,OAAOA,IAAI;QACb;MACF;MAEA,MAAML,IAAI,GAAGlB,MAAM,CAACY,GAAG,CAAC,QAAQ,CAAC,CAACC,KAAK,CAAC,CAAC,CAAC,CAAC;;MAE3C,IAAIK,IAAI,EAAE;QACR,MAAMK,IAAI,GAAGL,IAAI,CAACE,SAAS,CAACC,IAAI,CAACC,EAAE,IAAIA,EAAE,CAACC,IAAI,KAAK,GAAG,CAAC,CAACR,KAAK;QAC7D,OAAOQ,IAAI;MACb;IACF;IAEA,SAASoB,aAAaA,CAACpB,IAAI,EAAE;MAC3B,OAAO+B,cAAa,CAACC,KAAK,CAAC,GAAG,EAAEhC,IAAI,CAAC,CAAC,IAAI,CAAC;IAC7C;EACF;AACF","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"item-language.spec.js","names":["_chai","_interopRequireDefault","require","_chaiAsPromised","_marcRecord","_itemLanguage","obj","__esModule","default","expect","chai","use","chaiAsPromised","describe","it","validator","validatorFactory","to","be","an","that","has","any","keys","description","a","validate","rejectedWith","Error","record","MarcRecord","fields","tag","ind1","ind2","subfields","code","value","result","eql","valid","messages","fix","err","message","equal"],"sources":["../src/item-language.spec.js"],"sourcesContent":["import chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/item-language';\n\nconst {expect} = chai;\nchai.use(chaiAsPromised);\n\ndescribe('item-language', () => {\n it('Creates a validator', async () => {\n const validator = await validatorFactory(/^520$/u);\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 tagPattern is not provided', async () => {\n await expect(validatorFactory()).to.be.rejectedWith(Error, 'No tagPattern provided');\n });\n\n describe('#validate', () => {\n it('Finds the record valid', async () => {\n const validator = await validatorFactory(/^520$/u);\n const record = new MarcRecord({\n fields: [\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'fin'}]\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: '',\n subfields: [\n {\n code: 'a',\n value: 'Matti Ylösen Veroparatiisit on kirja siitä, kuinka miljonäärit ja monikansalliset yritykset ovat 20 vuoden aikana siirtäneet kiihtyvällä tahdilla tulojaan säätelyn ja verottajan ulottumattomiin korkeiden pankkisalaisuuslakien suojiin. Samoihin keitaisiin, joita myös kansainvälinen rikollisuus käyttää rahanpesuun. Suomi on toistaiseksi ollut osa ongelmaa, ei sen ratkaisua.\\nKirja sisältää näkökulmia ja kiinnekohtia demokratian, hyvinvointivaltion ja kilpailullisen markkinatalouden kriiseihin. Mukana myös toimintaehdotuksia, joita Suomen tulee ajaa veroparatiisiongelman ratkaisemiseksi. Veroparatiisit on ajankohtainen tietopaketti veronkierron mekanismeista ja vaikutuksista.'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true});\n });\n\n it('Finds the record invalid (Language code is missing and detection failed', async () => {\n const validator = await validatorFactory(/^520$/u);\n const record = new MarcRecord({\n fields: [\n {\n tag: '520',\n ind1: ' ',\n ind2: '',\n subfields: [\n {\n code: 'a',\n value: '.'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false, messages: ['Language detection failed']});\n });\n\n it('Finds the record invalid (Detected language differs)', async () => {\n const validator = await validatorFactory(/^520$/u);\n const record = new MarcRecord({\n fields: [\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|fin|^'\n },\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'fin'}]\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: '',\n subfields: [\n {\n code: 'a',\n value: 'If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false, messages: ['Item language code is invalid. Correct language code: eng']});\n });\n\n it('Finds the record invalid (Probability doesn\\'t meet treshold)', async () => {\n const validator = await validatorFactory(/^520$/u, 1);\n const record = new MarcRecord({\n fields: [\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|fin|^'\n },\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'fin'}]\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: '',\n subfields: [\n {\n code: 'a',\n value: 'If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true, messages: ['Item language code is invalid. Current code: fin, suggestions: eng']});\n });\n\n it('Finds the record invalid (No detectable text)', async () => {\n const validator = await validatorFactory(/^520$/u, 1);\n const record = new MarcRecord({\n fields: [\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|fin|^'\n },\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'fin'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true, messages: ['Language detection failed']});\n });\n });\n\n describe('#fix', () => {\n it('Fixes the record', async () => {\n const validator = await validatorFactory(/^520$/u);\n const record = new MarcRecord({\n fields: [\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|fin|^'\n },\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'eng'}]\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.'\n }\n ]\n }\n ]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|eng|^'\n },\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'eng'}]\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.'\n }\n ]\n }\n ]);\n });\n\n it('Fixes the record (Insert missing fields)', async () => {\n const validator = await validatorFactory(/^520$/u);\n const record = new MarcRecord({\n fields: [\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|fin|^'\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.'\n }\n ]\n }\n ]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|eng|^'\n },\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'eng'}]\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.'\n }\n ]\n }\n ]);\n });\n\n it('Fixes the record (Insert missing subfields)', async () => {\n const validator = await validatorFactory(/^520$/u);\n const record = new MarcRecord({\n fields: [\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|fin|^'\n },\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'b', value: 'foo'}]\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.'\n }\n ]\n }\n ]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|eng|^'\n },\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'eng'}, {code: 'b', value: 'foo'}]\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.'\n }\n ]\n }\n ]);\n });\n\n it('Fails to fix the record', async () => {\n const validator = await validatorFactory(/^520$/u);\n const record = new MarcRecord({\n fields: [\n {\n tag: '520',\n ind1: ' ',\n ind2: '',\n subfields: [\n {\n code: 'a',\n value: '.'\n }\n ]\n }\n ]\n });\n\n try {\n await validator.fix(record);\n } catch (err) {\n expect(err.message).to.equal('Language code is missing and detection failed');\n }\n });\n });\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"item-language.spec.js","names":["_chai","_interopRequireDefault","require","_chaiAsPromised","_marcRecord","_itemLanguage","obj","__esModule","default","expect","chai","use","chaiAsPromised","describe","it","validator","validatorFactory","to","be","an","that","has","any","keys","description","a","validate","rejectedWith","Error","record","MarcRecord","fields","tag","ind1","ind2","subfields","code","value","result","eql","valid","messages","fix","err","message","equal"],"sources":["../src/item-language.spec.js"],"sourcesContent":["import chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/item-language';\n\nconst {expect} = chai;\nchai.use(chaiAsPromised);\n\ndescribe('item-language', () => {\n it('Creates a validator', async () => {\n const validator = await validatorFactory(/^520$/u);\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 tagPattern is not provided', async () => {\n await expect(validatorFactory()).to.be.rejectedWith(Error, 'No tagPattern provided');\n });\n\n describe('#validate', () => {\n it('Finds the record valid', async () => {\n const validator = await validatorFactory(/^520$/u);\n const record = new MarcRecord({\n fields: [\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'fin'}]\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: '',\n subfields: [\n {\n code: 'a',\n value: 'Matti Ylösen Veroparatiisit on kirja siitä, kuinka miljonäärit ja monikansalliset yritykset ovat 20 vuoden aikana siirtäneet kiihtyvällä tahdilla tulojaan säätelyn ja verottajan ulottumattomiin korkeiden pankkisalaisuuslakien suojiin. Samoihin keitaisiin, joita myös kansainvälinen rikollisuus käyttää rahanpesuun. Suomi on toistaiseksi ollut osa ongelmaa, ei sen ratkaisua.\\nKirja sisältää näkökulmia ja kiinnekohtia demokratian, hyvinvointivaltion ja kilpailullisen markkinatalouden kriiseihin. Mukana myös toimintaehdotuksia, joita Suomen tulee ajaa veroparatiisiongelman ratkaisemiseksi. Veroparatiisit on ajankohtainen tietopaketti veronkierron mekanismeista ja vaikutuksista.'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true});\n });\n\n it('Finds the record invalid (Language code is missing and detection failed', async () => {\n const validator = await validatorFactory(/^520$/u);\n const record = new MarcRecord({\n fields: [\n {\n tag: '520',\n ind1: ' ',\n ind2: '',\n subfields: [\n {\n code: 'a',\n value: '.'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false, messages: ['Language detection failed']});\n });\n\n it('Finds the record invalid (Detected language differs)', async () => {\n const validator = await validatorFactory(/^520$/u);\n const record = new MarcRecord({\n fields: [\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|fin|^'\n },\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'fin'}]\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: '',\n subfields: [\n {\n code: 'a',\n value: 'If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false, messages: ['Item language code is invalid. Correct language code: eng']});\n });\n\n it('Finds the record invalid (Probability doesn\\'t meet treshold)', async () => {\n const validator = await validatorFactory(/^520$/u, 1);\n const record = new MarcRecord({\n fields: [\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|fin|^'\n },\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'fin'}]\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: '',\n subfields: [\n {\n code: 'a',\n value: 'If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true, messages: ['Item language code is invalid. Current code: fin, suggestions: eng']});\n });\n\n it('Finds the record invalid (No detectable text)', async () => {\n const validator = await validatorFactory(/^520$/u, 1);\n const record = new MarcRecord({\n fields: [\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|fin|^'\n },\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'fin'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true, messages: ['Language detection failed']});\n });\n });\n\n describe('#fix', () => {\n it('Fixes the record', async () => {\n const validator = await validatorFactory(/^520$/u);\n const record = new MarcRecord({\n fields: [\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|fin|^'\n },\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'eng'}]\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.'\n }\n ]\n }\n ]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|eng|^'\n },\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'eng'}]\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.'\n }\n ]\n }\n ]);\n });\n\n it('Fixes the record (Insert missing fields)', async () => {\n const validator = await validatorFactory(/^520$/u);\n const record = new MarcRecord({\n fields: [\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|fin|^'\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.'\n }\n ]\n }\n ]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|eng|^'\n },\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'eng'}]\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.'\n }\n ]\n }\n ]);\n });\n\n it('Fixes the record (Insert missing subfields)', async () => {\n const validator = await validatorFactory(/^520$/u);\n const record = new MarcRecord({\n fields: [\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|fin|^'\n },\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'b', value: 'foo'}]\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.'\n }\n ]\n }\n ]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|eng|^'\n },\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'eng'}, {code: 'b', value: 'foo'}]\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.'\n }\n ]\n }\n ]);\n });\n\n it('Fails to fix the record', async () => {\n const validator = await validatorFactory(/^520$/u);\n const record = new MarcRecord({\n fields: [\n {\n tag: '520',\n ind1: ' ',\n ind2: '',\n subfields: [\n {\n code: 'a',\n value: '.'\n }\n ]\n }\n ]\n });\n\n try {\n await validator.fix(record);\n } catch (err) {\n expect(err.message).to.equal('Language code is missing and detection failed');\n }\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}