@natlibfi/marc-record-validators-melinda 11.6.7 → 12.0.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/melinda-node-tests.yml +1 -1
- package/dist/access-rights.js +63 -91
- package/dist/access-rights.js.map +7 -1
- package/dist/access-rights.test.js +137 -0
- package/dist/access-rights.test.js.map +7 -0
- package/dist/addMissingField041.js +21 -53
- package/dist/addMissingField041.js.map +7 -1
- package/dist/addMissingField041.test.js +39 -0
- package/dist/addMissingField041.test.js.map +7 -0
- package/dist/addMissingField336.js +99 -191
- package/dist/addMissingField336.js.map +7 -1
- package/dist/addMissingField336.test.js +39 -0
- package/dist/addMissingField336.test.js.map +7 -0
- package/dist/addMissingField337.js +63 -132
- package/dist/addMissingField337.js.map +7 -1
- package/dist/addMissingField337.test.js +39 -0
- package/dist/addMissingField337.test.js.map +7 -0
- package/dist/addMissingField338.js +147 -253
- package/dist/addMissingField338.js.map +7 -1
- package/dist/addMissingField338.test.js +39 -0
- package/dist/addMissingField338.test.js.map +7 -0
- package/dist/cyrillux-usemarcon-replacement.js +119 -272
- package/dist/cyrillux-usemarcon-replacement.js.map +7 -1
- package/dist/cyrillux-usemarcon-replacement.test.js +46 -0
- package/dist/cyrillux-usemarcon-replacement.test.js.map +7 -0
- package/dist/cyrillux.js +119 -223
- package/dist/cyrillux.js.map +7 -1
- package/dist/cyrillux.test.js +39 -0
- package/dist/cyrillux.test.js.map +7 -0
- package/dist/disambiguateSeriesStatements.js +40 -81
- package/dist/disambiguateSeriesStatements.js.map +7 -1
- package/dist/disambiguateSeriesStatements.test.js +44 -0
- package/dist/disambiguateSeriesStatements.test.js.map +7 -0
- package/dist/double-commas.js +7 -14
- package/dist/double-commas.js.map +7 -1
- package/dist/double-commas.test.js +48 -0
- package/dist/double-commas.test.js.map +7 -0
- package/dist/duplicates-ind1.js +10 -31
- package/dist/duplicates-ind1.js.map +7 -1
- package/dist/duplicates-ind1.test.js +40 -0
- package/dist/duplicates-ind1.test.js.map +7 -0
- package/dist/empty-fields.js +10 -22
- package/dist/empty-fields.js.map +7 -1
- package/dist/empty-fields.test.js +129 -0
- package/dist/empty-fields.test.js.map +7 -0
- package/dist/ending-punctuation-conf.js +871 -769
- package/dist/ending-punctuation-conf.js.map +7 -1
- package/dist/ending-punctuation.js +84 -167
- package/dist/ending-punctuation.js.map +7 -1
- package/dist/ending-punctuation.test.js +2290 -0
- package/dist/ending-punctuation.test.js.map +7 -0
- package/dist/ending-whitespace.js +10 -35
- package/dist/ending-whitespace.js.map +7 -1
- package/dist/ending-whitespace.test.js +38 -0
- package/dist/ending-whitespace.test.js.map +7 -0
- package/dist/field-008-18-34-character-groups.js +40 -125
- package/dist/field-008-18-34-character-groups.js.map +7 -1
- package/dist/field-008-18-34-character-groups.test.js +45 -0
- package/dist/field-008-18-34-character-groups.test.js.map +7 -0
- package/dist/field-505-separators.js +19 -39
- package/dist/field-505-separators.js.map +7 -1
- package/dist/field-505-separators.test.js +45 -0
- package/dist/field-505-separators.test.js.map +7 -0
- package/dist/field-521-fix.js +19 -47
- package/dist/field-521-fix.js.map +7 -1
- package/dist/field-521-fix.test.js +44 -0
- package/dist/field-521-fix.test.js.map +7 -0
- package/dist/field-exclusion.js +37 -91
- package/dist/field-exclusion.js.map +7 -1
- package/dist/field-exclusion.test.js +821 -0
- package/dist/field-exclusion.test.js.map +7 -0
- package/dist/field-structure.js +52 -104
- package/dist/field-structure.js.map +7 -1
- package/dist/field-structure.test.js +587 -0
- package/dist/field-structure.test.js.map +7 -0
- package/dist/field33XUtils.js +119 -503
- package/dist/field33XUtils.js.map +7 -1
- package/dist/fields-present.js +11 -23
- package/dist/fields-present.js.map +7 -1
- package/dist/fields-present.test.js +95 -0
- package/dist/fields-present.test.js.map +7 -0
- package/dist/fix-33X.js +393 -431
- package/dist/fix-33X.js.map +7 -1
- package/dist/fix-33X.test.js +39 -0
- package/dist/fix-33X.test.js.map +7 -0
- package/dist/fix-country-codes.js +20 -50
- package/dist/fix-country-codes.js.map +7 -1
- package/dist/fix-country-codes.test.js +44 -0
- package/dist/fix-country-codes.test.js.map +7 -0
- package/dist/fix-language-codes.js +23 -53
- package/dist/fix-language-codes.js.map +7 -1
- package/dist/fix-language-codes.test.js +38 -0
- package/dist/fix-language-codes.test.js.map +7 -0
- package/dist/fixRelatorTerms.js +82 -209
- package/dist/fixRelatorTerms.js.map +7 -1
- package/dist/fixRelatorTerms.test.js +44 -0
- package/dist/fixRelatorTerms.test.js.map +7 -0
- package/dist/fixed-fields.js +21 -30
- package/dist/fixed-fields.js.map +7 -1
- package/dist/fixed-fields.test.js +87 -0
- package/dist/fixed-fields.test.js.map +7 -0
- package/dist/identical-fields.js +8 -24
- package/dist/identical-fields.js.map +7 -1
- package/dist/identical-fields.test.js +119 -0
- package/dist/identical-fields.test.js.map +7 -0
- package/dist/index.js +119 -413
- package/dist/index.js.map +7 -1
- package/dist/indicator-fixes.js +57 -95
- package/dist/indicator-fixes.js.map +7 -1
- package/dist/indicator-fixes.test.js +42 -0
- package/dist/indicator-fixes.test.js.map +7 -0
- package/dist/isbn-issn.js +66 -126
- package/dist/isbn-issn.js.map +7 -1
- package/dist/isbn-issn.test.js +398 -0
- package/dist/isbn-issn.test.js.map +7 -0
- package/dist/item-language.js +32 -65
- package/dist/item-language.js.map +7 -1
- package/dist/item-language.test.js +322 -0
- package/dist/item-language.test.js.map +7 -0
- package/dist/melindaCustomMergeFields.js +5182 -11233
- package/dist/melindaCustomMergeFields.js.map +7 -1
- package/dist/merge-fields/controlSubfields.js +75 -142
- package/dist/merge-fields/controlSubfields.js.map +7 -1
- package/dist/merge-fields/counterpartField.js +182 -379
- package/dist/merge-fields/counterpartField.js.map +7 -1
- package/dist/merge-fields/index.js +15 -49
- package/dist/merge-fields/index.js.map +7 -1
- package/dist/merge-fields/mergableIndicator.js +18 -51
- package/dist/merge-fields/mergableIndicator.js.map +7 -1
- package/dist/merge-fields/mergableTag.js +78 -30
- package/dist/merge-fields/mergableTag.js.map +7 -1
- package/dist/merge-fields/mergeConfig.js +66 -171
- package/dist/merge-fields/mergeConfig.js.map +7 -1
- package/dist/merge-fields/mergeConstraints.js +323 -1214
- package/dist/merge-fields/mergeConstraints.js.map +7 -1
- package/dist/merge-fields/mergeField.js +47 -111
- package/dist/merge-fields/mergeField.js.map +7 -1
- package/dist/merge-fields/mergeIndicator.js +64 -118
- package/dist/merge-fields/mergeIndicator.js.map +7 -1
- package/dist/merge-fields/mergeOrAddPostprocess.js +14 -38
- package/dist/merge-fields/mergeOrAddPostprocess.js.map +7 -1
- package/dist/merge-fields/mergeOrAddSubfield.js +62 -104
- package/dist/merge-fields/mergeOrAddSubfield.js.map +7 -1
- package/dist/merge-fields/mergeSubfield.js +47 -95
- package/dist/merge-fields/mergeSubfield.js.map +7 -1
- package/dist/merge-fields/removeDuplicateSubfields.js +18 -31
- package/dist/merge-fields/removeDuplicateSubfields.js.map +7 -1
- package/dist/merge-fields/worldKnowledge.js +15 -40
- package/dist/merge-fields/worldKnowledge.js.map +7 -1
- package/dist/merge-fields.test.js +44 -0
- package/dist/merge-fields.test.js.map +7 -0
- package/dist/mergeField500Lisapainokset.js +28 -57
- package/dist/mergeField500Lisapainokset.js.map +7 -1
- package/dist/mergeField500Lisapainokset.test.js +44 -0
- package/dist/mergeField500Lisapainokset.test.js.map +7 -0
- package/dist/mergeRelatorTermFields.js +33 -69
- package/dist/mergeRelatorTermFields.js.map +7 -1
- package/dist/mergeRelatorTermFields.test.js +44 -0
- package/dist/mergeRelatorTermFields.test.js.map +7 -0
- package/dist/modernize-502.js +23 -55
- package/dist/modernize-502.js.map +7 -1
- package/dist/modernize-502.test.js +38 -0
- package/dist/modernize-502.test.js.map +7 -0
- package/dist/multiple-subfield-0.js +23 -48
- package/dist/multiple-subfield-0.js.map +7 -1
- package/dist/multiple-subfield-0.test.js +44 -0
- package/dist/multiple-subfield-0.test.js.map +7 -0
- package/dist/non-breaking-space.js +11 -32
- package/dist/non-breaking-space.js.map +7 -1
- package/dist/non-breaking-space.test.js +38 -0
- package/dist/non-breaking-space.test.js.map +7 -0
- package/dist/normalize-dashes.js +18 -37
- package/dist/normalize-dashes.js.map +7 -1
- package/dist/normalize-dashes.test.js +44 -0
- package/dist/normalize-dashes.test.js.map +7 -0
- package/dist/normalize-identifiers.js +54 -140
- package/dist/normalize-identifiers.js.map +7 -1
- package/dist/normalize-identifiers.test.js +44 -0
- package/dist/normalize-identifiers.test.js.map +7 -0
- package/dist/normalize-qualifying-information.js +23 -48
- package/dist/normalize-qualifying-information.js.map +7 -1
- package/dist/normalize-qualifying-information.test.js +44 -0
- package/dist/normalize-qualifying-information.test.js.map +7 -0
- package/dist/normalize-utf8-diacritics.js +19 -105
- package/dist/normalize-utf8-diacritics.js.map +7 -1
- package/dist/normalize-utf8-diacritics.test.js +44 -0
- package/dist/normalize-utf8-diacritics.test.js.map +7 -0
- package/dist/normalizeFieldForComparison.js +67 -158
- package/dist/normalizeFieldForComparison.js.map +7 -1
- package/dist/normalizeSubfieldValueForComparison.js +37 -77
- package/dist/normalizeSubfieldValueForComparison.js.map +7 -1
- package/dist/prepublicationUtils.js +58 -111
- package/dist/prepublicationUtils.js.map +7 -1
- package/dist/punctuation/index.js +56 -72
- package/dist/punctuation/index.js.map +7 -1
- package/dist/punctuation/rules/aut.js +372 -331
- package/dist/punctuation/rules/aut.js.map +7 -1
- package/dist/punctuation/rules/bib.js +420 -373
- package/dist/punctuation/rules/bib.js.map +7 -1
- package/dist/punctuation/rules/index.js +7 -21
- package/dist/punctuation/rules/index.js.map +7 -1
- package/dist/punctuation.test.js +44 -0
- package/dist/punctuation.test.js.map +7 -0
- package/dist/punctuation2.js +251 -800
- package/dist/punctuation2.js.map +7 -1
- package/dist/punctuation2.test.js +44 -0
- package/dist/punctuation2.test.js.map +7 -0
- package/dist/reindexSubfield6OccurenceNumbers.js +61 -96
- package/dist/reindexSubfield6OccurenceNumbers.js.map +7 -1
- package/dist/reindexSubfield6OccurenceNumbers.test.js +44 -0
- package/dist/reindexSubfield6OccurenceNumbers.test.js.map +7 -0
- package/dist/removeDuplicateDataFields.js +102 -202
- package/dist/removeDuplicateDataFields.js.map +7 -1
- package/dist/removeDuplicateDataFields.test.js +44 -0
- package/dist/removeDuplicateDataFields.test.js.map +7 -0
- package/dist/removeInferiorDataFields.js +103 -227
- package/dist/removeInferiorDataFields.js.map +7 -1
- package/dist/removeInferiorDataFields.test.js +44 -0
- package/dist/removeInferiorDataFields.test.js.map +7 -0
- package/dist/resolvable-ext-references-melinda.js +25 -60
- package/dist/resolvable-ext-references-melinda.js.map +7 -1
- package/dist/resolvable-ext-references-melinda.test.js +160 -0
- package/dist/resolvable-ext-references-melinda.test.js.map +7 -0
- package/dist/resolveOrphanedSubfield6s.js +33 -64
- package/dist/resolveOrphanedSubfield6s.js.map +7 -1
- package/dist/resolveOrphanedSubfield6s.test.js +44 -0
- package/dist/resolveOrphanedSubfield6s.test.js.map +7 -0
- package/dist/sanitize-vocabulary-source-codes.js +27 -55
- package/dist/sanitize-vocabulary-source-codes.js.map +7 -1
- package/dist/sanitize-vocabulary-source-codes.test.js +45 -0
- package/dist/sanitize-vocabulary-source-codes.test.js.map +7 -0
- package/dist/sort-tags.js +13 -25
- package/dist/sort-tags.js.map +7 -1
- package/dist/sort-tags.test.js +261 -0
- package/dist/sort-tags.test.js.map +7 -0
- package/dist/sortFields.js +152 -222
- package/dist/sortFields.js.map +7 -1
- package/dist/sortFields.test.js +44 -0
- package/dist/sortFields.test.js.map +7 -0
- package/dist/sortRelatorTerms.js +30 -68
- package/dist/sortRelatorTerms.js.map +7 -1
- package/dist/sortRelatorTerms.test.js +44 -0
- package/dist/sortRelatorTerms.test.js.map +7 -0
- package/dist/sortSubfields.js +102 -255
- package/dist/sortSubfields.js.map +7 -1
- package/dist/sortSubfields.test.js +44 -0
- package/dist/sortSubfields.test.js.map +7 -0
- package/dist/stripPunctuation.js +13 -36
- package/dist/stripPunctuation.js.map +7 -1
- package/dist/stripPunctuation.test.js +44 -0
- package/dist/stripPunctuation.test.js.map +7 -0
- package/dist/subfield-exclusion.js +28 -75
- package/dist/subfield-exclusion.js.map +7 -1
- package/dist/subfield-exclusion.test.js +471 -0
- package/dist/subfield-exclusion.test.js.map +7 -0
- package/dist/subfield6Utils.js +107 -269
- package/dist/subfield6Utils.js.map +7 -1
- package/dist/subfield8Utils.js +26 -50
- package/dist/subfield8Utils.js.map +7 -1
- package/dist/subfieldValueNormalizations.js +40 -74
- package/dist/subfieldValueNormalizations.js.map +7 -1
- package/dist/subfieldValueNormalizations.test.js +45 -0
- package/dist/subfieldValueNormalizations.test.js.map +7 -0
- package/dist/sync-007-and-300.js +22 -53
- package/dist/sync-007-and-300.js.map +7 -1
- package/dist/sync-007-and-300.test.js +44 -0
- package/dist/sync-007-and-300.test.js.map +7 -0
- package/dist/translate-terms.js +67 -155
- package/dist/translate-terms.js.map +7 -1
- package/dist/translate-terms.test.js +44 -0
- package/dist/translate-terms.test.js.map +7 -0
- package/dist/typeOfDate-008.js +10 -25
- package/dist/typeOfDate-008.js.map +7 -1
- package/dist/typeOfDate-008.test.js +40 -0
- package/dist/typeOfDate-008.test.js.map +7 -0
- package/dist/unicode-decomposition.js +94 -107
- package/dist/unicode-decomposition.js.map +7 -1
- package/dist/unicode-decomposition.test.js +94 -0
- package/dist/unicode-decomposition.test.js.map +7 -0
- package/dist/update-field-540.js +30 -75
- package/dist/update-field-540.js.map +7 -1
- package/dist/update-field-540.test.js +44 -0
- package/dist/update-field-540.test.js.map +7 -0
- package/dist/urn.js +55 -128
- package/dist/urn.js.map +7 -1
- package/dist/urn.test.js +44 -0
- package/dist/urn.test.js.map +7 -0
- package/dist/utils.js +72 -126
- package/dist/utils.js.map +7 -1
- package/eslint.config.mjs +1 -2
- package/package.json +21 -93
- package/src/access-rights.js +1 -1
- package/src/{access-rights.spec.js → access-rights.test.js} +9 -10
- package/src/addMissingField041.js +1 -1
- package/src/{addMissingField336.spec.js → addMissingField041.test.js} +13 -14
- package/src/addMissingField336.js +3 -3
- package/src/{addMissingField041.spec.js → addMissingField336.test.js} +13 -14
- package/src/addMissingField337.js +2 -2
- package/src/{addMissingField337.spec.js → addMissingField337.test.js} +13 -14
- package/src/addMissingField338.js +2 -2
- package/src/{addMissingField338.spec.js → addMissingField338.test.js} +13 -14
- package/src/cyrillux-usemarcon-replacement.js +18 -18
- package/src/cyrillux-usemarcon-replacement.test.js +55 -0
- package/src/cyrillux.js +19 -12
- package/src/{cyrillux.spec.js → cyrillux.test.js} +13 -14
- package/src/disambiguateSeriesStatements.js +2 -2
- package/src/{disambiguateSeriesStatements.spec.js → disambiguateSeriesStatements.test.js} +12 -13
- package/src/double-commas.js +1 -1
- package/src/{double-commas.spec.js → double-commas.test.js} +9 -11
- package/src/duplicates-ind1.js +1 -1
- package/src/{duplicates-ind1.spec.js → duplicates-ind1.test.js} +12 -13
- package/src/{empty-fields.spec.js → empty-fields.test.js} +11 -13
- package/src/ending-punctuation.js +1 -1
- package/src/{ending-punctuation.spec.js → ending-punctuation.test.js} +172 -173
- package/src/{ending-whitespace.spec.js → ending-whitespace.test.js} +12 -13
- package/src/field-008-18-34-character-groups.js +2 -2
- package/src/{field-008-18-34-character-groups.spec.js → field-008-18-34-character-groups.test.js} +13 -13
- package/src/field-505-separators.js +3 -3
- package/src/{field-505-separators.spec.js → field-505-separators.test.js} +16 -14
- package/src/field-521-fix.js +2 -2
- package/src/{field-521-fix.spec.js → field-521-fix.test.js} +12 -13
- package/src/field-exclusion.js +1 -1
- package/src/{field-exclusion.spec.js → field-exclusion.test.js} +60 -57
- package/src/{field-structure.spec.js → field-structure.test.js} +29 -29
- package/src/{fields-present.spec.js → fields-present.test.js} +12 -15
- package/src/fix-33X.js +4 -4
- package/src/{fix-33X.spec.js → fix-33X.test.js} +13 -14
- package/src/fix-country-codes.js +1 -1
- package/src/{fix-country-codes.spec.js → fix-country-codes.test.js} +12 -13
- package/src/fix-language-codes.js +5 -5
- package/src/{fix-language-codes.spec.js → fix-language-codes.test.js} +12 -13
- package/src/fixRelatorTerms.js +5 -5
- package/src/{fixRelatorTerms.spec.js → fixRelatorTerms.test.js} +13 -13
- package/src/{fixed-fields.spec.js → fixed-fields.test.js} +11 -14
- package/src/identical-fields.js +1 -1
- package/src/{identical-fields.spec.js → identical-fields.test.js} +9 -11
- package/src/index.js +58 -58
- package/src/indicator-fixes.js +3 -3
- package/src/{indicator-fixes.spec.js → indicator-fixes.test.js} +9 -12
- package/src/isbn-issn.js +1 -1
- package/src/{isbn-issn.spec.js → isbn-issn.test.js} +20 -22
- package/src/{item-language.spec.js → item-language.test.js} +21 -22
- package/src/merge-fields/controlSubfields.js +1 -1
- package/src/merge-fields/counterpartField.js +8 -9
- package/src/merge-fields/index.js +1 -1
- package/src/merge-fields/mergableIndicator.js +1 -1
- package/src/merge-fields/mergeField.js +6 -6
- package/src/merge-fields/mergeIndicator.js +1 -1
- package/src/merge-fields/mergeOrAddPostprocess.js +4 -4
- package/src/merge-fields/mergeOrAddSubfield.js +2 -2
- package/src/merge-fields/mergeSubfield.js +4 -4
- package/src/merge-fields/removeDuplicateSubfields.js +2 -2
- package/src/{merge-fields.spec.js → merge-fields.test.js} +12 -13
- package/src/{mergeField500Lisapainokset.spec.js → mergeField500Lisapainokset.test.js} +12 -13
- package/src/mergeRelatorTermFields.js +5 -7
- package/src/{mergeRelatorTermFields.spec.js → mergeRelatorTermFields.test.js} +12 -13
- package/src/modernize-502.js +1 -1
- package/src/{modernize-502.spec.js → modernize-502.test.js} +12 -13
- package/src/multiple-subfield-0.js +3 -3
- package/src/{multiple-subfield-0.spec.js → multiple-subfield-0.test.js} +13 -13
- package/src/{non-breaking-space.spec.js → non-breaking-space.test.js} +12 -13
- package/src/normalize-dashes.js +2 -2
- package/src/{normalize-dashes.spec.js → normalize-dashes.test.js} +12 -13
- package/src/normalize-identifiers.js +1 -1
- package/src/{normalize-identifiers.spec.js → normalize-identifiers.test.js} +12 -13
- package/src/normalize-qualifying-information.js +2 -2
- package/src/{normalize-qualifying-information.spec.js → normalize-qualifying-information.test.js} +12 -13
- package/src/normalize-utf8-diacritics.js +2 -2
- package/src/{normalize-utf8-diacritics.spec.js → normalize-utf8-diacritics.test.js} +13 -13
- package/src/normalizeFieldForComparison.js +6 -6
- package/src/normalizeSubfieldValueForComparison.js +1 -1
- package/src/prepublicationUtils.js +4 -4
- package/src/punctuation/index.js +1 -1
- package/src/punctuation/rules/index.js +2 -2
- package/src/{punctuation.spec.js → punctuation.test.js} +12 -13
- package/src/punctuation2.js +4 -4
- package/src/{punctuation2.spec.js → punctuation2.test.js} +12 -13
- package/src/reindexSubfield6OccurenceNumbers.js +5 -7
- package/src/{reindexSubfield6OccurenceNumbers.spec.js → reindexSubfield6OccurenceNumbers.test.js} +12 -13
- package/src/removeDuplicateDataFields.js +11 -19
- package/src/{removeDuplicateDataFields.spec.js → removeDuplicateDataFields.test.js} +12 -13
- package/src/removeInferiorDataFields.js +11 -11
- package/src/{removeInferiorDataFields.spec.js → removeInferiorDataFields.test.js} +13 -13
- package/src/resolvable-ext-references-melinda.js +1 -1
- package/src/{resolvable-ext-references-melinda.spec.js → resolvable-ext-references-melinda.test.js} +42 -27
- package/src/resolveOrphanedSubfield6s.js +5 -5
- package/src/{resolveOrphanedSubfield6s.spec.js → resolveOrphanedSubfield6s.test.js} +13 -13
- package/src/sanitize-vocabulary-source-codes.js +4 -4
- package/src/{sanitize-vocabulary-source-codes.spec.js → sanitize-vocabulary-source-codes.test.js} +16 -14
- package/src/{sort-tags.spec.js → sort-tags.test.js} +9 -11
- package/src/sortFields.js +4 -4
- package/src/{sortFields.spec.js → sortFields.test.js} +12 -13
- package/src/sortRelatorTerms.js +3 -3
- package/src/{sortRelatorTerms.spec.js → sortRelatorTerms.test.js} +13 -13
- package/src/sortSubfields.js +1 -1
- package/src/{sortSubfields.spec.js → sortSubfields.test.js} +13 -13
- package/src/stripPunctuation.js +3 -3
- package/src/{stripPunctuation.spec.js → stripPunctuation.test.js} +13 -13
- package/src/subfield-exclusion.js +1 -1
- package/src/{subfield-exclusion.spec.js → subfield-exclusion.test.js} +45 -36
- package/src/subfield6Utils.js +6 -10
- package/src/subfield8Utils.js +4 -4
- package/src/subfieldValueNormalizations.js +3 -3
- package/src/{subfieldValueNormalizations.spec.js → subfieldValueNormalizations.test.js} +18 -14
- package/src/sync-007-and-300.js +2 -2
- package/src/{sync-007-and-300.spec.js → sync-007-and-300.test.js} +13 -13
- package/src/translate-terms.js +3 -3
- package/src/{translate-terms.spec.js → translate-terms.test.js} +13 -13
- package/src/{typeOfDate-008.spec.js → typeOfDate-008.test.js} +12 -13
- package/src/{unicode-decomposition.spec.js → unicode-decomposition.test.js} +10 -16
- package/src/update-field-540.js +2 -2
- package/src/{update-field-540.spec.js → update-field-540.test.js} +13 -10
- package/src/urn.js +2 -2
- package/src/{urn.spec.js → urn.test.js} +12 -13
- package/src/utils.js +3 -3
- package/test-fixtures/field-505-separators/03/expectedResult.json +3 -1
- package/test-fixtures/field-505-separators/03/record.json +3 -0
- package/test-fixtures/normalize-subfield-value/01/metadata.json +4 -1
- package/test-fixtures/normalize-subfield-value/01/record.json +3 -0
- package/test-fixtures/normalize-subfield-value/02/expectedResult.json +3 -1
- package/test-fixtures/normalize-subfield-value/02/metadata.json +2 -1
- package/test-fixtures/normalize-subfield-value/02/record.json +3 -0
- package/test-fixtures/sanitize-vocabulary-source-codes/f03/expectedResult.json +3 -1
- package/test-fixtures/sanitize-vocabulary-source-codes/f04/expectedResult.json +3 -1
- package/test-fixtures/sanitize-vocabulary-source-codes/v04/metadata.json +1 -4
- package/test-fixtures/sanitize-vocabulary-source-codes/v04/record.json +1 -1
- package/dist/access-rights.spec.js +0 -195
- package/dist/access-rights.spec.js.map +0 -1
- package/dist/addMissingField041.spec.js +0 -45
- package/dist/addMissingField041.spec.js.map +0 -1
- package/dist/addMissingField336.spec.js +0 -45
- package/dist/addMissingField336.spec.js.map +0 -1
- package/dist/addMissingField337.spec.js +0 -43
- package/dist/addMissingField337.spec.js.map +0 -1
- package/dist/addMissingField338.spec.js +0 -45
- package/dist/addMissingField338.spec.js.map +0 -1
- package/dist/cyrillux-usemarcon-replacement.spec.js +0 -45
- package/dist/cyrillux-usemarcon-replacement.spec.js.map +0 -1
- package/dist/cyrillux.spec.js +0 -46
- package/dist/cyrillux.spec.js.map +0 -1
- package/dist/disambiguateSeriesStatements.spec.js +0 -51
- package/dist/disambiguateSeriesStatements.spec.js.map +0 -1
- package/dist/double-commas.spec.js +0 -73
- package/dist/double-commas.spec.js.map +0 -1
- package/dist/duplicates-ind1.spec.js +0 -45
- package/dist/duplicates-ind1.spec.js.map +0 -1
- package/dist/empty-fields.spec.js +0 -118
- package/dist/empty-fields.spec.js.map +0 -1
- package/dist/ending-punctuation.spec.js +0 -2654
- package/dist/ending-punctuation.spec.js.map +0 -1
- package/dist/ending-whitespace.spec.js +0 -42
- package/dist/ending-whitespace.spec.js.map +0 -1
- package/dist/field-008-18-34-character-groups.spec.js +0 -51
- package/dist/field-008-18-34-character-groups.spec.js.map +0 -1
- package/dist/field-505-separators.spec.js +0 -51
- package/dist/field-505-separators.spec.js.map +0 -1
- package/dist/field-521-fix.spec.js +0 -51
- package/dist/field-521-fix.spec.js.map +0 -1
- package/dist/field-exclusion.spec.js +0 -1054
- package/dist/field-exclusion.spec.js.map +0 -1
- package/dist/field-structure.spec.js +0 -535
- package/dist/field-structure.spec.js.map +0 -1
- package/dist/fields-present.spec.js +0 -121
- package/dist/fields-present.spec.js.map +0 -1
- package/dist/fix-33X.spec.js +0 -45
- package/dist/fix-33X.spec.js.map +0 -1
- package/dist/fix-country-codes.spec.js +0 -51
- package/dist/fix-country-codes.spec.js.map +0 -1
- package/dist/fix-language-codes.spec.js +0 -44
- package/dist/fix-language-codes.spec.js.map +0 -1
- package/dist/fixRelatorTerms.spec.js +0 -51
- package/dist/fixRelatorTerms.spec.js.map +0 -1
- package/dist/fixed-fields.spec.js +0 -140
- package/dist/fixed-fields.spec.js.map +0 -1
- package/dist/identical-fields.spec.js +0 -99
- package/dist/identical-fields.spec.js.map +0 -1
- package/dist/indicator-fixes.spec.js +0 -51
- package/dist/indicator-fixes.spec.js.map +0 -1
- package/dist/isbn-issn.spec.js +0 -595
- package/dist/isbn-issn.spec.js.map +0 -1
- package/dist/item-language.spec.js +0 -306
- package/dist/item-language.spec.js.map +0 -1
- package/dist/melindaCustomMergeFields.json +0 -5120
- package/dist/merge-fields.spec.js +0 -51
- package/dist/merge-fields.spec.js.map +0 -1
- package/dist/mergeField500Lisapainokset.spec.js +0 -51
- package/dist/mergeField500Lisapainokset.spec.js.map +0 -1
- package/dist/mergeRelatorTermFields.spec.js +0 -51
- package/dist/mergeRelatorTermFields.spec.js.map +0 -1
- package/dist/modernize-502.spec.js +0 -49
- package/dist/modernize-502.spec.js.map +0 -1
- package/dist/multiple-subfield-0.spec.js +0 -51
- package/dist/multiple-subfield-0.spec.js.map +0 -1
- package/dist/non-breaking-space.spec.js +0 -42
- package/dist/non-breaking-space.spec.js.map +0 -1
- package/dist/normalize-dashes.spec.js +0 -51
- package/dist/normalize-dashes.spec.js.map +0 -1
- package/dist/normalize-identifiers.spec.js +0 -51
- package/dist/normalize-identifiers.spec.js.map +0 -1
- package/dist/normalize-qualifying-information.spec.js +0 -51
- package/dist/normalize-qualifying-information.spec.js.map +0 -1
- package/dist/normalize-utf8-diacritics.spec.js +0 -51
- package/dist/normalize-utf8-diacritics.spec.js.map +0 -1
- package/dist/punctuation.spec.js +0 -51
- package/dist/punctuation.spec.js.map +0 -1
- package/dist/punctuation2.spec.js +0 -51
- package/dist/punctuation2.spec.js.map +0 -1
- package/dist/reindexSubfield6OccurenceNumbers.spec.js +0 -51
- package/dist/reindexSubfield6OccurenceNumbers.spec.js.map +0 -1
- package/dist/removeDuplicateDataFields.spec.js +0 -51
- package/dist/removeDuplicateDataFields.spec.js.map +0 -1
- package/dist/removeInferiorDataFields.spec.js +0 -51
- package/dist/removeInferiorDataFields.spec.js.map +0 -1
- package/dist/resolvable-ext-references-melinda.spec.js +0 -166
- package/dist/resolvable-ext-references-melinda.spec.js.map +0 -1
- package/dist/resolveOrphanedSubfield6s.spec.js +0 -51
- package/dist/resolveOrphanedSubfield6s.spec.js.map +0 -1
- package/dist/sanitize-vocabulary-source-codes.spec.js +0 -51
- package/dist/sanitize-vocabulary-source-codes.spec.js.map +0 -1
- package/dist/sort-tags.spec.js +0 -207
- package/dist/sort-tags.spec.js.map +0 -1
- package/dist/sortFields.spec.js +0 -51
- package/dist/sortFields.spec.js.map +0 -1
- package/dist/sortRelatorTerms.spec.js +0 -51
- package/dist/sortRelatorTerms.spec.js.map +0 -1
- package/dist/sortSubfields.spec.js +0 -52
- package/dist/sortSubfields.spec.js.map +0 -1
- package/dist/stripPunctuation.spec.js +0 -51
- package/dist/stripPunctuation.spec.js.map +0 -1
- package/dist/subfield-exclusion.spec.js +0 -523
- package/dist/subfield-exclusion.spec.js.map +0 -1
- package/dist/subfieldValueNormalizations.spec.js +0 -51
- package/dist/subfieldValueNormalizations.spec.js.map +0 -1
- package/dist/sync-007-and-300.spec.js +0 -51
- package/dist/sync-007-and-300.spec.js.map +0 -1
- package/dist/translate-terms.spec.js +0 -51
- package/dist/translate-terms.spec.js.map +0 -1
- package/dist/typeOfDate-008.spec.js +0 -47
- package/dist/typeOfDate-008.spec.js.map +0 -1
- package/dist/unicode-decomposition.spec.js +0 -91
- package/dist/unicode-decomposition.spec.js.map +0 -1
- package/dist/update-field-540.spec.js +0 -51
- package/dist/update-field-540.spec.js.map +0 -1
- package/dist/urn.spec.js +0 -52
- package/dist/urn.spec.js.map +0 -1
- package/src/cyrillux-usemarcon-replacement.spec.js +0 -47
|
@@ -0,0 +1,821 @@
|
|
|
1
|
+
import assert from "node:assert";
|
|
2
|
+
import { MarcRecord } from "@natlibfi/marc-record";
|
|
3
|
+
import validatorFactory from "../src/field-exclusion.js";
|
|
4
|
+
import { describe, it } from "node:test";
|
|
5
|
+
describe("field-exclusion", () => {
|
|
6
|
+
describe("#validate: Check configuration validation", () => {
|
|
7
|
+
it("Creates a validator from simple config", async () => {
|
|
8
|
+
const config = [/^500$/u];
|
|
9
|
+
const validator = await validatorFactory(config);
|
|
10
|
+
assert.equal(typeof validator, "object");
|
|
11
|
+
assert.equal(typeof validator.description, "string");
|
|
12
|
+
assert.equal(typeof validator.validate, "function");
|
|
13
|
+
});
|
|
14
|
+
it("Creates a validator from complex config", async () => {
|
|
15
|
+
const config = [
|
|
16
|
+
{
|
|
17
|
+
tag: /^500$/u,
|
|
18
|
+
subfields: [{ code: /9/u, value: /^(?!FENNI<KEEP>).*$/u }]
|
|
19
|
+
}
|
|
20
|
+
];
|
|
21
|
+
const validator = await validatorFactory(config);
|
|
22
|
+
assert.equal(typeof validator, "object");
|
|
23
|
+
assert.equal(typeof validator.description, "string");
|
|
24
|
+
assert.equal(typeof validator.validate, "function");
|
|
25
|
+
});
|
|
26
|
+
it("Fails to create a validator from invalid config - tag", async () => {
|
|
27
|
+
const config = [
|
|
28
|
+
{
|
|
29
|
+
tag: "500",
|
|
30
|
+
subfields: [{ code: /9/u, value: /^(?!FENNI<KEEP>).*$/u }]
|
|
31
|
+
}
|
|
32
|
+
];
|
|
33
|
+
try {
|
|
34
|
+
await validatorFactory(config);
|
|
35
|
+
} catch (error) {
|
|
36
|
+
assert.equal(error instanceof Error, true);
|
|
37
|
+
assert.equal(error.message, "Configuration not valid - invalid data type for: tag");
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
it("Fails to create a validator from invalid config - msising array", async () => {
|
|
41
|
+
const config = {
|
|
42
|
+
tag: "500",
|
|
43
|
+
subfields: [{ code: /9/u, value: /^(?!FENNI<KEEP>).*$/u }]
|
|
44
|
+
};
|
|
45
|
+
try {
|
|
46
|
+
await validatorFactory(config);
|
|
47
|
+
} catch (error) {
|
|
48
|
+
assert.equal(error instanceof Error, true);
|
|
49
|
+
assert.equal(error.message, "Configuration array not provided");
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
it("Fails to create a validator from invalid config - code", async () => {
|
|
53
|
+
const config = [
|
|
54
|
+
{
|
|
55
|
+
tag: /^500$/u,
|
|
56
|
+
subfields: [{ code: 9, value: /^(?!FENNI<KEEP>).*$/u }]
|
|
57
|
+
}
|
|
58
|
+
];
|
|
59
|
+
try {
|
|
60
|
+
await validatorFactory(config);
|
|
61
|
+
} catch (error) {
|
|
62
|
+
assert.equal(error instanceof Error, true);
|
|
63
|
+
assert.equal(error.message, "Configuration not valid - invalid data type for: code");
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
it("Fails to create a validator from invalid config - value", async () => {
|
|
67
|
+
const config = [
|
|
68
|
+
{
|
|
69
|
+
tag: /^500$/u,
|
|
70
|
+
subfields: [{ code: /9/u, value: "Fenni" }]
|
|
71
|
+
}
|
|
72
|
+
];
|
|
73
|
+
try {
|
|
74
|
+
await validatorFactory(config);
|
|
75
|
+
} catch (error) {
|
|
76
|
+
assert.equal(error instanceof Error, true);
|
|
77
|
+
assert.equal(error.message, "Configuration not valid - invalid data type for: value");
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
it("Fails to create a validator from invalid config - exclusion: value, ind1", async () => {
|
|
81
|
+
const config = [
|
|
82
|
+
{
|
|
83
|
+
tag: /^500$/u,
|
|
84
|
+
value: /^500$/u,
|
|
85
|
+
ind1: /^500$/u,
|
|
86
|
+
subfields: [{ code: /9/u, value: /^(?!FENNI<KEEP>).*$/u }]
|
|
87
|
+
}
|
|
88
|
+
];
|
|
89
|
+
try {
|
|
90
|
+
await validatorFactory(config);
|
|
91
|
+
} catch (error) {
|
|
92
|
+
assert.equal(error instanceof Error, true);
|
|
93
|
+
assert.equal(error.message, "Configuration not valid - excluded element");
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
it("Fails to create a validator from invalid config - missing mandatory: tag", async () => {
|
|
97
|
+
const config = [
|
|
98
|
+
{
|
|
99
|
+
value: /^500$/u,
|
|
100
|
+
subfields: [{ code: /9/u, value: /^(?!FENNI<KEEP>).*$/u }]
|
|
101
|
+
}
|
|
102
|
+
];
|
|
103
|
+
try {
|
|
104
|
+
await validatorFactory(config);
|
|
105
|
+
} catch (error) {
|
|
106
|
+
assert.equal(error instanceof Error, true);
|
|
107
|
+
assert.equal(error.message, "Configuration not valid - missing mandatory element: tag");
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
it("Fails to create a validator from invalid config - subfield not object: array", async () => {
|
|
111
|
+
const config = [
|
|
112
|
+
{
|
|
113
|
+
tag: /^500$/u,
|
|
114
|
+
subfields: [
|
|
115
|
+
["/9/", "/^(?!FENNI<KEEP>).*$/"],
|
|
116
|
+
{ value: /^(?!FENNI<KEEP>).*$/u }
|
|
117
|
+
]
|
|
118
|
+
}
|
|
119
|
+
];
|
|
120
|
+
try {
|
|
121
|
+
await validatorFactory(config);
|
|
122
|
+
} catch (error) {
|
|
123
|
+
assert.equal(error instanceof Error, true);
|
|
124
|
+
assert.equal(error.message, "Configuration not valid - subfield: /9/,/^(?!FENNI<KEEP>).*$/ not object");
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
it("Fails to create a validator from invalid config - subfield not object: string", async () => {
|
|
128
|
+
const config = [
|
|
129
|
+
{
|
|
130
|
+
tag: /^500$/u,
|
|
131
|
+
subfields: [
|
|
132
|
+
"/9/",
|
|
133
|
+
"/^(?!FENNI<KEEP>).*$/",
|
|
134
|
+
{ value: /^(?!FENNI<KEEP>).*$/u }
|
|
135
|
+
]
|
|
136
|
+
}
|
|
137
|
+
];
|
|
138
|
+
try {
|
|
139
|
+
await validatorFactory(config);
|
|
140
|
+
} catch (error) {
|
|
141
|
+
assert.equal(error instanceof Error, true);
|
|
142
|
+
assert.equal(error.message, "Configuration not valid - subfield: /9/ not object");
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
it("Fails to create a validator from invalid config - missing mandatory: subfield.code", async () => {
|
|
146
|
+
const config = [
|
|
147
|
+
{
|
|
148
|
+
tag: /^500$/u,
|
|
149
|
+
subfields: [
|
|
150
|
+
{ code: /9/u, value: /^(?!FENNI<KEEP>).*$/u },
|
|
151
|
+
{ value: /^(?!FENNI<KEEP>).*$/u }
|
|
152
|
+
]
|
|
153
|
+
}
|
|
154
|
+
];
|
|
155
|
+
try {
|
|
156
|
+
await validatorFactory(config);
|
|
157
|
+
} catch (error) {
|
|
158
|
+
assert.equal(error instanceof Error, true);
|
|
159
|
+
assert.equal(error.message, "Configuration not valid - missing mandatory element: code");
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
it("Fails to create a validator from invalid config - unidentified field: unidentified", async () => {
|
|
163
|
+
const config = [
|
|
164
|
+
{
|
|
165
|
+
tag: /^500$/u,
|
|
166
|
+
unidentified: /^500$/u,
|
|
167
|
+
subfields: [
|
|
168
|
+
{ code: /9/u, value: /^(?!FENNI<KEEP>).*$/u },
|
|
169
|
+
{ value: /^(?!FENNI<KEEP>).*$/u }
|
|
170
|
+
]
|
|
171
|
+
}
|
|
172
|
+
];
|
|
173
|
+
try {
|
|
174
|
+
await validatorFactory(config);
|
|
175
|
+
} catch (error) {
|
|
176
|
+
assert.equal(error instanceof Error, true);
|
|
177
|
+
assert.equal(error.message, "Configuration not valid - unidentified value: unidentified");
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
describe("#validate: Simple configuration (spec)", () => {
|
|
182
|
+
const config = [
|
|
183
|
+
{
|
|
184
|
+
tag: /^500$/u
|
|
185
|
+
}
|
|
186
|
+
];
|
|
187
|
+
const recordValid = new MarcRecord({
|
|
188
|
+
leader: "foo",
|
|
189
|
+
fields: [
|
|
190
|
+
{
|
|
191
|
+
tag: "245",
|
|
192
|
+
ind1: " ",
|
|
193
|
+
ind2: " ",
|
|
194
|
+
subfields: [{ code: "a", value: "Fubar" }]
|
|
195
|
+
}
|
|
196
|
+
]
|
|
197
|
+
});
|
|
198
|
+
const recordInvalid = new MarcRecord({
|
|
199
|
+
leader: "foo",
|
|
200
|
+
fields: [
|
|
201
|
+
{
|
|
202
|
+
tag: "245",
|
|
203
|
+
ind1: " ",
|
|
204
|
+
ind2: " ",
|
|
205
|
+
subfields: [{ code: "a", value: "Fubar" }]
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
tag: "500",
|
|
209
|
+
ind1: " ",
|
|
210
|
+
ind2: " ",
|
|
211
|
+
subfields: [
|
|
212
|
+
{ code: "a", value: "Foo Bar Foo Bar Foo Bar" },
|
|
213
|
+
{ code: "9", value: "ALMA<KEEP>" }
|
|
214
|
+
]
|
|
215
|
+
}
|
|
216
|
+
]
|
|
217
|
+
});
|
|
218
|
+
const recordInvalidDouble = new MarcRecord({
|
|
219
|
+
leader: "foo",
|
|
220
|
+
fields: [
|
|
221
|
+
{
|
|
222
|
+
tag: "245",
|
|
223
|
+
ind1: " ",
|
|
224
|
+
ind2: " ",
|
|
225
|
+
subfields: [{ code: "a", value: "Fubar" }]
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
tag: "500",
|
|
229
|
+
ind1: " ",
|
|
230
|
+
ind2: " ",
|
|
231
|
+
subfields: [
|
|
232
|
+
{ code: "a", value: "Foo" },
|
|
233
|
+
{ code: "9", value: "ALMA<KEEP>" }
|
|
234
|
+
]
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
tag: "500",
|
|
238
|
+
ind1: " ",
|
|
239
|
+
ind2: " ",
|
|
240
|
+
subfields: [
|
|
241
|
+
{ code: "a", value: "Bar" },
|
|
242
|
+
{ code: "9", value: "ALMA<KEEP>" }
|
|
243
|
+
]
|
|
244
|
+
}
|
|
245
|
+
]
|
|
246
|
+
});
|
|
247
|
+
const recordInvalidFixed = new MarcRecord({
|
|
248
|
+
leader: "foo",
|
|
249
|
+
fields: [
|
|
250
|
+
{
|
|
251
|
+
tag: "245",
|
|
252
|
+
ind1: " ",
|
|
253
|
+
ind2: " ",
|
|
254
|
+
subfields: [{ code: "a", value: "Fubar" }]
|
|
255
|
+
}
|
|
256
|
+
]
|
|
257
|
+
});
|
|
258
|
+
it("Finds the record valid (spec)", async () => {
|
|
259
|
+
const validator = await validatorFactory(config);
|
|
260
|
+
const { valid, message } = await validator.validate(recordValid);
|
|
261
|
+
assert.deepEqual({ valid, message }, { valid: true, message: [] });
|
|
262
|
+
});
|
|
263
|
+
it("Finds the record invalid (spec)", async () => {
|
|
264
|
+
const validator = await validatorFactory(config);
|
|
265
|
+
const { valid, message } = await validator.validate(recordInvalid);
|
|
266
|
+
assert.deepEqual({ valid, message }, { valid: false, message: ["Field $500 should be excluded"] });
|
|
267
|
+
});
|
|
268
|
+
it("Finds the record invalid - double", async () => {
|
|
269
|
+
const validator = await validatorFactory(config);
|
|
270
|
+
const { valid, message } = await validator.validate(recordInvalidDouble);
|
|
271
|
+
assert.deepEqual({ valid, message }, { valid: false, message: ["Field $500 should be excluded", "Field $500 should be excluded"] });
|
|
272
|
+
});
|
|
273
|
+
it("Repairs invalid record", async () => {
|
|
274
|
+
const validator = await validatorFactory(config);
|
|
275
|
+
await validator.fix(recordInvalid);
|
|
276
|
+
assert.equal(recordInvalid.equalsTo(recordInvalidFixed), true);
|
|
277
|
+
});
|
|
278
|
+
it("Repairs invalid record - double", async () => {
|
|
279
|
+
const validator = await validatorFactory(config);
|
|
280
|
+
await validator.fix(recordInvalidDouble);
|
|
281
|
+
assert.equal(recordInvalidDouble.equalsTo(recordInvalidFixed), true);
|
|
282
|
+
});
|
|
283
|
+
});
|
|
284
|
+
describe("#validate: Simple multi tag configuration (spec)", () => {
|
|
285
|
+
const config = [
|
|
286
|
+
{
|
|
287
|
+
tag: /^(648|650|651|655)$/u
|
|
288
|
+
}
|
|
289
|
+
];
|
|
290
|
+
const recordValid = new MarcRecord({
|
|
291
|
+
leader: "foo",
|
|
292
|
+
fields: [
|
|
293
|
+
{
|
|
294
|
+
tag: "245",
|
|
295
|
+
ind1: " ",
|
|
296
|
+
ind2: " ",
|
|
297
|
+
subfields: [{ code: "a", value: "Fubar" }]
|
|
298
|
+
}
|
|
299
|
+
]
|
|
300
|
+
});
|
|
301
|
+
const recordInvalid = new MarcRecord({
|
|
302
|
+
leader: "foo",
|
|
303
|
+
fields: [
|
|
304
|
+
{
|
|
305
|
+
tag: "245",
|
|
306
|
+
ind1: " ",
|
|
307
|
+
ind2: " ",
|
|
308
|
+
subfields: [{ code: "a", value: "Fubar" }]
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
tag: "648",
|
|
312
|
+
ind1: " ",
|
|
313
|
+
ind2: " ",
|
|
314
|
+
subfields: [
|
|
315
|
+
{ code: "a", value: "Foo Bar Foo Bar Foo Bar" },
|
|
316
|
+
{ code: "9", value: "ALMA<KEEP>" }
|
|
317
|
+
]
|
|
318
|
+
}
|
|
319
|
+
]
|
|
320
|
+
});
|
|
321
|
+
const recordInvalidDouble = new MarcRecord({
|
|
322
|
+
leader: "foo",
|
|
323
|
+
fields: [
|
|
324
|
+
{
|
|
325
|
+
tag: "245",
|
|
326
|
+
ind1: " ",
|
|
327
|
+
ind2: " ",
|
|
328
|
+
subfields: [{ code: "a", value: "Fubar" }]
|
|
329
|
+
},
|
|
330
|
+
{
|
|
331
|
+
tag: "648",
|
|
332
|
+
ind1: " ",
|
|
333
|
+
ind2: " ",
|
|
334
|
+
subfields: [
|
|
335
|
+
{ code: "a", value: "Foo" },
|
|
336
|
+
{ code: "9", value: "ALMA<KEEP>" }
|
|
337
|
+
]
|
|
338
|
+
},
|
|
339
|
+
{
|
|
340
|
+
tag: "650",
|
|
341
|
+
ind1: " ",
|
|
342
|
+
ind2: " ",
|
|
343
|
+
subfields: [
|
|
344
|
+
{ code: "a", value: "Bar" },
|
|
345
|
+
{ code: "9", value: "ALMA<KEEP>" }
|
|
346
|
+
]
|
|
347
|
+
}
|
|
348
|
+
]
|
|
349
|
+
});
|
|
350
|
+
const recordInvalidFixed = new MarcRecord({
|
|
351
|
+
leader: "foo",
|
|
352
|
+
fields: [
|
|
353
|
+
{
|
|
354
|
+
tag: "245",
|
|
355
|
+
ind1: " ",
|
|
356
|
+
ind2: " ",
|
|
357
|
+
subfields: [{ code: "a", value: "Fubar" }]
|
|
358
|
+
}
|
|
359
|
+
]
|
|
360
|
+
});
|
|
361
|
+
it("Finds the record valid (spec)", async () => {
|
|
362
|
+
const validator = await validatorFactory(config);
|
|
363
|
+
const { valid, message } = await validator.validate(recordValid);
|
|
364
|
+
assert.deepEqual({ valid, message }, { valid: true, message: [] });
|
|
365
|
+
});
|
|
366
|
+
it("Finds the record invalid (spec)", async () => {
|
|
367
|
+
const validator = await validatorFactory(config);
|
|
368
|
+
const { valid, message } = await validator.validate(recordInvalid);
|
|
369
|
+
assert.deepEqual({ valid, message }, { valid: false, message: ["Field $648 should be excluded"] });
|
|
370
|
+
});
|
|
371
|
+
it("Finds the record invalid - double", async () => {
|
|
372
|
+
const validator = await validatorFactory(config);
|
|
373
|
+
const { valid, message } = await validator.validate(recordInvalidDouble);
|
|
374
|
+
assert.deepEqual({ valid, message }, { valid: false, message: ["Field $648 should be excluded", "Field $650 should be excluded"] });
|
|
375
|
+
});
|
|
376
|
+
it("Repairs invalid record", async () => {
|
|
377
|
+
const validator = await validatorFactory(config);
|
|
378
|
+
await validator.fix(recordInvalid);
|
|
379
|
+
assert.equal(recordInvalid.equalsTo(recordInvalidFixed), true);
|
|
380
|
+
});
|
|
381
|
+
it("Repairs invalid record - double", async () => {
|
|
382
|
+
const validator = await validatorFactory(config);
|
|
383
|
+
await validator.fix(recordInvalidDouble);
|
|
384
|
+
assert.equal(recordInvalidDouble.equalsTo(recordInvalidFixed), true);
|
|
385
|
+
});
|
|
386
|
+
});
|
|
387
|
+
describe("#validate: Simple multi tag configuration - No object (spec)", () => {
|
|
388
|
+
const config = [/^(648|650|651|655)$/u];
|
|
389
|
+
const recordValid = new MarcRecord({
|
|
390
|
+
leader: "foo",
|
|
391
|
+
fields: [
|
|
392
|
+
{
|
|
393
|
+
tag: "245",
|
|
394
|
+
ind1: " ",
|
|
395
|
+
ind2: " ",
|
|
396
|
+
subfields: [{ code: "a", value: "Fubar" }]
|
|
397
|
+
}
|
|
398
|
+
]
|
|
399
|
+
});
|
|
400
|
+
const recordInvalid = new MarcRecord({
|
|
401
|
+
leader: "foo",
|
|
402
|
+
fields: [
|
|
403
|
+
{
|
|
404
|
+
tag: "245",
|
|
405
|
+
ind1: " ",
|
|
406
|
+
ind2: " ",
|
|
407
|
+
subfields: [{ code: "a", value: "Fubar" }]
|
|
408
|
+
},
|
|
409
|
+
{
|
|
410
|
+
tag: "648",
|
|
411
|
+
ind1: " ",
|
|
412
|
+
ind2: " ",
|
|
413
|
+
subfields: [
|
|
414
|
+
{ code: "a", value: "Foo Bar Foo Bar Foo Bar" },
|
|
415
|
+
{ code: "9", value: "ALMA<KEEP>" }
|
|
416
|
+
]
|
|
417
|
+
}
|
|
418
|
+
]
|
|
419
|
+
});
|
|
420
|
+
const recordInvalidDouble = new MarcRecord({
|
|
421
|
+
leader: "foo",
|
|
422
|
+
fields: [
|
|
423
|
+
{
|
|
424
|
+
tag: "245",
|
|
425
|
+
ind1: " ",
|
|
426
|
+
ind2: " ",
|
|
427
|
+
subfields: [{ code: "a", value: "Fubar" }]
|
|
428
|
+
},
|
|
429
|
+
{
|
|
430
|
+
tag: "648",
|
|
431
|
+
ind1: " ",
|
|
432
|
+
ind2: " ",
|
|
433
|
+
subfields: [
|
|
434
|
+
{ code: "a", value: "Foo" },
|
|
435
|
+
{ code: "9", value: "ALMA<KEEP>" }
|
|
436
|
+
]
|
|
437
|
+
},
|
|
438
|
+
{
|
|
439
|
+
tag: "650",
|
|
440
|
+
ind1: " ",
|
|
441
|
+
ind2: " ",
|
|
442
|
+
subfields: [
|
|
443
|
+
{ code: "a", value: "Bar" },
|
|
444
|
+
{ code: "9", value: "ALMA<KEEP>" }
|
|
445
|
+
]
|
|
446
|
+
}
|
|
447
|
+
]
|
|
448
|
+
});
|
|
449
|
+
const recordInvalidFixed = new MarcRecord({
|
|
450
|
+
leader: "foo",
|
|
451
|
+
fields: [
|
|
452
|
+
{
|
|
453
|
+
tag: "245",
|
|
454
|
+
ind1: " ",
|
|
455
|
+
ind2: " ",
|
|
456
|
+
subfields: [{ code: "a", value: "Fubar" }]
|
|
457
|
+
}
|
|
458
|
+
]
|
|
459
|
+
});
|
|
460
|
+
it("Finds the record valid (spec)", async () => {
|
|
461
|
+
const validator = await validatorFactory(config);
|
|
462
|
+
const { valid, message } = await validator.validate(recordValid);
|
|
463
|
+
assert.deepEqual({ valid, message }, { valid: true, message: [] });
|
|
464
|
+
});
|
|
465
|
+
it("Finds the record invalid (spec)", async () => {
|
|
466
|
+
const validator = await validatorFactory(config);
|
|
467
|
+
const { valid, message } = await validator.validate(recordInvalid);
|
|
468
|
+
assert.deepEqual({ valid, message }, { valid: false, message: ["Field $648 should be excluded"] });
|
|
469
|
+
});
|
|
470
|
+
it("Finds the record invalid - double", async () => {
|
|
471
|
+
const validator = await validatorFactory(config);
|
|
472
|
+
const { valid, message } = await validator.validate(recordInvalidDouble);
|
|
473
|
+
assert.deepEqual({ valid, message }, { valid: false, message: ["Field $648 should be excluded", "Field $650 should be excluded"] });
|
|
474
|
+
});
|
|
475
|
+
it("Repairs invalid record", async () => {
|
|
476
|
+
const validator = await validatorFactory(config);
|
|
477
|
+
await validator.fix(recordInvalid);
|
|
478
|
+
assert.deepEqual(recordInvalid.equalsTo(recordInvalidFixed), true);
|
|
479
|
+
});
|
|
480
|
+
it("Repairs invalid record - double", async () => {
|
|
481
|
+
const validator = await validatorFactory(config);
|
|
482
|
+
await validator.fix(recordInvalidDouble);
|
|
483
|
+
assert.equal(recordInvalidDouble.equalsTo(recordInvalidFixed), true);
|
|
484
|
+
});
|
|
485
|
+
});
|
|
486
|
+
describe("#validate: Complex configuration (spec)", () => {
|
|
487
|
+
const config = [
|
|
488
|
+
{
|
|
489
|
+
tag: /^500$/u,
|
|
490
|
+
subfields: [{ code: /9/u, value: /^(?!FENNI<KEEP>).*$/u }]
|
|
491
|
+
}
|
|
492
|
+
];
|
|
493
|
+
const recordValid = new MarcRecord({
|
|
494
|
+
leader: "foo",
|
|
495
|
+
fields: [
|
|
496
|
+
{
|
|
497
|
+
tag: "245",
|
|
498
|
+
ind1: " ",
|
|
499
|
+
ind2: " ",
|
|
500
|
+
subfields: [{ code: "a", value: "Fubar" }]
|
|
501
|
+
},
|
|
502
|
+
{
|
|
503
|
+
tag: "500",
|
|
504
|
+
ind1: " ",
|
|
505
|
+
ind2: " ",
|
|
506
|
+
subfields: [
|
|
507
|
+
{ code: "a", value: "Foo Bar Foo Bar Foo Bar" },
|
|
508
|
+
{ code: "9", value: "FENNI<KEEP>" }
|
|
509
|
+
]
|
|
510
|
+
}
|
|
511
|
+
]
|
|
512
|
+
});
|
|
513
|
+
const recordInvalid = new MarcRecord({
|
|
514
|
+
leader: "foo",
|
|
515
|
+
fields: [
|
|
516
|
+
{
|
|
517
|
+
tag: "245",
|
|
518
|
+
ind1: " ",
|
|
519
|
+
ind2: " ",
|
|
520
|
+
subfields: [{ code: "a", value: "Fubar" }]
|
|
521
|
+
},
|
|
522
|
+
{
|
|
523
|
+
tag: "500",
|
|
524
|
+
ind1: " ",
|
|
525
|
+
ind2: " ",
|
|
526
|
+
subfields: [
|
|
527
|
+
{ code: "a", value: "Foo Bar Foo Bar Foo Bar" },
|
|
528
|
+
{ code: "9", value: "ALMA<KEEP>" }
|
|
529
|
+
]
|
|
530
|
+
}
|
|
531
|
+
]
|
|
532
|
+
});
|
|
533
|
+
const recordInvalidFixed = new MarcRecord({
|
|
534
|
+
leader: "foo",
|
|
535
|
+
fields: [
|
|
536
|
+
{
|
|
537
|
+
tag: "245",
|
|
538
|
+
ind1: " ",
|
|
539
|
+
ind2: " ",
|
|
540
|
+
subfields: [{ code: "a", value: "Fubar" }]
|
|
541
|
+
}
|
|
542
|
+
]
|
|
543
|
+
});
|
|
544
|
+
it("Finds the record valid (spec)", async () => {
|
|
545
|
+
const validator = await validatorFactory(config);
|
|
546
|
+
const { valid, message } = await validator.validate(recordValid);
|
|
547
|
+
assert.deepEqual({ valid, message }, { valid: true, message: [] });
|
|
548
|
+
});
|
|
549
|
+
it("Finds the record invalid (spec)", async () => {
|
|
550
|
+
const validator = await validatorFactory(config);
|
|
551
|
+
const { valid, message } = await validator.validate(recordInvalid);
|
|
552
|
+
assert.deepEqual({ valid, message }, { valid: false, message: ["Field $500 should be excluded"] });
|
|
553
|
+
});
|
|
554
|
+
it("Repairs invalid record", async () => {
|
|
555
|
+
const validator = await validatorFactory(config);
|
|
556
|
+
await validator.fix(recordInvalid);
|
|
557
|
+
assert.equal(recordInvalid.equalsTo(recordInvalidFixed), true);
|
|
558
|
+
});
|
|
559
|
+
});
|
|
560
|
+
describe("#validate: Complex multi tag configuration (spec)", () => {
|
|
561
|
+
const config = [
|
|
562
|
+
{
|
|
563
|
+
tag: /^(648|650|651|655)$/u,
|
|
564
|
+
subfields: [{ code: /^2$/u, value: /^(ysa|musa|allars|cilla)$/u }]
|
|
565
|
+
}
|
|
566
|
+
];
|
|
567
|
+
const recordValid = new MarcRecord({
|
|
568
|
+
leader: "foo",
|
|
569
|
+
fields: [
|
|
570
|
+
{
|
|
571
|
+
tag: "245",
|
|
572
|
+
ind1: " ",
|
|
573
|
+
ind2: " ",
|
|
574
|
+
subfields: [{ code: "a", value: "Fubar" }]
|
|
575
|
+
},
|
|
576
|
+
{
|
|
577
|
+
tag: "650",
|
|
578
|
+
ind1: " ",
|
|
579
|
+
ind2: " ",
|
|
580
|
+
subfields: [
|
|
581
|
+
{ code: "a", value: "Foo Bar Foo Bar Foo Bar" },
|
|
582
|
+
{ code: "2", value: "yso" }
|
|
583
|
+
]
|
|
584
|
+
}
|
|
585
|
+
]
|
|
586
|
+
});
|
|
587
|
+
const recordInvalid = new MarcRecord({
|
|
588
|
+
leader: "foo",
|
|
589
|
+
fields: [
|
|
590
|
+
{
|
|
591
|
+
tag: "245",
|
|
592
|
+
ind1: " ",
|
|
593
|
+
ind2: " ",
|
|
594
|
+
subfields: [{ code: "a", value: "Fubar" }]
|
|
595
|
+
},
|
|
596
|
+
{
|
|
597
|
+
tag: "650",
|
|
598
|
+
ind1: " ",
|
|
599
|
+
ind2: " ",
|
|
600
|
+
subfields: [
|
|
601
|
+
{ code: "a", value: "Foo Bar Foo Bar Foo Bar" },
|
|
602
|
+
{ code: "2", value: "ysa" }
|
|
603
|
+
]
|
|
604
|
+
}
|
|
605
|
+
]
|
|
606
|
+
});
|
|
607
|
+
const recordInvalidMulti = new MarcRecord({
|
|
608
|
+
leader: "foo",
|
|
609
|
+
fields: [
|
|
610
|
+
{
|
|
611
|
+
tag: "245",
|
|
612
|
+
ind1: " ",
|
|
613
|
+
ind2: " ",
|
|
614
|
+
subfields: [{ code: "a", value: "Fubar" }]
|
|
615
|
+
},
|
|
616
|
+
{
|
|
617
|
+
tag: "648",
|
|
618
|
+
ind1: " ",
|
|
619
|
+
ind2: " ",
|
|
620
|
+
subfields: [{ code: "2", value: "ysa" }]
|
|
621
|
+
},
|
|
622
|
+
{
|
|
623
|
+
tag: "650",
|
|
624
|
+
ind1: " ",
|
|
625
|
+
ind2: " ",
|
|
626
|
+
subfields: [{ code: "2", value: "ysa" }]
|
|
627
|
+
},
|
|
628
|
+
{
|
|
629
|
+
tag: "650",
|
|
630
|
+
ind1: " ",
|
|
631
|
+
ind2: " ",
|
|
632
|
+
subfields: [{ code: "2", value: "ysa" }]
|
|
633
|
+
},
|
|
634
|
+
{
|
|
635
|
+
tag: "651",
|
|
636
|
+
ind1: " ",
|
|
637
|
+
ind2: " ",
|
|
638
|
+
subfields: [{ code: "2", value: "ysa" }]
|
|
639
|
+
},
|
|
640
|
+
{
|
|
641
|
+
tag: "655",
|
|
642
|
+
ind1: " ",
|
|
643
|
+
ind2: " ",
|
|
644
|
+
subfields: [{ code: "2", value: "ysa" }]
|
|
645
|
+
}
|
|
646
|
+
]
|
|
647
|
+
});
|
|
648
|
+
const recordInvalidFixed = new MarcRecord({
|
|
649
|
+
leader: "foo",
|
|
650
|
+
fields: [
|
|
651
|
+
{
|
|
652
|
+
tag: "245",
|
|
653
|
+
ind1: " ",
|
|
654
|
+
ind2: " ",
|
|
655
|
+
subfields: [{ code: "a", value: "Fubar" }]
|
|
656
|
+
}
|
|
657
|
+
]
|
|
658
|
+
});
|
|
659
|
+
it("Finds the record valid (spec)", async () => {
|
|
660
|
+
const validator = await validatorFactory(config);
|
|
661
|
+
const { valid, message } = await validator.validate(recordValid);
|
|
662
|
+
assert.deepEqual({ valid, message }, { valid: true, message: [] });
|
|
663
|
+
});
|
|
664
|
+
it("Finds the record invalid (spec)", async () => {
|
|
665
|
+
const validator = await validatorFactory(config);
|
|
666
|
+
const { valid, message } = await validator.validate(recordInvalid);
|
|
667
|
+
assert.deepEqual({ valid, message }, { valid: false, message: ["Field $650 should be excluded"] });
|
|
668
|
+
});
|
|
669
|
+
it("Finds the record invalid (spec)", async () => {
|
|
670
|
+
const validator = await validatorFactory(config);
|
|
671
|
+
const { valid, message } = await validator.validate(recordInvalidMulti);
|
|
672
|
+
assert.deepEqual({ valid, message }, { valid: false, message: [
|
|
673
|
+
"Field $648 should be excluded",
|
|
674
|
+
"Field $650 should be excluded",
|
|
675
|
+
"Field $650 should be excluded",
|
|
676
|
+
"Field $651 should be excluded",
|
|
677
|
+
"Field $655 should be excluded"
|
|
678
|
+
] });
|
|
679
|
+
});
|
|
680
|
+
it("Repairs invalid multi record", async () => {
|
|
681
|
+
const validator = await validatorFactory(config);
|
|
682
|
+
await validator.fix(recordInvalidMulti);
|
|
683
|
+
assert.equal(recordInvalidMulti.equalsTo(recordInvalidFixed), true);
|
|
684
|
+
});
|
|
685
|
+
it("Repairs invalid record", async () => {
|
|
686
|
+
const validator = await validatorFactory(config);
|
|
687
|
+
await validator.fix(recordInvalid);
|
|
688
|
+
assert.equal(recordInvalid.equalsTo(recordInvalidFixed), true);
|
|
689
|
+
});
|
|
690
|
+
});
|
|
691
|
+
describe("#validate: Custom configuration", () => {
|
|
692
|
+
const configInd = [
|
|
693
|
+
{
|
|
694
|
+
tag: /^500$/u,
|
|
695
|
+
ind1: /^8$/u,
|
|
696
|
+
ind2: /^4$/u
|
|
697
|
+
}
|
|
698
|
+
];
|
|
699
|
+
const configValue = [
|
|
700
|
+
{
|
|
701
|
+
tag: /^500$/u,
|
|
702
|
+
value: /^8$/u
|
|
703
|
+
}
|
|
704
|
+
];
|
|
705
|
+
const recordValid = new MarcRecord({
|
|
706
|
+
leader: "foo",
|
|
707
|
+
fields: [
|
|
708
|
+
{
|
|
709
|
+
tag: "500",
|
|
710
|
+
ind1: "8",
|
|
711
|
+
ind2: "0",
|
|
712
|
+
subfields: [
|
|
713
|
+
{ code: "a", value: "Foo Bar Foo Bar Foo Bar" },
|
|
714
|
+
{ code: "9", value: "ALMA<KEEP>" }
|
|
715
|
+
]
|
|
716
|
+
}
|
|
717
|
+
]
|
|
718
|
+
});
|
|
719
|
+
const recordIndInvalid = new MarcRecord({
|
|
720
|
+
leader: "foo",
|
|
721
|
+
fields: [
|
|
722
|
+
{
|
|
723
|
+
tag: "245",
|
|
724
|
+
ind1: " ",
|
|
725
|
+
ind2: " ",
|
|
726
|
+
subfields: [{ code: "a", value: "Fubar" }]
|
|
727
|
+
},
|
|
728
|
+
{
|
|
729
|
+
tag: "500",
|
|
730
|
+
ind1: "8",
|
|
731
|
+
ind2: "4",
|
|
732
|
+
subfields: [
|
|
733
|
+
{ code: "a", value: "Foo Bar Foo Bar Foo Bar" },
|
|
734
|
+
{ code: "9", value: "ALMA<KEEP>" }
|
|
735
|
+
]
|
|
736
|
+
}
|
|
737
|
+
]
|
|
738
|
+
});
|
|
739
|
+
const recordValueInvalid = new MarcRecord({
|
|
740
|
+
leader: "foo",
|
|
741
|
+
fields: [
|
|
742
|
+
{
|
|
743
|
+
tag: "245",
|
|
744
|
+
ind1: " ",
|
|
745
|
+
ind2: " ",
|
|
746
|
+
subfields: [{ code: "a", value: "Fubar" }]
|
|
747
|
+
},
|
|
748
|
+
{
|
|
749
|
+
tag: "500",
|
|
750
|
+
value: "8"
|
|
751
|
+
}
|
|
752
|
+
]
|
|
753
|
+
});
|
|
754
|
+
const recordInvalidFixed = new MarcRecord({
|
|
755
|
+
leader: "foo",
|
|
756
|
+
fields: [
|
|
757
|
+
{
|
|
758
|
+
tag: "245",
|
|
759
|
+
ind1: " ",
|
|
760
|
+
ind2: " ",
|
|
761
|
+
subfields: [{ code: "a", value: "Fubar" }]
|
|
762
|
+
}
|
|
763
|
+
]
|
|
764
|
+
});
|
|
765
|
+
it("Finds the record valid - Ind1&Ind2", async () => {
|
|
766
|
+
const validator = await validatorFactory(configInd);
|
|
767
|
+
const { valid, message } = await validator.validate(recordValid);
|
|
768
|
+
assert.deepEqual({ valid, message }, { valid: true, message: [] });
|
|
769
|
+
});
|
|
770
|
+
it("Finds the record valid - Value", async () => {
|
|
771
|
+
const validator = await validatorFactory(configValue);
|
|
772
|
+
const { valid, message } = await validator.validate(recordValid);
|
|
773
|
+
assert.deepEqual({ valid, message }, { valid: true, message: [] });
|
|
774
|
+
});
|
|
775
|
+
it("Finds the record invalid - Ind", async () => {
|
|
776
|
+
const validator = await validatorFactory(configInd);
|
|
777
|
+
const { valid, message } = await validator.validate(recordIndInvalid);
|
|
778
|
+
assert.deepEqual({ valid, message }, { valid: false, message: ["Field $500 should be excluded"] });
|
|
779
|
+
});
|
|
780
|
+
it("Finds the record invalid - Value", async () => {
|
|
781
|
+
const validator = await validatorFactory(configValue);
|
|
782
|
+
const { valid, message } = await validator.validate(recordValueInvalid);
|
|
783
|
+
assert.deepEqual({ valid, message }, { valid: false, message: ["Field $500 should be excluded"] });
|
|
784
|
+
});
|
|
785
|
+
it("Repairs invalid record - Ind", async () => {
|
|
786
|
+
const validator = await validatorFactory(configInd);
|
|
787
|
+
await validator.fix(recordIndInvalid);
|
|
788
|
+
assert.equal(recordIndInvalid.equalsTo(recordInvalidFixed), true);
|
|
789
|
+
});
|
|
790
|
+
it("Repairs invalid record - Value", async () => {
|
|
791
|
+
const validator = await validatorFactory(configValue);
|
|
792
|
+
await validator.fix(recordValueInvalid);
|
|
793
|
+
assert.equal(recordValueInvalid.equalsTo(recordInvalidFixed), true);
|
|
794
|
+
});
|
|
795
|
+
});
|
|
796
|
+
describe("Dependencies", () => {
|
|
797
|
+
it("Finds the record invalid because dependency matches", async () => {
|
|
798
|
+
const config = [
|
|
799
|
+
{
|
|
800
|
+
tag: /^041$/u,
|
|
801
|
+
dependencies: [{ leader: /^.{6}a/u }]
|
|
802
|
+
}
|
|
803
|
+
];
|
|
804
|
+
const record = new MarcRecord({
|
|
805
|
+
leader: "00000cam^a22003372i^4500",
|
|
806
|
+
fields: [
|
|
807
|
+
{
|
|
808
|
+
tag: "041",
|
|
809
|
+
ind1: " ",
|
|
810
|
+
ind2: " ",
|
|
811
|
+
subfields: [{ code: "a", value: "Fubar" }]
|
|
812
|
+
}
|
|
813
|
+
]
|
|
814
|
+
});
|
|
815
|
+
const validator = await validatorFactory(config);
|
|
816
|
+
const { valid, message } = await validator.validate(record);
|
|
817
|
+
assert.deepEqual({ valid, message }, { valid: false, message: ["Field $041 should be excluded"] });
|
|
818
|
+
});
|
|
819
|
+
});
|
|
820
|
+
});
|
|
821
|
+
//# sourceMappingURL=field-exclusion.test.js.map
|