@natlibfi/marc-record-validators-melinda 12.1.0-alpha.1 → 13.0.0
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-and-publish.yml +17 -17
- package/README.md +1 -1
- package/dist/addMissingField041.js +6 -3
- package/dist/addMissingField041.js.map +2 -2
- package/dist/addMissingField336.js +7 -4
- package/dist/addMissingField336.js.map +2 -2
- package/dist/addMissingField337.js +6 -3
- package/dist/addMissingField337.js.map +2 -2
- package/dist/addMissingField338.js +8 -5
- package/dist/addMissingField338.js.map +2 -2
- package/dist/cyrillux-usemarcon-replacement.js +5 -2
- package/dist/cyrillux-usemarcon-replacement.js.map +2 -2
- package/dist/cyrillux.js +24 -18
- package/dist/cyrillux.js.map +2 -2
- package/dist/dataProvenanceUtils.js +19 -0
- package/dist/dataProvenanceUtils.js.map +7 -0
- package/dist/disambiguateSeriesStatements.js +2 -1
- package/dist/disambiguateSeriesStatements.js.map +2 -2
- package/dist/disambiguateSeriesStatements.test.js +1 -7
- package/dist/disambiguateSeriesStatements.test.js.map +2 -2
- package/dist/drop-terms.js +123 -0
- package/dist/drop-terms.js.map +7 -0
- package/dist/drop-terms.test.js +56 -0
- package/dist/drop-terms.test.js.map +7 -0
- package/dist/field-008-18-34-character-groups.test.js +1 -7
- package/dist/field-008-18-34-character-groups.test.js.map +2 -2
- package/dist/field-505-separators.test.js +1 -7
- package/dist/field-505-separators.test.js.map +2 -2
- package/dist/field-521-fix.test.js +1 -7
- package/dist/field-521-fix.test.js.map +2 -2
- package/dist/fix-33X.js +7 -4
- package/dist/fix-33X.js.map +2 -2
- package/dist/fix-33X.test.js +1 -1
- package/dist/fix-33X.test.js.map +1 -1
- package/dist/fix-country-codes.js +5 -0
- package/dist/fix-country-codes.js.map +2 -2
- package/dist/fix-country-codes.test.js +1 -7
- package/dist/fix-country-codes.test.js.map +2 -2
- package/dist/fix-language-codes.js +5 -1
- package/dist/fix-language-codes.js.map +2 -2
- package/dist/fix-sami-041.js +109 -0
- package/dist/fix-sami-041.js.map +7 -0
- package/dist/fix-sami-041.test.js +40 -0
- package/dist/fix-sami-041.test.js.map +7 -0
- package/dist/fixRelatorTerms.js +2 -0
- package/dist/fixRelatorTerms.js.map +2 -2
- package/dist/fixRelatorTerms.test.js +1 -7
- package/dist/fixRelatorTerms.test.js.map +2 -2
- package/dist/index.js +18 -4
- package/dist/index.js.map +2 -2
- package/dist/indicator-fixes.js +15 -1
- package/dist/indicator-fixes.js.map +2 -2
- package/dist/indicator-fixes.test.js +1 -7
- package/dist/indicator-fixes.test.js.map +2 -2
- package/dist/item-language.js +41 -39
- package/dist/item-language.js.map +2 -2
- package/dist/item-language.test.js +3 -3
- package/dist/item-language.test.js.map +2 -2
- package/dist/melindaCustomMergeFields.js +31 -0
- package/dist/melindaCustomMergeFields.js.map +2 -2
- package/dist/merge-fields/controlSubfields.js.map +2 -2
- package/dist/merge-fields/counterpartField.js +149 -152
- package/dist/merge-fields/counterpartField.js.map +3 -3
- package/dist/merge-fields/dataProvenance.js +6 -20
- package/dist/merge-fields/dataProvenance.js.map +2 -2
- package/dist/merge-fields/index.js +1 -1
- package/dist/merge-fields/index.js.map +2 -2
- package/dist/merge-fields/mergableIndicator.js +1 -5
- package/dist/merge-fields/mergableIndicator.js.map +2 -2
- package/dist/merge-fields/mergableTag.js +2 -0
- package/dist/merge-fields/mergableTag.js.map +2 -2
- package/dist/merge-fields/mergeConfig.js +2 -0
- package/dist/merge-fields/mergeConfig.js.map +2 -2
- package/dist/merge-fields/mergeConstraints.js +38 -35
- package/dist/merge-fields/mergeConstraints.js.map +3 -3
- package/dist/merge-fields/mergeField.js +4 -3
- package/dist/merge-fields/mergeField.js.map +2 -2
- package/dist/merge-fields/mergeOrAddSubfield.js +8 -7
- package/dist/merge-fields/mergeOrAddSubfield.js.map +2 -2
- package/dist/merge-fields/mergeSubfield.js +5 -1
- package/dist/merge-fields/mergeSubfield.js.map +2 -2
- package/dist/merge-fields/worldKnowledge.js +52 -0
- package/dist/merge-fields/worldKnowledge.js.map +2 -2
- package/dist/merge-fields.test.js +4 -9
- package/dist/merge-fields.test.js.map +2 -2
- package/dist/mergeField500Lisapainokset.test.js +1 -7
- package/dist/mergeField500Lisapainokset.test.js.map +2 -2
- package/dist/mergeRelatorTermFields.js +9 -6
- package/dist/mergeRelatorTermFields.js.map +2 -2
- package/dist/mergeRelatorTermFields.test.js +1 -7
- package/dist/mergeRelatorTermFields.test.js.map +2 -2
- package/dist/multiple-subfield-0.test.js +1 -7
- package/dist/multiple-subfield-0.test.js.map +2 -2
- package/dist/normalize-dashes.js +9 -6
- package/dist/normalize-dashes.js.map +2 -2
- package/dist/normalize-dashes.test.js +1 -7
- package/dist/normalize-dashes.test.js.map +2 -2
- package/dist/normalize-identifiers.js.map +2 -2
- package/dist/normalize-identifiers.test.js +1 -7
- package/dist/normalize-identifiers.test.js.map +2 -2
- package/dist/normalize-qualifying-information.test.js +1 -7
- package/dist/normalize-qualifying-information.test.js.map +2 -2
- package/dist/normalize-utf8-diacritics.js.map +2 -2
- package/dist/normalize-utf8-diacritics.test.js +1 -7
- package/dist/normalize-utf8-diacritics.test.js.map +2 -2
- package/dist/normalizeFieldForComparison.js +24 -14
- package/dist/normalizeFieldForComparison.js.map +2 -2
- package/dist/normalizeSubfieldValueForComparison.js.map +1 -1
- package/dist/prepublicationUtils.js +1 -1
- package/dist/prepublicationUtils.js.map +2 -2
- package/dist/punctuation.test.js +1 -7
- package/dist/punctuation.test.js.map +2 -2
- package/dist/punctuation2.js +15 -12
- package/dist/punctuation2.js.map +2 -2
- package/dist/punctuation2.test.js +1 -7
- package/dist/punctuation2.test.js.map +2 -2
- package/dist/reindexSubfield6OccurenceNumbers.js +11 -10
- package/dist/reindexSubfield6OccurenceNumbers.js.map +2 -2
- package/dist/reindexSubfield6OccurenceNumbers.test.js +1 -7
- package/dist/reindexSubfield6OccurenceNumbers.test.js.map +2 -2
- package/dist/remove-041-zxx.js +56 -0
- package/dist/remove-041-zxx.js.map +7 -0
- package/dist/remove-041-zxx.test.js +40 -0
- package/dist/remove-041-zxx.test.js.map +7 -0
- package/dist/removeDuplicateDataFields.js +4 -26
- package/dist/removeDuplicateDataFields.js.map +2 -2
- package/dist/removeDuplicateDataFields.test.js +1 -7
- package/dist/removeDuplicateDataFields.test.js.map +2 -2
- package/dist/removeInferiorDataFields.js +82 -45
- package/dist/removeInferiorDataFields.js.map +3 -3
- package/dist/removeInferiorDataFields.test.js +5 -9
- package/dist/removeInferiorDataFields.test.js.map +2 -2
- package/dist/resolveOrphanedSubfield6s.js +4 -5
- package/dist/resolveOrphanedSubfield6s.js.map +2 -2
- package/dist/resolveOrphanedSubfield6s.test.js +1 -7
- package/dist/resolveOrphanedSubfield6s.test.js.map +2 -2
- package/dist/sanitize-vocabulary-source-codes.test.js +1 -7
- package/dist/sanitize-vocabulary-source-codes.test.js.map +2 -2
- package/dist/sortFields.js +16 -1
- package/dist/sortFields.js.map +2 -2
- package/dist/sortFields.test.js +1 -7
- package/dist/sortFields.test.js.map +2 -2
- package/dist/sortRelatorTerms.test.js +1 -7
- package/dist/sortRelatorTerms.test.js.map +2 -2
- package/dist/sortSubfields.js +27 -21
- package/dist/sortSubfields.js.map +2 -2
- package/dist/sortSubfields.test.js +1 -7
- package/dist/sortSubfields.test.js.map +2 -2
- package/dist/stripPunctuation.js +7 -3
- package/dist/stripPunctuation.js.map +2 -2
- package/dist/stripPunctuation.test.js +1 -7
- package/dist/stripPunctuation.test.js.map +2 -2
- package/dist/subfield6Utils.js +2 -12
- package/dist/subfield6Utils.js.map +2 -2
- package/dist/subfield8Utils.js +0 -5
- package/dist/subfield8Utils.js.map +2 -2
- package/dist/subfieldValueNormalizations.test.js +1 -7
- package/dist/subfieldValueNormalizations.test.js.map +2 -2
- package/dist/sync-007-and-300.test.js +1 -7
- package/dist/sync-007-and-300.test.js.map +2 -2
- package/dist/sync-language.js +103 -0
- package/dist/sync-language.js.map +7 -0
- package/dist/sync-language.test.js +40 -0
- package/dist/sync-language.test.js.map +7 -0
- package/dist/translate-terms.js +124 -87
- package/dist/translate-terms.js.map +3 -3
- package/dist/translate-terms.test.js +5 -8
- package/dist/translate-terms.test.js.map +2 -2
- package/dist/typeOfDate-008.js +3 -1
- package/dist/typeOfDate-008.js.map +2 -2
- package/dist/update-field-540.js.map +2 -2
- package/dist/update-field-540.test.js +1 -7
- package/dist/update-field-540.test.js.map +2 -2
- package/dist/urn.js +13 -12
- package/dist/urn.js.map +2 -2
- package/dist/urn.test.js +1 -7
- package/dist/urn.test.js.map +2 -2
- package/dist/utils.js +29 -3
- package/dist/utils.js.map +2 -2
- package/package.json +20 -27
- package/src/addMissingField041.js +8 -4
- package/src/addMissingField336.js +10 -5
- package/src/addMissingField337.js +9 -5
- package/src/addMissingField338.js +11 -6
- package/src/cyrillux-usemarcon-replacement.js +9 -5
- package/src/cyrillux.js +34 -23
- package/src/dataProvenanceUtils.js +21 -0
- package/src/disambiguateSeriesStatements.js +4 -1
- package/src/disambiguateSeriesStatements.test.js +3 -8
- package/src/drop-terms.js +164 -0
- package/src/drop-terms.test.js +81 -0
- package/src/field-008-18-34-character-groups.test.js +3 -8
- package/src/field-505-separators.test.js +3 -8
- package/src/field-521-fix.test.js +3 -8
- package/src/fix-33X.js +10 -6
- package/src/fix-33X.test.js +1 -1
- package/src/fix-country-codes.js +7 -3
- package/src/fix-country-codes.test.js +3 -8
- package/src/fix-language-codes.js +8 -4
- package/src/fix-sami-041.js +147 -0
- package/src/fix-sami-041.test.js +52 -0
- package/src/fixRelatorTerms.js +5 -0
- package/src/fixRelatorTerms.test.js +3 -8
- package/src/index.js +20 -7
- package/src/indicator-fixes.js +22 -7
- package/src/indicator-fixes.test.js +3 -8
- package/src/item-language.js +49 -42
- package/src/item-language.test.js +3 -3
- package/src/melindaCustomMergeFields.js +31 -0
- package/src/merge-fields/controlSubfields.js +0 -1
- package/src/merge-fields/counterpartField.js +191 -290
- package/src/merge-fields/dataProvenance.js +8 -25
- package/src/merge-fields/index.js +1 -1
- package/src/merge-fields/mergableIndicator.js +4 -5
- package/src/merge-fields/mergableTag.js +2 -0
- package/src/merge-fields/mergeConfig.js +2 -1
- package/src/merge-fields/mergeConstraints.js +41 -36
- package/src/merge-fields/mergeField.js +4 -7
- package/src/merge-fields/mergeOrAddSubfield.js +8 -7
- package/src/merge-fields/mergeSubfield.js +11 -2
- package/src/merge-fields/worldKnowledge.js +77 -3
- package/src/merge-fields.test.js +5 -10
- package/src/mergeField500Lisapainokset.test.js +3 -8
- package/src/mergeRelatorTermFields.js +12 -11
- package/src/mergeRelatorTermFields.test.js +3 -8
- package/src/multiple-subfield-0.test.js +3 -8
- package/src/normalize-dashes.js +13 -7
- package/src/normalize-dashes.test.js +3 -8
- package/src/normalize-identifiers.js +12 -19
- package/src/normalize-identifiers.test.js +3 -8
- package/src/normalize-qualifying-information.test.js +3 -8
- package/src/normalize-utf8-diacritics.js +6 -3
- package/src/normalize-utf8-diacritics.test.js +3 -8
- package/src/normalizeFieldForComparison.js +39 -22
- package/src/normalizeSubfieldValueForComparison.js +2 -2
- package/src/prepublicationUtils.js +1 -1
- package/src/punctuation.test.js +3 -8
- package/src/punctuation2.js +44 -40
- package/src/punctuation2.test.js +3 -8
- package/src/reindexSubfield6OccurenceNumbers.js +13 -11
- package/src/reindexSubfield6OccurenceNumbers.test.js +3 -8
- package/src/remove-041-zxx.js +85 -0
- package/src/remove-041-zxx.test.js +52 -0
- package/src/removeDuplicateDataFields.js +30 -28
- package/src/removeDuplicateDataFields.test.js +3 -8
- package/src/removeInferiorDataFields.js +126 -71
- package/src/removeInferiorDataFields.test.js +7 -10
- package/src/resolveOrphanedSubfield6s.js +7 -5
- package/src/resolveOrphanedSubfield6s.test.js +3 -8
- package/src/sanitize-vocabulary-source-codes.test.js +3 -8
- package/src/sortFields.js +20 -1
- package/src/sortFields.test.js +3 -8
- package/src/sortRelatorTerms.test.js +3 -8
- package/src/sortSubfields.js +31 -25
- package/src/sortSubfields.test.js +3 -8
- package/src/stripPunctuation.js +10 -5
- package/src/stripPunctuation.test.js +3 -8
- package/src/subfield6Utils.js +31 -33
- package/src/subfield8Utils.js +10 -7
- package/src/subfieldValueNormalizations.test.js +3 -8
- package/src/sync-007-and-300.test.js +3 -8
- package/src/sync-language.js +148 -0
- package/src/sync-language.test.js +52 -0
- package/src/translate-terms.js +168 -109
- package/src/translate-terms.test.js +12 -16
- package/src/typeOfDate-008.js +4 -1
- package/src/update-field-540.js +7 -5
- package/src/update-field-540.test.js +3 -8
- package/src/urn.js +17 -13
- package/src/urn.test.js +3 -8
- package/src/utils.js +39 -12
- package/test-fixtures/cyrillux/f02b/expectedResult.json +23 -0
- package/test-fixtures/cyrillux/f02b/metadata.json +11 -0
- package/test-fixtures/cyrillux/f02b/record.json +14 -0
- package/test-fixtures/cyrillux/f14/expectedResult.json +32 -0
- package/test-fixtures/cyrillux/f14/metadata.json +10 -0
- package/test-fixtures/cyrillux/f14/record.json +14 -0
- package/test-fixtures/drop-terms/01/expectedResult.json +31 -0
- package/test-fixtures/drop-terms/01/metadata.json +6 -0
- package/test-fixtures/drop-terms/01/record.json +35 -0
- package/test-fixtures/drop-terms/02/expectedResult.json +7 -0
- package/test-fixtures/drop-terms/02/metadata.json +6 -0
- package/test-fixtures/drop-terms/02/record.json +40 -0
- package/test-fixtures/drop-terms/03/expectedResult.json +6 -0
- package/test-fixtures/drop-terms/03/metadata.json +18 -0
- package/test-fixtures/drop-terms/03/record.json +39 -0
- package/test-fixtures/drop-terms/04/expectedResult.json +6 -0
- package/test-fixtures/drop-terms/04/metadata.json +19 -0
- package/test-fixtures/drop-terms/04/record.json +24 -0
- package/test-fixtures/fix-language-codes/02/metadata.json +1 -1
- package/test-fixtures/fix-relator-terms/f02/metadata.json +1 -1
- package/test-fixtures/fix-relator-terms/f04/expectedResult.json +18 -0
- package/test-fixtures/fix-relator-terms/f04/metadata.json +5 -0
- package/test-fixtures/fix-relator-terms/f04/record.json +20 -0
- package/test-fixtures/fix-sami-041/01/expectedResult.json +6 -0
- package/test-fixtures/fix-sami-041/01/metadata.json +4 -0
- package/test-fixtures/fix-sami-041/01/record.json +14 -0
- package/test-fixtures/fix-sami-041/02/expectedResult.json +10 -0
- package/test-fixtures/fix-sami-041/02/metadata.json +4 -0
- package/test-fixtures/fix-sami-041/02/record.json +8 -0
- package/test-fixtures/fix-sami-041/03/expectedResult.json +5 -0
- package/test-fixtures/fix-sami-041/03/metadata.json +5 -0
- package/test-fixtures/fix-sami-041/03/record.json +8 -0
- package/test-fixtures/fix-sami-041/04/expectedResult.json +7 -0
- package/test-fixtures/fix-sami-041/04/metadata.json +4 -0
- package/test-fixtures/fix-sami-041/04/record.json +10 -0
- package/test-fixtures/fix-sami-041/05/expectedResult.json +10 -0
- package/test-fixtures/fix-sami-041/05/metadata.json +6 -0
- package/test-fixtures/fix-sami-041/05/record.json +8 -0
- package/test-fixtures/fix-sami-041/06/expectedResult.json +10 -0
- package/test-fixtures/fix-sami-041/06/metadata.json +4 -0
- package/test-fixtures/fix-sami-041/06/record.json +9 -0
- package/test-fixtures/indicator-fixes/11/expectedResult.json +10 -0
- package/test-fixtures/indicator-fixes/11/metadata.json +4 -0
- package/test-fixtures/indicator-fixes/11/record.json +10 -0
- package/test-fixtures/merge-fields/f042_01/expectedResult.json +12 -0
- package/test-fixtures/merge-fields/f042_01/metadata.json +6 -0
- package/test-fixtures/merge-fields/f042_01/record.json +13 -0
- package/test-fixtures/merge-fields/f05/metadata.json +1 -1
- package/test-fixtures/merge-fields/f06/expectedResult.json +42 -0
- package/test-fixtures/merge-fields/f06/metadata.json +6 -0
- package/test-fixtures/merge-fields/f06/record.json +41 -0
- package/test-fixtures/merge-fields/f07/expectedResult.json +18 -0
- package/test-fixtures/merge-fields/f07/metadata.json +6 -0
- package/test-fixtures/merge-fields/f07/record.json +18 -0
- package/test-fixtures/merge-fields/f08/expectedResult.json +12 -0
- package/test-fixtures/merge-fields/f08/metadata.json +7 -0
- package/test-fixtures/merge-fields/f08/record.json +10 -0
- package/test-fixtures/merge-fields/f09/expectedResult.json +14 -0
- package/test-fixtures/merge-fields/f09/metadata.json +6 -0
- package/test-fixtures/merge-fields/f09/record.json +14 -0
- package/test-fixtures/merge-fields/f10/expectedResult.json +25 -0
- package/test-fixtures/merge-fields/f10/metadata.json +6 -0
- package/test-fixtures/merge-fields/f10/record.json +25 -0
- package/test-fixtures/merge-fields/f11/expectedResult.json +40 -0
- package/test-fixtures/merge-fields/f11/metadata.json +7 -0
- package/test-fixtures/merge-fields/f11/record.json +50 -0
- package/test-fixtures/merge-fields/f12/expectedResult.json +17 -0
- package/test-fixtures/merge-fields/f12/metadata.json +6 -0
- package/test-fixtures/merge-fields/f12/record.json +25 -0
- package/test-fixtures/merge-fields/f13/expectedResult.json +18 -0
- package/test-fixtures/merge-fields/f13/metadata.json +6 -0
- package/test-fixtures/merge-fields/f13/record.json +28 -0
- package/test-fixtures/merge-fields/f14/expectedResult.json +25 -0
- package/test-fixtures/merge-fields/f14/metadata.json +6 -0
- package/test-fixtures/merge-fields/f14/record.json +25 -0
- package/test-fixtures/merge-fields/f15/expectedResult.json +8 -0
- package/test-fixtures/merge-fields/f15/metadata.json +6 -0
- package/test-fixtures/merge-fields/f15/record.json +9 -0
- package/test-fixtures/merge-fields/f16/expectedResult.json +12 -0
- package/test-fixtures/merge-fields/f16/metadata.json +7 -0
- package/test-fixtures/merge-fields/f16/record.json +13 -0
- package/test-fixtures/merge-fields/f300_01/expectedResult.json +9 -0
- package/test-fixtures/merge-fields/f300_01/metadata.json +6 -0
- package/test-fixtures/merge-fields/f300_01/record.json +8 -0
- package/test-fixtures/merge-fields/f300_02/expectedResult.json +13 -0
- package/test-fixtures/merge-fields/f300_02/metadata.json +6 -0
- package/test-fixtures/merge-fields/f300_02/record.json +16 -0
- package/test-fixtures/merge-fields/f300_03/expectedResult.json +13 -0
- package/test-fixtures/merge-fields/f300_03/metadata.json +6 -0
- package/test-fixtures/merge-fields/f300_03/record.json +16 -0
- package/test-fixtures/merge-fields/f490_01/expectedResult.json +13 -0
- package/test-fixtures/merge-fields/f490_01/metadata.json +6 -0
- package/test-fixtures/merge-fields/f490_01/record.json +16 -0
- package/test-fixtures/remove-041-zxx/01/expectedResult.json +5 -0
- package/test-fixtures/remove-041-zxx/01/metadata.json +5 -0
- package/test-fixtures/remove-041-zxx/01/record.json +10 -0
- package/test-fixtures/remove-041-zxx/02/expectedResult.json +7 -0
- package/test-fixtures/remove-041-zxx/02/metadata.json +5 -0
- package/test-fixtures/remove-041-zxx/02/record.json +9 -0
- package/test-fixtures/remove-041-zxx/11/expectedResult.json +10 -0
- package/test-fixtures/remove-041-zxx/11/metadata.json +5 -0
- package/test-fixtures/remove-041-zxx/11/record.json +9 -0
- package/test-fixtures/remove-041-zxx/12/expectedResult.json +10 -0
- package/test-fixtures/remove-041-zxx/12/metadata.json +5 -0
- package/test-fixtures/remove-041-zxx/12/record.json +9 -0
- package/test-fixtures/remove-inferior-datafields/f17/expectedResult.json +11 -0
- package/test-fixtures/remove-inferior-datafields/f17/metadata.json +5 -0
- package/test-fixtures/remove-inferior-datafields/f17/record.json +15 -0
- package/test-fixtures/remove-inferior-datafields/f18/expectedResult.json +13 -0
- package/test-fixtures/remove-inferior-datafields/f18/metadata.json +5 -0
- package/test-fixtures/remove-inferior-datafields/f18/record.json +18 -0
- package/test-fixtures/remove-inferior-datafields/f19/expectedResult.json +17 -0
- package/test-fixtures/remove-inferior-datafields/f19/metadata.json +5 -0
- package/test-fixtures/remove-inferior-datafields/f19/record.json +18 -0
- package/test-fixtures/remove-inferior-datafields/f20/expectedResult.json +15 -0
- package/test-fixtures/remove-inferior-datafields/f20/metadata.json +5 -0
- package/test-fixtures/remove-inferior-datafields/f20/record.json +29 -0
- package/test-fixtures/sort-fields/15/input.json +9 -0
- package/test-fixtures/sort-fields/15/metadata.json +5 -0
- package/test-fixtures/sort-fields/15/result.json +10 -0
- package/test-fixtures/sync-language/01/expectedResult.json +5 -0
- package/test-fixtures/sync-language/01/metadata.json +5 -0
- package/test-fixtures/sync-language/01/record.json +7 -0
- package/test-fixtures/sync-language/02/expectedResult.json +6 -0
- package/test-fixtures/sync-language/02/metadata.json +5 -0
- package/test-fixtures/sync-language/02/record.json +10 -0
- package/test-fixtures/sync-language/03/expectedResult.json +6 -0
- package/test-fixtures/sync-language/03/metadata.json +5 -0
- package/test-fixtures/sync-language/03/record.json +6 -0
- package/test-fixtures/sync-language/10/expectedResult.json +10 -0
- package/test-fixtures/sync-language/10/metadata.json +5 -0
- package/test-fixtures/sync-language/10/record.json +8 -0
- package/test-fixtures/sync-language/11/expectedResult.json +10 -0
- package/test-fixtures/sync-language/11/metadata.json +5 -0
- package/test-fixtures/sync-language/11/record.json +7 -0
- package/test-fixtures/sync-language/12/expectedResult.json +9 -0
- package/test-fixtures/sync-language/12/metadata.json +6 -0
- package/test-fixtures/sync-language/12/record.json +6 -0
- package/test-fixtures/sync-language/13/expectedResult.json +10 -0
- package/test-fixtures/sync-language/13/metadata.json +5 -0
- package/test-fixtures/sync-language/13/record.json +8 -0
- package/test-fixtures/sync-language/14/expectedResult.json +9 -0
- package/test-fixtures/sync-language/14/metadata.json +5 -0
- package/test-fixtures/sync-language/14/record.json +7 -0
- package/test-fixtures/sync-language/15/expectedResult.json +9 -0
- package/test-fixtures/sync-language/15/metadata.json +5 -0
- package/test-fixtures/sync-language/15/record.json +7 -0
- package/test-fixtures/translate-terms/05/expectedResult.json +12 -0
- package/test-fixtures/translate-terms/05/metadata.json +7 -0
- package/test-fixtures/translate-terms/05/record.json +11 -0
- package/test-fixtures/translate-terms/06/expectedResult.json +12 -0
- package/test-fixtures/translate-terms/06/metadata.json +7 -0
- package/test-fixtures/translate-terms/06/record.json +11 -0
- package/test-fixtures/translate-terms-data.js +23 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import clone from "clone";
|
|
2
|
+
import createDebugLogger from "debug";
|
|
3
|
+
import { fieldToString, nvdebug } from "./utils.js";
|
|
4
|
+
import { getLexiconAndLanguage, getTermData, isLabel, isValidSubfield0 } from "./translate-terms.js";
|
|
5
|
+
const debug = createDebugLogger("@natlibfi/marc-record-validators-melinda:drop-terms");
|
|
6
|
+
const debugDev = debug.extend("dev");
|
|
7
|
+
const defaultConfig = {
|
|
8
|
+
"constraints": [
|
|
9
|
+
{ "tag": "648", "lex": "yso/fin" },
|
|
10
|
+
{ "tag": "648", "lex": "yso/swe" },
|
|
11
|
+
{ "tag": "650", "lex": "yso/fin" },
|
|
12
|
+
{ "tag": "650", "lex": "yso/swe" },
|
|
13
|
+
{ "tag": "651", "lex": "yso/fin" },
|
|
14
|
+
{ "tag": "651", "lex": "yso/swe" },
|
|
15
|
+
{ "tag": "655", "lex": "slm/fin" },
|
|
16
|
+
{ "tag": "655", "lex": "slm/swe" }
|
|
17
|
+
],
|
|
18
|
+
"keep invalid url": false,
|
|
19
|
+
// If not true, removes illegal subfield $0. The whole field removal is later decided by 'keep 0-less'
|
|
20
|
+
"keep invalid label": false,
|
|
21
|
+
// label ($a) is neither pref Label nor altLabel => remove whole field
|
|
22
|
+
"remove altLabel": false,
|
|
23
|
+
"remove 0-less": true
|
|
24
|
+
};
|
|
25
|
+
export default function(config = defaultConfig) {
|
|
26
|
+
return {
|
|
27
|
+
description: "Drop yso and slm terms that do not match their identifiers. Use for incoming records only! Not for records already in Melinda!",
|
|
28
|
+
validate,
|
|
29
|
+
fix
|
|
30
|
+
};
|
|
31
|
+
async function fix(record, validateMode = false) {
|
|
32
|
+
const clonedFields = record.fields.map((f) => clone(f));
|
|
33
|
+
const results = await processFields(clonedFields);
|
|
34
|
+
const removables = results.map((f, i) => !f ? record.fields[i] : void 0).filter((f) => f);
|
|
35
|
+
const modMessages = results.map((f, i) => getMod(f, i)).filter((f) => f);
|
|
36
|
+
const removalMessages = removables.map((f) => `Remove '${fieldToString(f)}'`);
|
|
37
|
+
const allMessages = [...modMessages, ...removalMessages];
|
|
38
|
+
if (validateMode) {
|
|
39
|
+
if (allMessages.length === 0) {
|
|
40
|
+
return { "message": [], "valid": true };
|
|
41
|
+
}
|
|
42
|
+
return { "message": allMessages, "valid": false };
|
|
43
|
+
}
|
|
44
|
+
removables.forEach((f) => record.removeField(f));
|
|
45
|
+
return { message: [], fix: allMessages, valid: true };
|
|
46
|
+
function getMod(field, index) {
|
|
47
|
+
if (!field) {
|
|
48
|
+
return void 0;
|
|
49
|
+
}
|
|
50
|
+
const before = fieldToString(record.fields[index]);
|
|
51
|
+
const after = fieldToString(results[index]);
|
|
52
|
+
if (before !== after) {
|
|
53
|
+
if (!validateMode) {
|
|
54
|
+
record.fields[index] = field;
|
|
55
|
+
}
|
|
56
|
+
return `Modify '${before}' => '${after}'`;
|
|
57
|
+
}
|
|
58
|
+
return void 0;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function isPotentialField(f) {
|
|
62
|
+
if (!config || !config.constraints) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
return config.constraints.some((c) => c.tag === f.tag && f.subfields?.some((sf) => sf.code === "2" && sf.value === c.lex));
|
|
66
|
+
}
|
|
67
|
+
async function validate(record) {
|
|
68
|
+
return fix(record, true);
|
|
69
|
+
}
|
|
70
|
+
async function processFields(fields, results = []) {
|
|
71
|
+
const [currField, ...remainingFields] = fields;
|
|
72
|
+
if (!currField) {
|
|
73
|
+
return results;
|
|
74
|
+
}
|
|
75
|
+
if (!isPotentialField(currField)) {
|
|
76
|
+
return processFields(remainingFields, [...results, currField]);
|
|
77
|
+
}
|
|
78
|
+
removeSyntacticallyIllegalSubfield0s(currField);
|
|
79
|
+
const removable = await isRemovableField(currField);
|
|
80
|
+
return processFields(remainingFields, [...results, removable ? void 0 : currField]);
|
|
81
|
+
}
|
|
82
|
+
function removeSyntacticallyIllegalSubfield0s(field) {
|
|
83
|
+
if (config["keep invalid url"]) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const lexData = getLexiconAndLanguage(field);
|
|
87
|
+
if (!lexData.lang) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
field.subfields = field.subfields.filter((sf) => sf.code !== "0" || isValidSubfield0(sf, lexData.lex));
|
|
91
|
+
}
|
|
92
|
+
async function isRemovableField(field) {
|
|
93
|
+
if (!field.subfields.some((sf) => sf.code === "0")) {
|
|
94
|
+
return config["remove 0-less"];
|
|
95
|
+
}
|
|
96
|
+
const subfield0 = field.subfields.find((sf) => sf.code === "0");
|
|
97
|
+
const data = await getTermData(subfield0.value);
|
|
98
|
+
if (data) {
|
|
99
|
+
const subfieldA = field.subfields.find((sf) => sf.code === "a");
|
|
100
|
+
if (subfieldA) {
|
|
101
|
+
const lexData = getLexiconAndLanguage(field);
|
|
102
|
+
if (isLabel(data.prefLabel, subfieldA.value, lexData.lang)) {
|
|
103
|
+
nvdebug(`altLabel found: ${subfieldA.value}`, debugDev);
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
if (isLabel(data.altLabel, subfieldA.value, lexData.lang)) {
|
|
107
|
+
nvdebug(`altLabel found: ${subfieldA.value}`, debugDev);
|
|
108
|
+
return config["remove altLabel"];
|
|
109
|
+
}
|
|
110
|
+
nvdebug(`a-2-0 mismatch: ${fieldToString(field)}`, debugDev);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
if (config["keep invalid label"]) {
|
|
114
|
+
if (!config["keep invalid url"]) {
|
|
115
|
+
nvdebug(`=============== 0-removal`, debugDev);
|
|
116
|
+
field.subfields = field.subfields.filter((sf) => sf.code !== "0");
|
|
117
|
+
}
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=drop-terms.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/drop-terms.js"],
|
|
4
|
+
"sourcesContent": ["// Author(s): Nicholas Volk\n\nimport clone from 'clone';\nimport createDebugLogger from 'debug';\nimport {fieldToString, nvdebug} from './utils.js';\nimport {getLexiconAndLanguage, getTermData, isLabel, isValidSubfield0} from './translate-terms.js';\n\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:drop-terms');\n//const debugData = debug.extend('data');\nconst debugDev = debug.extend('dev');\n\nconst defaultConfig = {\n 'constraints': [\n {'tag': '648', 'lex': 'yso/fin'},\n {'tag': '648', 'lex': 'yso/swe'},\n {'tag': '650', 'lex': 'yso/fin'},\n {'tag': '650', 'lex': 'yso/swe'},\n {'tag': '651', 'lex': 'yso/fin'},\n {'tag': '651', 'lex': 'yso/swe'},\n {'tag': '655', 'lex': 'slm/fin'},\n {'tag': '655', 'lex': 'slm/swe'}\n ],\n 'keep invalid url': false, // If not true, removes illegal subfield $0. The whole field removal is later decided by 'keep 0-less'\n 'keep invalid label': false, // label ($a) is neither pref Label nor altLabel => remove whole field\n 'remove altLabel': false,\n 'remove 0-less': true\n};\n\n// eslint-disable-next-line max-lines-per-function\nexport default function (config = defaultConfig) {\n\n return {\n description: 'Drop yso and slm terms that do not match their identifiers. Use for incoming records only! Not for records already in Melinda!',\n validate, fix\n };\n\n async function fix(record, validateMode = false) {\n const clonedFields = record.fields.map(f => clone(f));\n\n const results = await processFields(clonedFields);\n\n const removables = results.map((f, i) => !f ? record.fields[i] : undefined).filter(f => f);\n const modMessages = results.map((f, i) => getMod(f, i)).filter(f => f);\n const removalMessages = removables.map(f => `Remove '${fieldToString(f)}'`);\n const allMessages = [...modMessages, ...removalMessages];\n\n if (validateMode) {\n if (allMessages.length === 0) {\n return {'message': [], 'valid': true};\n }\n return {'message': allMessages, 'valid': false};\n }\n\n removables.forEach(f => record.removeField(f));\n\n return {message: [], fix: allMessages, valid: true};\n\n function getMod(field, index) {\n if (!field) {\n return undefined;\n }\n const before = fieldToString(record.fields[index]);\n const after = fieldToString(results[index]);\n if (before !== after) {\n if (!validateMode) {\n record.fields[index] = field;\n }\n return `Modify '${before}' => '${after}'`;\n }\n return undefined;\n }\n }\n\n function isPotentialField(f) {\n if (!config || !config.constraints) {\n return false;\n }\n return config.constraints.some(c => c.tag === f.tag && f.subfields?.some(sf => sf.code === '2' && sf.value === c.lex));\n }\n\n async function validate(record) {\n return fix(record, true);\n }\n\n\n async function processFields(fields, results = []) {\n const [currField, ...remainingFields] = fields;\n if (!currField) {\n return results;\n }\n\n if (!isPotentialField(currField)) { // Not interested in this field\n return processFields(remainingFields, [...results, currField]);\n }\n\n removeSyntacticallyIllegalSubfield0s(currField); // iff config wants them to be removed...\n\n const removable = await isRemovableField(currField);\n\n return processFields(remainingFields, [...results, removable ? undefined : currField]);\n }\n\n function removeSyntacticallyIllegalSubfield0s(field) {\n if (config['keep invalid url']) {\n return;\n }\n\n const lexData = getLexiconAndLanguage(field);\n if (!lexData.lang) { // This is an error of sorts. Should we proceed and remove $0s?\n return;\n }\n\n field.subfields = field.subfields.filter(sf => sf.code !== '0' || isValidSubfield0(sf, lexData.lex));\n }\n\n async function isRemovableField(field) {\n // nvdebug(`FOO===== ${fieldToString(field)}`, debugDev);\n\n\n // $0-less field:\n if (!field.subfields.some(sf => sf.code === '0')) {\n return config['remove 0-less'];\n }\n\n const subfield0 = field.subfields.find(sf => sf.code === '0');\n const data = await getTermData(subfield0.value);\n // NB! No data might be a BUG! This might delete all incoming terms if Finto is down... (we should distinguish between a miss and a failure)\n // However, if we use this validator only for incoming records, it's fine enough.\n\n if (data) {\n const subfieldA = field.subfields.find(sf => sf.code === 'a');\n if (subfieldA) {\n const lexData = getLexiconAndLanguage(field);\n\n // $a is the pref label. All is fine!\n if (isLabel(data.prefLabel, subfieldA.value, lexData.lang)) {\n nvdebug(`altLabel found: ${subfieldA.value}`, debugDev);\n return false;\n }\n if (isLabel(data.altLabel, subfieldA.value, lexData.lang)) {\n nvdebug(`altLabel found: ${subfieldA.value}`, debugDev);\n // Oddly enough this could remove altLabel but keep totally invalid labels...\n return config['remove altLabel'];\n }\n nvdebug(`a-2-0 mismatch: ${fieldToString(field)}`, debugDev);\n }\n }\n\n\n if (config['keep invalid label']) {\n // We keep the label $a. However, we can get rid of $0 if we want to (semantic reasons)\n if (!config['keep invalid url']) {\n nvdebug(`=============== 0-removal`, debugDev);\n field.subfields = field.subfields.filter(sf => sf.code !== '0');\n }\n return false;\n }\n return true;\n\n }\n\n\n}\n\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import fetchMock from "fetch-mock";
|
|
3
|
+
import validatorFactory from "./drop-terms.js";
|
|
4
|
+
import { MarcRecord } from "@natlibfi/marc-record";
|
|
5
|
+
import { READERS } from "@natlibfi/fixura";
|
|
6
|
+
import generateTests from "@natlibfi/fixugen";
|
|
7
|
+
import { fakeData } from "../test-fixtures/translate-terms-data.js";
|
|
8
|
+
const uris = [
|
|
9
|
+
"http://www.yso.fi/onto/yso/p444",
|
|
10
|
+
"http://www.yso.fi/onto/yso/p500",
|
|
11
|
+
"http://www.yso.fi/onto/yso/p13299",
|
|
12
|
+
"http://www.yso.fi/onto/yso/p111739",
|
|
13
|
+
"http://www.yso.fi/onto/yso/p6197061979",
|
|
14
|
+
"http://www.yso.fi/onto/yso/p6196061969",
|
|
15
|
+
"http://urn.fi/URN:NBN:fi:au:slm:s161"
|
|
16
|
+
];
|
|
17
|
+
const useMock = 1;
|
|
18
|
+
generateTests({
|
|
19
|
+
callback,
|
|
20
|
+
path: [import.meta.dirname, "..", "test-fixtures", "drop-terms"],
|
|
21
|
+
useMetadataFile: true,
|
|
22
|
+
recurse: false,
|
|
23
|
+
fixura: {
|
|
24
|
+
reader: READERS.JSON
|
|
25
|
+
},
|
|
26
|
+
hooks: {
|
|
27
|
+
before: async () => {
|
|
28
|
+
if (useMock) {
|
|
29
|
+
fetchMock.mockGlobal().get(`https://api.finto.fi/rest/v1/data?uri=${uris[0]}&format=application%2Fjson`, { status: 200, headers: {}, body: fakeData }).get(`https://api.finto.fi/rest/v1/data?uri=${uris[1]}&format=application%2Fjson`, { status: 200, headers: {}, body: fakeData }).get(`https://api.finto.fi/rest/v1/data?uri=${uris[2]}&format=application%2Fjson`, { status: 200, headers: {}, body: fakeData }).get(`https://api.finto.fi/rest/v1/data?uri=${uris[3]}&format=application%2Fjson`, { status: 200, headers: {}, body: fakeData }).get(`https://api.finto.fi/rest/v1/data?uri=${uris[4]}&format=application%2Fjson`, { status: 200, headers: {}, body: fakeData }).get(`https://api.finto.fi/rest/v1/data?uri=${uris[5]}&format=application%2Fjson`, { status: 200, headers: {}, body: fakeData }).get(`https://api.finto.fi/rest/v1/data?uri=${uris[6]}&format=application%2Fjson`, { status: 200, headers: {}, body: fakeData });
|
|
30
|
+
}
|
|
31
|
+
testValidatorFactory();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
async function testValidatorFactory() {
|
|
36
|
+
const validator = await validatorFactory();
|
|
37
|
+
assert.equal(typeof validator, "object");
|
|
38
|
+
assert.equal(typeof validator.description, "string");
|
|
39
|
+
assert.equal(typeof validator.validate, "function");
|
|
40
|
+
}
|
|
41
|
+
async function callback({ getFixture, fix = false, config = void 0 }) {
|
|
42
|
+
const validator = await validatorFactory(config);
|
|
43
|
+
const record = new MarcRecord(getFixture("record.json"));
|
|
44
|
+
const expectedResult = getFixture("expectedResult.json");
|
|
45
|
+
if (!fix) {
|
|
46
|
+
const result = await validator.validate(record);
|
|
47
|
+
assert.deepEqual(result, expectedResult);
|
|
48
|
+
const originalRecord = new MarcRecord(getFixture("record.json"));
|
|
49
|
+
assert.deepEqual(record, originalRecord);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const expectedResult2 = new MarcRecord(expectedResult);
|
|
53
|
+
await validator.fix(record);
|
|
54
|
+
assert.deepEqual(record, expectedResult2);
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=drop-terms.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/drop-terms.test.js"],
|
|
4
|
+
"sourcesContent": ["import assert from 'node:assert/strict';\n//import createDebugLogger from 'debug';\nimport fetchMock from 'fetch-mock';\n\nimport validatorFactory from './drop-terms.js';\n\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\n\n\nimport {fakeData} from '../test-fixtures/translate-terms-data.js';\n\n\nconst uris = [\n 'http://www.yso.fi/onto/yso/p444',\n 'http://www.yso.fi/onto/yso/p500',\n 'http://www.yso.fi/onto/yso/p13299',\n 'http://www.yso.fi/onto/yso/p111739',\n 'http://www.yso.fi/onto/yso/p6197061979',\n 'http://www.yso.fi/onto/yso/p6196061969',\n 'http://urn.fi/URN:NBN:fi:au:slm:s161'\n];\n\nconst useMock = 1;\n\n\ngenerateTests({\n callback,\n path: [import.meta.dirname, '..', 'test-fixtures', 'drop-terms'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n hooks: {\n before: async () => {\n\n if (useMock) {\n fetchMock.mockGlobal()\n .get(`https://api.finto.fi/rest/v1/data?uri=${uris[0]}&format=application%2Fjson`, {status: 200, headers: {}, body: fakeData})\n .get(`https://api.finto.fi/rest/v1/data?uri=${uris[1]}&format=application%2Fjson`, {status: 200, headers: {}, body: fakeData})\n .get(`https://api.finto.fi/rest/v1/data?uri=${uris[2]}&format=application%2Fjson`, {status: 200, headers: {}, body: fakeData})\n .get(`https://api.finto.fi/rest/v1/data?uri=${uris[3]}&format=application%2Fjson`, {status: 200, headers: {}, body: fakeData})\n .get(`https://api.finto.fi/rest/v1/data?uri=${uris[4]}&format=application%2Fjson`, {status: 200, headers: {}, body: fakeData})\n .get(`https://api.finto.fi/rest/v1/data?uri=${uris[5]}&format=application%2Fjson`, {status: 200, headers: {}, body: fakeData})\n .get(`https://api.finto.fi/rest/v1/data?uri=${uris[6]}&format=application%2Fjson`, {status: 200, headers: {}, body: fakeData});\n }\n\n testValidatorFactory();\n }\n }\n});\n\n//const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/drop-terms:test');\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n assert.equal(typeof validator, 'object');\n assert.equal(typeof validator.description, 'string');\n assert.equal(typeof validator.validate, 'function');\n}\n\nasync function callback({getFixture, fix = false, config = undefined}) {\n const validator = await validatorFactory(config);\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n assert.deepEqual(result, expectedResult);\n const originalRecord = new MarcRecord(getFixture('record.json'));\n assert.deepEqual(record, originalRecord); // Validation should not change the record\n return;\n }\n const expectedResult2 = new MarcRecord(expectedResult);\n await validator.fix(record);\n assert.deepEqual(record, expectedResult2);\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAAO,YAAY;AAEnB,OAAO,eAAe;AAEtB,OAAO,sBAAsB;AAE7B,SAAQ,kBAAiB;AACzB,SAAQ,eAAc;AACtB,OAAO,mBAAmB;AAG1B,SAAQ,gBAAe;AAGvB,MAAM,OAAO;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,MAAM,UAAU;AAGhB,cAAc;AAAA,EACZ;AAAA,EACA,MAAM,CAAC,YAAY,SAAS,MAAM,iBAAiB,YAAY;AAAA,EAC/D,iBAAiB;AAAA,EACjB,SAAS;AAAA,EACT,QAAQ;AAAA,IACN,QAAQ,QAAQ;AAAA,EAClB;AAAA,EACA,OAAO;AAAA,IACL,QAAQ,YAAY;AAElB,UAAI,SAAS;AACX,kBAAU,WAAW,EACpB,IAAI,yCAAyC,KAAK,CAAC,CAAC,8BAA8B,EAAC,QAAQ,KAAK,SAAS,CAAC,GAAG,MAAM,SAAQ,CAAC,EAC5H,IAAI,yCAAyC,KAAK,CAAC,CAAC,8BAA8B,EAAC,QAAQ,KAAK,SAAS,CAAC,GAAG,MAAM,SAAQ,CAAC,EAC5H,IAAI,yCAAyC,KAAK,CAAC,CAAC,8BAA8B,EAAC,QAAQ,KAAK,SAAS,CAAC,GAAG,MAAM,SAAQ,CAAC,EAC5H,IAAI,yCAAyC,KAAK,CAAC,CAAC,8BAA8B,EAAC,QAAQ,KAAK,SAAS,CAAC,GAAG,MAAM,SAAQ,CAAC,EAC5H,IAAI,yCAAyC,KAAK,CAAC,CAAC,8BAA8B,EAAC,QAAQ,KAAK,SAAS,CAAC,GAAG,MAAM,SAAQ,CAAC,EAC5H,IAAI,yCAAyC,KAAK,CAAC,CAAC,8BAA8B,EAAC,QAAQ,KAAK,SAAS,CAAC,GAAG,MAAM,SAAQ,CAAC,EAC5H,IAAI,yCAAyC,KAAK,CAAC,CAAC,8BAA8B,EAAC,QAAQ,KAAK,SAAS,CAAC,GAAG,MAAM,SAAQ,CAAC;AAAA,MAC/H;AAEA,2BAAqB;AAAA,IACvB;AAAA,EACF;AACF,CAAC;AAID,eAAe,uBAAuB;AACpC,QAAM,YAAY,MAAM,iBAAiB;AAEzC,SAAO,MAAM,OAAO,WAAW,QAAQ;AACvC,SAAO,MAAM,OAAO,UAAU,aAAa,QAAQ;AACnD,SAAO,MAAM,OAAO,UAAU,UAAU,UAAU;AACpD;AAEA,eAAe,SAAS,EAAC,YAAY,MAAM,OAAO,SAAS,OAAS,GAAG;AACrE,QAAM,YAAY,MAAM,iBAAiB,MAAM;AAC/C,QAAM,SAAS,IAAI,WAAW,WAAW,aAAa,CAAC;AACvD,QAAM,iBAAiB,WAAW,qBAAqB;AAGvD,MAAI,CAAC,KAAK;AACR,UAAM,SAAS,MAAM,UAAU,SAAS,MAAM;AAC9C,WAAO,UAAU,QAAQ,cAAc;AACvC,UAAM,iBAAiB,IAAI,WAAW,WAAW,aAAa,CAAC;AAC/D,WAAO,UAAU,QAAQ,cAAc;AACvC;AAAA,EACF;AACA,QAAM,kBAAkB,IAAI,WAAW,cAAc;AACrD,QAAM,UAAU,IAAI,MAAM;AAC1B,SAAO,UAAU,QAAQ,eAAe;AAC1C;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -3,7 +3,6 @@ import { MarcRecord } from "@natlibfi/marc-record";
|
|
|
3
3
|
import validatorFactory from "./field-008-18-34-character-groups.js";
|
|
4
4
|
import { READERS } from "@natlibfi/fixura";
|
|
5
5
|
import generateTests from "@natlibfi/fixugen";
|
|
6
|
-
import createDebugLogger from "debug";
|
|
7
6
|
generateTests({
|
|
8
7
|
callback,
|
|
9
8
|
path: [import.meta.dirname, "..", "test-fixtures", "field-008-18-34-character-groups"],
|
|
@@ -18,7 +17,6 @@ generateTests({
|
|
|
18
17
|
}
|
|
19
18
|
}
|
|
20
19
|
});
|
|
21
|
-
const debug = createDebugLogger("@natlibfi/marc-record-validators-melinda/field-008-18-34-character-groups:test");
|
|
22
20
|
async function testValidatorFactory() {
|
|
23
21
|
const validator = await validatorFactory();
|
|
24
22
|
assert.equal(typeof validator, "object");
|
|
@@ -26,11 +24,7 @@ async function testValidatorFactory() {
|
|
|
26
24
|
assert.equal(typeof validator.fix, "function");
|
|
27
25
|
assert.equal(typeof validator.validate, "function");
|
|
28
26
|
}
|
|
29
|
-
async function callback({ getFixture,
|
|
30
|
-
if (enabled === false) {
|
|
31
|
-
debug("TEST SKIPPED!");
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
27
|
+
async function callback({ getFixture, fix = false }) {
|
|
34
28
|
const validator = await validatorFactory();
|
|
35
29
|
const record = new MarcRecord(getFixture("record.json"));
|
|
36
30
|
const expectedResult = getFixture("expectedResult.json");
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/field-008-18-34-character-groups.test.js"],
|
|
4
|
-
"sourcesContent": ["import assert from 'node:assert';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './field-008-18-34-character-groups.js';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\
|
|
5
|
-
"mappings": "AAAA,OAAO,YAAY;AACnB,SAAQ,kBAAiB;AACzB,OAAO,sBAAsB;AAC7B,SAAQ,eAAc;AACtB,OAAO,mBAAmB;
|
|
4
|
+
"sourcesContent": ["import assert from 'node:assert';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './field-008-18-34-character-groups.js';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\n//import createDebugLogger from 'debug';\n\ngenerateTests({\n callback,\n path: [import.meta.dirname, '..', 'test-fixtures', 'field-008-18-34-character-groups'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n hooks: {\n before: async () => {\n testValidatorFactory();\n }\n }\n});\n//const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/field-008-18-34-character-groups:test');\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n assert.equal(typeof validator, 'object');\n assert.equal(typeof validator.description, 'string');\n assert.equal(typeof validator.fix, 'function');\n assert.equal(typeof validator.validate, 'function');\n}\n\nasync function callback({getFixture, fix = false}) {\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n assert.deepEqual(result, expectedResult);\n return;\n }\n\n await validator.fix(record);\n assert.deepEqual(record, expectedResult);\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAAO,YAAY;AACnB,SAAQ,kBAAiB;AACzB,OAAO,sBAAsB;AAC7B,SAAQ,eAAc;AACtB,OAAO,mBAAmB;AAG1B,cAAc;AAAA,EACZ;AAAA,EACA,MAAM,CAAC,YAAY,SAAS,MAAM,iBAAiB,kCAAkC;AAAA,EACrF,iBAAiB;AAAA,EACjB,SAAS;AAAA,EACT,QAAQ;AAAA,IACN,QAAQ,QAAQ;AAAA,EAClB;AAAA,EACA,OAAO;AAAA,IACL,QAAQ,YAAY;AAClB,2BAAqB;AAAA,IACvB;AAAA,EACF;AACF,CAAC;AAGD,eAAe,uBAAuB;AACpC,QAAM,YAAY,MAAM,iBAAiB;AAEzC,SAAO,MAAM,OAAO,WAAW,QAAQ;AACvC,SAAO,MAAM,OAAO,UAAU,aAAa,QAAQ;AACnD,SAAO,MAAM,OAAO,UAAU,KAAK,UAAU;AAC7C,SAAO,MAAM,OAAO,UAAU,UAAU,UAAU;AACpD;AAEA,eAAe,SAAS,EAAC,YAAY,MAAM,MAAK,GAAG;AACjD,QAAM,YAAY,MAAM,iBAAiB;AACzC,QAAM,SAAS,IAAI,WAAW,WAAW,aAAa,CAAC;AACvD,QAAM,iBAAiB,WAAW,qBAAqB;AAGvD,MAAI,CAAC,KAAK;AACR,UAAM,SAAS,MAAM,UAAU,SAAS,MAAM;AAC9C,WAAO,UAAU,QAAQ,cAAc;AACvC;AAAA,EACF;AAEA,QAAM,UAAU,IAAI,MAAM;AAC1B,SAAO,UAAU,QAAQ,cAAc;AACzC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -3,7 +3,6 @@ import { MarcRecord } from "@natlibfi/marc-record";
|
|
|
3
3
|
import validatorFactory from "./field-505-separators.js";
|
|
4
4
|
import { READERS } from "@natlibfi/fixura";
|
|
5
5
|
import generateTests from "@natlibfi/fixugen";
|
|
6
|
-
import createDebugLogger from "debug";
|
|
7
6
|
generateTests({
|
|
8
7
|
callback,
|
|
9
8
|
path: [import.meta.dirname, "..", "test-fixtures", "field-505-separators"],
|
|
@@ -18,18 +17,13 @@ generateTests({
|
|
|
18
17
|
}
|
|
19
18
|
}
|
|
20
19
|
});
|
|
21
|
-
const debug = createDebugLogger("@natlibfi/marc-record-validators-melinda/field-505-separators:test");
|
|
22
20
|
async function testValidatorFactory() {
|
|
23
21
|
const validator = await validatorFactory();
|
|
24
22
|
assert.equal(typeof validator, "object");
|
|
25
23
|
assert.equal(typeof validator.description, "string");
|
|
26
24
|
assert.equal(typeof validator.validate, "function");
|
|
27
25
|
}
|
|
28
|
-
async function callback({ getFixture,
|
|
29
|
-
if (enabled === false) {
|
|
30
|
-
debug("TEST SKIPPED!");
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
26
|
+
async function callback({ getFixture, fix = false }) {
|
|
33
27
|
const validator = await validatorFactory();
|
|
34
28
|
const recordFixture = getFixture("record.json");
|
|
35
29
|
const record = recordFixture._validationOptions ? new MarcRecord(recordFixture, recordFixture._validationOptions) : new MarcRecord(recordFixture);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/field-505-separators.test.js"],
|
|
4
|
-
"sourcesContent": ["import assert from 'node:assert';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './field-505-separators.js';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\
|
|
5
|
-
"mappings": "AAAA,OAAO,YAAY;AACnB,SAAQ,kBAAiB;AACzB,OAAO,sBAAsB;AAC7B,SAAQ,eAAc;AACtB,OAAO,mBAAmB;
|
|
4
|
+
"sourcesContent": ["import assert from 'node:assert';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './field-505-separators.js';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\n//import createDebugLogger from 'debug';\n\ngenerateTests({\n callback,\n path: [import.meta.dirname, '..', 'test-fixtures', 'field-505-separators'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n hooks: {\n before: async () => {\n testValidatorFactory();\n }\n }\n});\n//const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/field-505-separators:test');\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n assert.equal(typeof validator, 'object');\n assert.equal(typeof validator.description, 'string');\n assert.equal(typeof validator.validate, 'function');\n}\n\nasync function callback({getFixture, fix = false}) {\n const validator = await validatorFactory();\n\n const recordFixture = getFixture('record.json');\n const record = recordFixture._validationOptions ? new MarcRecord(recordFixture, recordFixture._validationOptions) : new MarcRecord(recordFixture);\n\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n assert.deepEqual(result, expectedResult);\n return;\n }\n\n await validator.fix(record);\n assert.deepEqual(record, expectedResult);\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAAO,YAAY;AACnB,SAAQ,kBAAiB;AACzB,OAAO,sBAAsB;AAC7B,SAAQ,eAAc;AACtB,OAAO,mBAAmB;AAG1B,cAAc;AAAA,EACZ;AAAA,EACA,MAAM,CAAC,YAAY,SAAS,MAAM,iBAAiB,sBAAsB;AAAA,EACzE,iBAAiB;AAAA,EACjB,SAAS;AAAA,EACT,QAAQ;AAAA,IACN,QAAQ,QAAQ;AAAA,EAClB;AAAA,EACA,OAAO;AAAA,IACL,QAAQ,YAAY;AAClB,2BAAqB;AAAA,IACvB;AAAA,EACF;AACF,CAAC;AAGD,eAAe,uBAAuB;AACpC,QAAM,YAAY,MAAM,iBAAiB;AAEzC,SAAO,MAAM,OAAO,WAAW,QAAQ;AACvC,SAAO,MAAM,OAAO,UAAU,aAAa,QAAQ;AACnD,SAAO,MAAM,OAAO,UAAU,UAAU,UAAU;AACpD;AAEA,eAAe,SAAS,EAAC,YAAY,MAAM,MAAK,GAAG;AACjD,QAAM,YAAY,MAAM,iBAAiB;AAEzC,QAAM,gBAAgB,WAAW,aAAa;AAC9C,QAAM,SAAS,cAAc,qBAAqB,IAAI,WAAW,eAAe,cAAc,kBAAkB,IAAI,IAAI,WAAW,aAAa;AAEhJ,QAAM,iBAAiB,WAAW,qBAAqB;AAGvD,MAAI,CAAC,KAAK;AACR,UAAM,SAAS,MAAM,UAAU,SAAS,MAAM;AAC9C,WAAO,UAAU,QAAQ,cAAc;AACvC;AAAA,EACF;AAEA,QAAM,UAAU,IAAI,MAAM;AAC1B,SAAO,UAAU,QAAQ,cAAc;AACzC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -3,7 +3,6 @@ import { MarcRecord } from "@natlibfi/marc-record";
|
|
|
3
3
|
import validatorFactory from "./field-521-fix.js";
|
|
4
4
|
import { READERS } from "@natlibfi/fixura";
|
|
5
5
|
import generateTests from "@natlibfi/fixugen";
|
|
6
|
-
import createDebugLogger from "debug";
|
|
7
6
|
generateTests({
|
|
8
7
|
callback,
|
|
9
8
|
path: [import.meta.dirname, "..", "test-fixtures", "fix521"],
|
|
@@ -18,18 +17,13 @@ generateTests({
|
|
|
18
17
|
}
|
|
19
18
|
}
|
|
20
19
|
});
|
|
21
|
-
const debug = createDebugLogger("@natlibfi/marc-record-validators-melinda/fix521:test");
|
|
22
20
|
async function testValidatorFactory() {
|
|
23
21
|
const validator = await validatorFactory();
|
|
24
22
|
assert.equal(typeof validator, "object");
|
|
25
23
|
assert.equal(typeof validator.description, "string");
|
|
26
24
|
assert.equal(typeof validator.validate, "function");
|
|
27
25
|
}
|
|
28
|
-
async function callback({ getFixture,
|
|
29
|
-
if (enabled === false) {
|
|
30
|
-
debug("TEST SKIPPED!");
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
26
|
+
async function callback({ getFixture, fix = false }) {
|
|
33
27
|
const validator = await validatorFactory();
|
|
34
28
|
const record = new MarcRecord(getFixture("record.json"));
|
|
35
29
|
const expectedResult = getFixture("expectedResult.json");
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/field-521-fix.test.js"],
|
|
4
|
-
"sourcesContent": ["import assert from 'node:assert';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './field-521-fix.js';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\
|
|
5
|
-
"mappings": "AAAA,OAAO,YAAY;AACnB,SAAQ,kBAAiB;AACzB,OAAO,sBAAsB;AAC7B,SAAQ,eAAc;AACtB,OAAO,mBAAmB;
|
|
4
|
+
"sourcesContent": ["import assert from 'node:assert';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './field-521-fix.js';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\n//import createDebugLogger from 'debug';\n\ngenerateTests({\n callback,\n path: [import.meta.dirname, '..', 'test-fixtures', 'fix521'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n hooks: {\n before: async () => {\n testValidatorFactory();\n }\n }\n});\n//const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/fix521:test');\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n assert.equal(typeof validator, 'object');\n assert.equal(typeof validator.description, 'string');\n assert.equal(typeof validator.validate, 'function');\n}\n\nasync function callback({getFixture, fix = false}) {\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n assert.deepEqual(result, expectedResult);\n return;\n }\n\n await validator.fix(record);\n assert.deepEqual(record, expectedResult);\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAAO,YAAY;AACnB,SAAQ,kBAAiB;AACzB,OAAO,sBAAsB;AAC7B,SAAQ,eAAc;AACtB,OAAO,mBAAmB;AAG1B,cAAc;AAAA,EACZ;AAAA,EACA,MAAM,CAAC,YAAY,SAAS,MAAM,iBAAiB,QAAQ;AAAA,EAC3D,iBAAiB;AAAA,EACjB,SAAS;AAAA,EACT,QAAQ;AAAA,IACN,QAAQ,QAAQ;AAAA,EAClB;AAAA,EACA,OAAO;AAAA,IACL,QAAQ,YAAY;AAClB,2BAAqB;AAAA,IACvB;AAAA,EACF;AACF,CAAC;AAGD,eAAe,uBAAuB;AACpC,QAAM,YAAY,MAAM,iBAAiB;AAEzC,SAAO,MAAM,OAAO,WAAW,QAAQ;AACvC,SAAO,MAAM,OAAO,UAAU,aAAa,QAAQ;AACnD,SAAO,MAAM,OAAO,UAAU,UAAU,UAAU;AACpD;AAEA,eAAe,SAAS,EAAC,YAAY,MAAM,MAAK,GAAG;AACjD,QAAM,YAAY,MAAM,iBAAiB;AACzC,QAAM,SAAS,IAAI,WAAW,WAAW,aAAa,CAAC;AACvD,QAAM,iBAAiB,WAAW,qBAAqB;AAGvD,MAAI,CAAC,KAAK;AACR,UAAM,SAAS,MAAM,UAAU,SAAS,MAAM;AAC9C,WAAO,UAAU,QAAQ,cAAc;AACvC;AAAA,EACF;AAEA,QAAM,UAAU,IAAI,MAAM;AAC1B,SAAO,UAAU,QAAQ,cAAc;AACzC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/fix-33X.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
import createDebugLogger from "debug";
|
|
1
2
|
import clone from "clone";
|
|
2
3
|
import { fieldToString, getCatalogingLanguage, nvdebug } from "./utils.js";
|
|
3
4
|
import { map336CodeToTerm, map337CodeToTerm, map338CodeToTerm } from "./field33XUtils.js";
|
|
5
|
+
const debug = createDebugLogger("@natlibfi/marc-record-validators-melinda:fix-33X");
|
|
6
|
+
const debugDev = debug.extend("dev");
|
|
4
7
|
const description = "Fix non-RDA 33X field(s)";
|
|
5
8
|
const map336 = {
|
|
6
9
|
"Bild (kartografisk ; att vidra)": "crt",
|
|
@@ -369,16 +372,16 @@ export default function() {
|
|
|
369
372
|
fix
|
|
370
373
|
};
|
|
371
374
|
function fix(record) {
|
|
372
|
-
nvdebug(`FIX ${description}
|
|
375
|
+
nvdebug(`FIX ${description}...`, debugDev);
|
|
373
376
|
const catLang = getCatalogingLanguage(record) || "fin";
|
|
374
377
|
const fields = getRelevantFields(record);
|
|
375
378
|
fields.forEach((f) => fixField(f, catLang));
|
|
376
|
-
nvdebug(` GOT ${fields.length}
|
|
379
|
+
nvdebug(` GOT ${fields.length}...`, debugDev);
|
|
377
380
|
const res = { message: [], fix: [], valid: true };
|
|
378
381
|
return res;
|
|
379
382
|
}
|
|
380
383
|
function validate(record) {
|
|
381
|
-
nvdebug(`VALIDATE ${description}
|
|
384
|
+
nvdebug(`VALIDATE ${description}...`, debugDev);
|
|
382
385
|
const catLang = getCatalogingLanguage(record) || "fin";
|
|
383
386
|
const fields = getRelevantFields(record);
|
|
384
387
|
if (fields.length === 0) {
|
|
@@ -399,7 +402,7 @@ export default function() {
|
|
|
399
402
|
return void 0;
|
|
400
403
|
}
|
|
401
404
|
function mapTermToCode(term, tag) {
|
|
402
|
-
nvdebug(`TERM/${tag}: '${term}'
|
|
405
|
+
nvdebug(`TERM/${tag}: '${term}'`, debugDev);
|
|
403
406
|
if (tag === "336" && term in map336) {
|
|
404
407
|
return map336[term];
|
|
405
408
|
}
|
package/dist/fix-33X.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/fix-33X.js"],
|
|
4
|
-
"sourcesContent": ["//import createDebugLogger from 'debug';\nimport clone from 'clone';\nimport {fieldToString, getCatalogingLanguage, nvdebug} from './utils.js';\nimport {map336CodeToTerm, map337CodeToTerm, map338CodeToTerm} from './field33XUtils.js';\n\nconst description = 'Fix non-RDA 33X field(s)';\n\n\nconst map336 = {\n 'Bild (kartografisk ; att vidra)': 'crt',\n 'Bild (kartografisk ; r\u00F6rlig)': 'crm',\n 'Bild (kartografisk)': 'cri',\n 'Bild (r\u00F6rlig ; tredimensionell)': 'tdm',\n 'Bild (r\u00F6rlig ; tv\u00E5dimensionell)': 'tdi',\n 'Bild (still ; att vidra)': 'tci',\n 'Bild (still ; tredimensionell)': 'sti',\n 'Bild (still)': 'sti',\n 'Data': 'cod',\n 'Data (kartografinen)': 'crd',\n 'Dataset': 'cod',\n 'Dataset (kartografisk)': 'crd',\n 'Datorprogram': 'cop',\n 'Esine': 'tdf',\n 'Esine (kartografinen ; kosketeltava)': 'crn',\n 'Esine (kartografinen)': 'crf',\n 'Esine (kartogragrafinen ; kolmiulotteinen)': 'crf',\n 'Esine (kolmiulotteinen)': 'tdf',\n 'Esine (kosketeltava)': 'tcf',\n 'Flera inneh\u00E5llstyper': 'zzz',\n 'F\u00F6remal': 'tdf',\n 'F\u00F6rem\u00E5l (att vidra)': 'tcf',\n 'F\u00F6rem\u00E5l (kartografisk ; att vidra)': 'crn',\n 'F\u00F6rem\u00E5l (kartografisk ; tredimensionell)': 'crn',\n 'F\u00F6rem\u00E5l (tredimensionell)': 'tdf',\n 'Ger\u00E4usche': 'snd',\n 'Kuva': 'sti',\n 'Kuva (kartografinen ; kosketeltava)': 'crt',\n 'Kuva (kartografinen ; liikkuva)': 'crm',\n 'Kuva (kartografinen)': 'cri',\n 'Kuva (liikkuva ; kaksiulotteinen)': 'tdi',\n 'Kuva (liikkuva ; kolmiulotteinen)': 'tdm',\n 'Kuva (still ; kaksiulotteinen)': 'sti',\n 'Kuva (still ; kolmiulotteinen)': 'sti',\n 'Kuva (still ; kosketeltava)': 'tci',\n 'Kuva (still)': 'sti',\n 'Liike (kosketeltava ; notatoitu)': 'tcn',\n 'Liike (notatoitu ; kosketeltava': 'tcn',\n 'Liike (notatoitu)': 'ntv',\n 'Ljud': 'snd',\n 'Musiikki (esitetty)': 'prm',\n 'Musiikki (kosketeltava ; notatoitu)': 'tcm',\n 'Musiikki (notatoitu ; kosketeltava)': 'tcm',\n 'Musiikki (notatoitu)': 'ntm',\n 'Musik (notation ; att vidra)': 'tcm',\n 'Musik (notation)': 'ntm',\n 'Musik (performance)': 'prm',\n 'M\u00E4\u00E4rittelem\u00E4t\u00F6n': 'zzz',\n 'M\u00E4\u00E4rittelem\u00E4t\u00F6n sis\u00E4lt\u00F6tyyppi': 'zzz',\n 'Obest\u00E4md inneh\u00E5llstyp': 'zzz',\n 'Ospecificerad inneh\u00E5llstyp': 'zzz',\n 'Puhe': 'spw',\n 'R\u00F6relse (notation ; att vidra)': 'tcn',\n 'R\u00F6relse (notation)': 'ntv',\n 'Tal': 'spw',\n 'Teksti': 'txt',\n 'Teksti (kosketeltava); Text (att vidra)': 'tct',\n 'Text': 'txt',\n 'Tietokoneohjelma': 'cop',\n 'Useita sis\u00E4lt\u00F6tyyppej\u00E4': 'zzz',\n 'Vild (still ; tv\u00E5dimensionell)': 'sti',\n 'annan': 'xxx',\n 'cartographic dataset': 'crd',\n 'cartographic image': 'cri',\n 'cartographic moving image': 'crm',\n 'cartographic tactile image': 'crt',\n 'cartographic tactile three-dimensional form': 'crn',\n 'cartographic three-dimensional form': 'crf',\n 'cartographic three-dimensional tactile form': 'crn',\n 'computer dataset': 'cod',\n 'computer program': 'cop',\n 'dataset': 'cod',\n 'datorprogram': 'cop',\n 'digitaalinen data': 'cod',\n 'digitalt dataset': 'cod',\n 'esitetty musiikki': 'prm',\n 'framf\u00F6rd musik': 'prm',\n 'gesprochenes Wort': 'spw',\n 'kaksiulotteinen liikkuva kuva': 'tdi',\n 'kartografinen data': 'crd',\n 'kartografinen kolmiulotteinen muoto': 'crf',\n 'kartografinen kuva': 'cri',\n 'kartografinen liikkuva kuva': 'crm',\n 'kartografinen taktiili kolmiulotteinen muoto': 'crn',\n 'kartografinen taktiili kuva': 'crt',\n 'kartografisk bild': 'cri',\n 'kartografisk data': 'crd',\n 'kartografisk r\u00F6rlig bild': 'crm',\n 'kartografisk taktil bild': 'crt',\n 'kartografisk taktil tredimensionell form': 'crn',\n 'kartografisk tredimensionell form': 'crf',\n 'kolmiulotteinen liikkuva kuva': 'tdm',\n 'kolmiulotteinen muoto': 'tdf',\n 'liikenotaatio': 'ntv',\n 'ljud': 'snd',\n 'muu': 'xxx',\n 'm\u00E4\u00E4rittelem\u00E4t\u00F6n': 'zzz',\n 'notated movement': 'ntv',\n 'notated music': 'ntm',\n 'noterad musik': 'ntm',\n 'nuottikirjoitus': 'ntm',\n 'ospecificerad': 'zzz',\n 'other': 'xxx',\n 'performed music': 'prm',\n 'puhe': 'spw',\n 'r\u00F6relsenotation': 'ntv',\n 'sounds': 'snd',\n 'spoken word': 'spw',\n 'still image': 'sti',\n 'stillbild': 'sti',\n 'stillkuva': 'sti',\n 'tactile image': 'tci',\n 'tactile notated movement': 'tcn',\n 'tactile notated music': 'tcm',\n 'tactile text': 'tct',\n 'tactile three-dimensional form': 'tcf',\n 'taktiili kolmiulotteinen muoto': 'tcf',\n 'taktiili kuva': 'tci',\n 'taktiili liikenotaatio': 'tcn',\n 'taktiili nuottikirjoitus': 'tcm',\n 'taktiili teksti': 'tct',\n 'taktil bild': 'tci',\n 'taktil musiknotation': 'tcm',\n 'taktil noterad r\u00F6relse': 'tcn',\n 'taktil text': 'tct',\n 'taktil tredimensionell form': 'tcf',\n 'tal': 'spw',\n 'teksti': 'txt',\n 'text': 'txt',\n 'texte': 'txt',\n 'texte tactile': 'tct',\n 'three-dimensional form': 'tdf',\n 'three-dimensional moving image': 'tdm',\n 'tietokoneohjelma': 'cop',\n 'tredimensionell form': 'tdf',\n 'tredimensionell r\u00F6rlig bild': 'tdm',\n 'tv\u00E5dimensionell r\u00F6rlig bild': 'tdi',\n 'two-dimensional moving image': 'tdi',\n 'unbewegtes Bild': 'sti',\n 'unspecified': 'zzz',\n '\u00C4\u00E4ni': 'snd',\n '\u00E4\u00E4ni': 'snd',\n '\u042D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u0430\u044F \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u0430': 'cop', // computer program\n '\u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 (\u043A\u0430\u0440\u0442\u043E\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043A\u043E\u0435)': 'cri',\n '\u041C\u0443\u0437\u044B\u043A\u0430 (\u0437\u043D\u0430\u043A\u043E\u0432\u0430\u044F)': 'ntm', // notated music\n '\u041C\u0443\u0437\u044B\u043A\u0430 (\u0438\u0441\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u0430\u044F)': 'prm', // performed music\n '\u0423\u0441\u0442\u043D\u0430\u044F \u0440\u0435\u0447\u044C': 'spw',\n '\u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 (\u043D\u0435\u043F\u043E\u0434\u0432\u0438\u0436\u043D\u043E\u0435)': 'sti',\n '\u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 (\u0434\u0432\u0438\u0436\u0443\u0449\u0435\u0435\u0441\u044F)': 'tdi', // 2D moving image\n '\u0422\u0435\u043A\u0441\u0442': 'txt',\n '\u0422\u0435\u043A\u0441\u0442 (\u0432\u0438\u0437\u0443\u0430\u043B\u044C\u043D\u044B\u0439)': 'txt'\n};\n\nconst map337 = {\n 'Computermedien': 'c',\n 'Mikroform': 'h',\n 'annan': 'x',\n 'audio': 's',\n 'computer': 'c',\n 'dator': 'c',\n 'datoranv\u00E4ndbar': 'c',\n 'ei v\u00E4litt\u00E4v\u00E4\u00E4 laitetta': 'n',\n 'elektroninen': 'c',\n 'elektronisk': 'c',\n 'heijastettava': 'g',\n 'ingen medietyp': 'n',\n 'k\u00E4ytett\u00E4viss\u00E4 ilman laitetta': 'n',\n 'microform': 'h',\n 'microscopic': 'p',\n 'mikroform': 'h',\n 'mikromuoto': 'h',\n 'mikroskooppinen': 'p',\n 'mikroskopisch': 'p',\n 'mikroskopisk': 'p',\n 'muu': 'x',\n 'm\u00E4\u00E4rittelem\u00E4t\u00F6n': 'z',\n 'm\u00E4\u00E4rittelem\u00E4t\u00F6n v\u00E4litt\u00E4v\u00E4 laite': 'z',\n 'of\u00F6rmedlad': 'n',\n 'ohne Hilfsmittel zu benutzen': 'n',\n 'omedierad': 'n',\n 'ospecificerad': 'z',\n 'ospecificerad medietyp': 'z',\n 'other': 'x',\n 'projected': 'g',\n 'projektion': 'g',\n 'projicerad': 'g',\n 'projicerbar': 'g',\n 'projizierbar': 'g',\n 'stereografinen': 'e',\n 'stereografisch': 'e',\n 'stereografisk': 'e',\n 'stereographic': 'e',\n 'tietokonek\u00E4ytt\u00F6inen': 'c',\n 'unmediated': 'n',\n 'unspecified': 'z',\n 'useita mediatyyppej\u00E4': 'z',\n 'video': 'v',\n '\u00F6vrig': 'x',\n // Cyrillic (sorted by result):\n '\u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D': 'c',\n '\u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u044B\u0439': 'c',\n '\u043D\u0435\u043F\u043E\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043D\u043D': 'n',\n '\u043D\u0435\u043F\u043E\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0439': 'n',\n '\u0430\u0443\u0434\u0438\u043E': 's', // audio\n '\u0432\u0438\u0434\u0435\u043E': 'v'\n};\n\nconst map338 = {\n 'aperture card': 'ha',\n 'ark': 'nb',\n 'arkki': 'nb',\n 'audio belt': 'sb',\n 'audio cartridge': 'sg',\n 'audio cylinder': 'se',\n 'audio disc': 'sd',\n 'audio roll': 'sq',\n 'audio wire reel': 'sw',\n 'audiocassette': 'ss',\n 'audiotape reel': 'st',\n 'bildband': 'gf',\n 'bildbandsmagasin': 'gc',\n 'bl\u00E4dderblock': 'nn',\n 'card': 'no',\n 'computer card': 'ck',\n 'computer cartridge': 'cb',\n 'computer disc': 'cd',\n 'computer disc cartridge': 'ce',\n 'computer tape cartridge': 'ca',\n 'computer tape cassette': 'cf',\n 'computer tape reel': 'ch',\n 'datorbandmagasin': 'ca',\n 'datorbandspole': 'ch',\n 'datorkassett': 'cf',\n 'datorkort': 'ck',\n 'datorminnesmodul': 'cb',\n 'datorskiva': 'cd',\n 'datorskivmagasin': 'ce',\n 'dia': 'gs',\n 'diabild': 'gs',\n 'film cartridge': 'mc',\n 'film cassette': 'mf',\n 'film reel': 'mr',\n 'film roll': 'mo',\n 'filmikasetti': 'mf',\n 'filmikela': 'mr',\n 'filmiliuska': 'gd',\n 'filmirulla': 'mo',\n 'filmisilmukkakasetti': 'mc',\n 'filmkassett': 'mf',\n 'filmljudspole': 'si',\n 'filmmagasin': 'mc',\n 'filmremsa': 'gd',\n 'filmrulle': 'mo',\n 'filmslip': 'gd',\n 'filmspole': 'mr',\n 'filmstrip': 'gf',\n 'filmstrip cartridge': 'gc',\n 'flipchart': 'nn',\n 'f\u00F6nsterkort': 'ha',\n 'f\u00F6rem\u00E5l': 'nr',\n 'ikkunakortti': 'ha',\n 'kort': 'no',\n 'kortti': 'no',\n 'lehti\u00F6taulu': 'nn',\n 'ljudcylinder': 'se',\n 'ljudkassett': 'ss',\n 'ljudmagasin': 'sg',\n 'ljudrulle': 'sq',\n 'ljudskiva': 'sd',\n 'ljudslinga': 'sb',\n 'ljudspole': 'st',\n 'ljudtr\u00E5d': 'sw',\n 'microfiche': 'he',\n 'microfiche cassette': 'hf',\n 'microfilm cartridge': 'hb',\n 'microfilm cassette': 'hc',\n 'microfilm reel': 'hd',\n 'microfilm roll': 'hj',\n 'microfilm slip': 'hh',\n 'microopaque': 'hg',\n 'microscope slide': 'pp',\n 'mikrofiche': 'he',\n 'mikrofiche (ogenomskinlig)': 'hg',\n 'mikrofichekassett': 'hf',\n 'mikrofilmikasetti': 'hc',\n 'mikrofilmikela': 'hd',\n 'mikrofilmiliuska': 'hh',\n 'mikrofilmirulla': 'hj',\n 'mikrofilmisilmukkakasetti': 'hb',\n 'mikrofilmskassett': 'hc',\n 'mikrofilmsmagasin': 'hb',\n 'mikrofilmsremsa': 'hh',\n 'mikrofilmsrulle': 'hj',\n 'mikrofilmsspole': 'hd',\n 'mikrokortti': 'he',\n 'mikrokortti (l\u00E4pin\u00E4kym\u00E4t\u00F6n)': 'hg',\n 'mikrokorttikasetti': 'hf',\n 'mikroskoperingspreparat': 'pp',\n 'muistikortti': 'ck',\n 'm\u00E4\u00E4rittelem\u00E4t\u00F6n': 'zu',\n 'nide': 'nc',\n 'object': 'nr',\n 'objekti': 'nr',\n 'online resource': 'cr',\n 'onlineresurs': 'cr',\n 'ospecificerad': 'zu',\n 'overhead transparency': 'gt',\n 'piirikotelo': 'cb',\n 'piirtoheitinkalvo': 'gt',\n 'preparaattilasi': 'pp',\n 'raina': 'gf',\n 'rainakasetti': 'gc',\n 'roll': 'na',\n 'rulla': 'na',\n 'rulle': 'na',\n 'sheet': 'nb',\n 'slide': 'gs',\n 'sound-track reel': 'si',\n 'stereografinen kortti': 'eh',\n 'stereografinen levy': 'es',\n 'stereografisk skiva': 'es',\n 'stereografiskt kort': 'eh',\n 'stereograph card': 'eh',\n 'stereograph disc': 'es',\n 'tietokasetti': 'cf',\n 'tietolevy': 'cd',\n 'tietolevykotelo': 'ce',\n 'tietonauhakela': 'ch',\n 'tietonauhan silmukkakasetti': 'ca',\n 'transparang': 'gt',\n 'unspecified': 'zu',\n 'verkkoaineisto': 'cr',\n 'video cartridge': 'vc',\n 'videocassette': 'vf',\n 'videodisc': 'vd',\n 'videokasetti': 'vf',\n 'videokassett': 'vf',\n 'videokela': 'vr',\n 'videolevy': 'vd',\n 'videomagasin': 'vc',\n 'videosilmukkakasetti': 'vc',\n 'videoskiva': 'vd',\n 'videospole': 'vr',\n 'videotape reel': 'vr',\n 'volume': 'nc',\n 'volym': 'nc',\n '\u00E4\u00E4nihihna': 'sb',\n '\u00E4\u00E4nikasetti': 'ss',\n '\u00E4\u00E4nikela': 'st',\n '\u00E4\u00E4nilankakela': 'sw',\n '\u00E4\u00E4nilevy': 'sd',\n '\u00E4\u00E4niraitakela': 'si',\n '\u00E4\u00E4nirulla': 'sq',\n '\u00E4\u00E4nisilmukkakasetti': 'sg',\n '\u00E4\u00E4nisylinteri': 'se'\n};\n\n// const multimediaRegexp = /multimedia/ui;\n\nexport default function () {\n\n return {\n description, validate, fix\n };\n\n function fix(record) {\n nvdebug(`FIX ${description}...`);\n const catLang = getCatalogingLanguage(record) || 'fin';\n const fields = getRelevantFields(record);\n fields.forEach(f => fixField(f, catLang));\n nvdebug(` GOT ${fields.length}...`);\n // FFS: we actually need newFields array here! Videogame, for example, might be\n // 336 ## \u2021a kaksiulotteinen liikkuva kuva \u2021b tdi \u20212 rdacontent\n // 336 ## \u2021a tietokoneohjelma \u2021b cop \u20212 rdacontent\n const res = {message: [], fix: [], valid: true};\n\n return res;\n }\n\n function validate(record) {\n nvdebug(`VALIDATE ${description}...`); // NOT READY YET\n const catLang = getCatalogingLanguage(record) || 'fin';\n const fields = getRelevantFields(record);\n if (fields.length === 0) {\n return {message: [], valid: true};\n }\n const originalStrings = fields.map(f => fieldToString(f));\n const clonedFields = fields.map(f => clone(f));\n clonedFields.forEach(f => fixField(f, catLang));\n const modifiedStrings = clonedFields.map(f => fieldToString(f));\n\n const changes = originalStrings.map((str, i) => `'${str}' => '${modifiedStrings[i]}'`);\n\n return {message: changes, valid: false};\n }\n\n\n function getA(field) {\n const as = field.subfields.filter(f => f.code === 'a');\n if (as.length === 1) {\n return as[0];\n }\n return undefined;\n }\n\n\n function mapTermToCode(term, tag) {\n nvdebug(`TERM/${tag}: '${term}'`);\n if (tag === '336' && term in map336) {\n return map336[term];\n }\n if (tag === '337' && term in map337) {\n return map337[term];\n }\n if (tag === '338' && term in map338) {\n return map338[term];\n }\n return undefined;\n }\n\n function mapFieldToCode(field) {\n const subfieldA = getA(field);\n if (subfieldA) {\n return mapTermToCode(subfieldA.value, field.tag);\n }\n return undefined;\n }\n\n function getRelevantFields(record) {\n const fields = record.get('33[678]');\n // Currently not handline $3 etc\n return fields.filter(f => f.subfields.length === 1 && mapFieldToCode(f));\n }\n\n function tagToSubfield2(tag) {\n if (tag === '336') {\n return {'code': '2', 'value': 'rdacontent'};\n }\n if (tag === '337') {\n return {'code': '2', 'value': 'rdamedia'};\n }\n if (tag === '338') {\n return {'code': '2', 'value': 'rdacarrier'};\n }\n }\n\n function fixField(field, catalogingLanguage = 'fin') {\n const subfieldA = getA(field);\n if (!subfieldA) {\n return;\n }\n const code = mapTermToCode(subfieldA.value, field.tag);\n if (!code) {\n return;\n }\n const newTerm = codeToTerm(code);\n if (!newTerm) {\n return;\n }\n\n subfieldA.value = newTerm;\n field.subfields.push({'code': 'b', 'value': code});\n field.subfields.push(tagToSubfield2(field.tag));\n\n function codeToTerm(code) {\n if (field.tag === '336') {\n return map336CodeToTerm(code, catalogingLanguage);\n }\n if (field.tag === '337') {\n return map337CodeToTerm(code, catalogingLanguage);\n }\n if (field.tag === '338') {\n return map338CodeToTerm(code, catalogingLanguage);\n }\n return undefined;\n }\n }\n\n}\n\n"],
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import createDebugLogger from 'debug';\nimport clone from 'clone';\nimport {fieldToString, getCatalogingLanguage, nvdebug} from './utils.js';\nimport {map336CodeToTerm, map337CodeToTerm, map338CodeToTerm} from './field33XUtils.js';\n\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:fix-33X');\n//const debugData = debug.extend('data');\nconst debugDev = debug.extend('dev');\n\nconst description = 'Fix non-RDA 33X field(s)';\n\nconst map336 = {\n 'Bild (kartografisk ; att vidra)': 'crt',\n 'Bild (kartografisk ; r\u00F6rlig)': 'crm',\n 'Bild (kartografisk)': 'cri',\n 'Bild (r\u00F6rlig ; tredimensionell)': 'tdm',\n 'Bild (r\u00F6rlig ; tv\u00E5dimensionell)': 'tdi',\n 'Bild (still ; att vidra)': 'tci',\n 'Bild (still ; tredimensionell)': 'sti',\n 'Bild (still)': 'sti',\n 'Data': 'cod',\n 'Data (kartografinen)': 'crd',\n 'Dataset': 'cod',\n 'Dataset (kartografisk)': 'crd',\n 'Datorprogram': 'cop',\n 'Esine': 'tdf',\n 'Esine (kartografinen ; kosketeltava)': 'crn',\n 'Esine (kartografinen)': 'crf',\n 'Esine (kartogragrafinen ; kolmiulotteinen)': 'crf',\n 'Esine (kolmiulotteinen)': 'tdf',\n 'Esine (kosketeltava)': 'tcf',\n 'Flera inneh\u00E5llstyper': 'zzz',\n 'F\u00F6remal': 'tdf',\n 'F\u00F6rem\u00E5l (att vidra)': 'tcf',\n 'F\u00F6rem\u00E5l (kartografisk ; att vidra)': 'crn',\n 'F\u00F6rem\u00E5l (kartografisk ; tredimensionell)': 'crn',\n 'F\u00F6rem\u00E5l (tredimensionell)': 'tdf',\n 'Ger\u00E4usche': 'snd',\n 'Kuva': 'sti',\n 'Kuva (kartografinen ; kosketeltava)': 'crt',\n 'Kuva (kartografinen ; liikkuva)': 'crm',\n 'Kuva (kartografinen)': 'cri',\n 'Kuva (liikkuva ; kaksiulotteinen)': 'tdi',\n 'Kuva (liikkuva ; kolmiulotteinen)': 'tdm',\n 'Kuva (still ; kaksiulotteinen)': 'sti',\n 'Kuva (still ; kolmiulotteinen)': 'sti',\n 'Kuva (still ; kosketeltava)': 'tci',\n 'Kuva (still)': 'sti',\n 'Liike (kosketeltava ; notatoitu)': 'tcn',\n 'Liike (notatoitu ; kosketeltava': 'tcn',\n 'Liike (notatoitu)': 'ntv',\n 'Ljud': 'snd',\n 'Musiikki (esitetty)': 'prm',\n 'Musiikki (kosketeltava ; notatoitu)': 'tcm',\n 'Musiikki (notatoitu ; kosketeltava)': 'tcm',\n 'Musiikki (notatoitu)': 'ntm',\n 'Musik (notation ; att vidra)': 'tcm',\n 'Musik (notation)': 'ntm',\n 'Musik (performance)': 'prm',\n 'M\u00E4\u00E4rittelem\u00E4t\u00F6n': 'zzz',\n 'M\u00E4\u00E4rittelem\u00E4t\u00F6n sis\u00E4lt\u00F6tyyppi': 'zzz',\n 'Obest\u00E4md inneh\u00E5llstyp': 'zzz',\n 'Ospecificerad inneh\u00E5llstyp': 'zzz',\n 'Puhe': 'spw',\n 'R\u00F6relse (notation ; att vidra)': 'tcn',\n 'R\u00F6relse (notation)': 'ntv',\n 'Tal': 'spw',\n 'Teksti': 'txt',\n 'Teksti (kosketeltava); Text (att vidra)': 'tct',\n 'Text': 'txt',\n 'Tietokoneohjelma': 'cop',\n 'Useita sis\u00E4lt\u00F6tyyppej\u00E4': 'zzz',\n 'Vild (still ; tv\u00E5dimensionell)': 'sti',\n 'annan': 'xxx',\n 'cartographic dataset': 'crd',\n 'cartographic image': 'cri',\n 'cartographic moving image': 'crm',\n 'cartographic tactile image': 'crt',\n 'cartographic tactile three-dimensional form': 'crn',\n 'cartographic three-dimensional form': 'crf',\n 'cartographic three-dimensional tactile form': 'crn',\n 'computer dataset': 'cod',\n 'computer program': 'cop',\n 'dataset': 'cod',\n 'datorprogram': 'cop',\n 'digitaalinen data': 'cod',\n 'digitalt dataset': 'cod',\n 'esitetty musiikki': 'prm',\n 'framf\u00F6rd musik': 'prm',\n 'gesprochenes Wort': 'spw',\n 'kaksiulotteinen liikkuva kuva': 'tdi',\n 'kartografinen data': 'crd',\n 'kartografinen kolmiulotteinen muoto': 'crf',\n 'kartografinen kuva': 'cri',\n 'kartografinen liikkuva kuva': 'crm',\n 'kartografinen taktiili kolmiulotteinen muoto': 'crn',\n 'kartografinen taktiili kuva': 'crt',\n 'kartografisk bild': 'cri',\n 'kartografisk data': 'crd',\n 'kartografisk r\u00F6rlig bild': 'crm',\n 'kartografisk taktil bild': 'crt',\n 'kartografisk taktil tredimensionell form': 'crn',\n 'kartografisk tredimensionell form': 'crf',\n 'kolmiulotteinen liikkuva kuva': 'tdm',\n 'kolmiulotteinen muoto': 'tdf',\n 'liikenotaatio': 'ntv',\n 'ljud': 'snd',\n 'muu': 'xxx',\n 'm\u00E4\u00E4rittelem\u00E4t\u00F6n': 'zzz',\n 'notated movement': 'ntv',\n 'notated music': 'ntm',\n 'noterad musik': 'ntm',\n 'nuottikirjoitus': 'ntm',\n 'ospecificerad': 'zzz',\n 'other': 'xxx',\n 'performed music': 'prm',\n 'puhe': 'spw',\n 'r\u00F6relsenotation': 'ntv',\n 'sounds': 'snd',\n 'spoken word': 'spw',\n 'still image': 'sti',\n 'stillbild': 'sti',\n 'stillkuva': 'sti',\n 'tactile image': 'tci',\n 'tactile notated movement': 'tcn',\n 'tactile notated music': 'tcm',\n 'tactile text': 'tct',\n 'tactile three-dimensional form': 'tcf',\n 'taktiili kolmiulotteinen muoto': 'tcf',\n 'taktiili kuva': 'tci',\n 'taktiili liikenotaatio': 'tcn',\n 'taktiili nuottikirjoitus': 'tcm',\n 'taktiili teksti': 'tct',\n 'taktil bild': 'tci',\n 'taktil musiknotation': 'tcm',\n 'taktil noterad r\u00F6relse': 'tcn',\n 'taktil text': 'tct',\n 'taktil tredimensionell form': 'tcf',\n 'tal': 'spw',\n 'teksti': 'txt',\n 'text': 'txt',\n 'texte': 'txt',\n 'texte tactile': 'tct',\n 'three-dimensional form': 'tdf',\n 'three-dimensional moving image': 'tdm',\n 'tietokoneohjelma': 'cop',\n 'tredimensionell form': 'tdf',\n 'tredimensionell r\u00F6rlig bild': 'tdm',\n 'tv\u00E5dimensionell r\u00F6rlig bild': 'tdi',\n 'two-dimensional moving image': 'tdi',\n 'unbewegtes Bild': 'sti',\n 'unspecified': 'zzz',\n '\u00C4\u00E4ni': 'snd',\n '\u00E4\u00E4ni': 'snd',\n '\u042D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u0430\u044F \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u0430': 'cop', // computer program\n '\u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 (\u043A\u0430\u0440\u0442\u043E\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043A\u043E\u0435)': 'cri',\n '\u041C\u0443\u0437\u044B\u043A\u0430 (\u0437\u043D\u0430\u043A\u043E\u0432\u0430\u044F)': 'ntm', // notated music\n '\u041C\u0443\u0437\u044B\u043A\u0430 (\u0438\u0441\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u0430\u044F)': 'prm', // performed music\n '\u0423\u0441\u0442\u043D\u0430\u044F \u0440\u0435\u0447\u044C': 'spw',\n '\u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 (\u043D\u0435\u043F\u043E\u0434\u0432\u0438\u0436\u043D\u043E\u0435)': 'sti',\n '\u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 (\u0434\u0432\u0438\u0436\u0443\u0449\u0435\u0435\u0441\u044F)': 'tdi', // 2D moving image\n '\u0422\u0435\u043A\u0441\u0442': 'txt',\n '\u0422\u0435\u043A\u0441\u0442 (\u0432\u0438\u0437\u0443\u0430\u043B\u044C\u043D\u044B\u0439)': 'txt'\n};\n\nconst map337 = {\n 'Computermedien': 'c',\n 'Mikroform': 'h',\n 'annan': 'x',\n 'audio': 's',\n 'computer': 'c',\n 'dator': 'c',\n 'datoranv\u00E4ndbar': 'c',\n 'ei v\u00E4litt\u00E4v\u00E4\u00E4 laitetta': 'n',\n 'elektroninen': 'c',\n 'elektronisk': 'c',\n 'heijastettava': 'g',\n 'ingen medietyp': 'n',\n 'k\u00E4ytett\u00E4viss\u00E4 ilman laitetta': 'n',\n 'microform': 'h',\n 'microscopic': 'p',\n 'mikroform': 'h',\n 'mikromuoto': 'h',\n 'mikroskooppinen': 'p',\n 'mikroskopisch': 'p',\n 'mikroskopisk': 'p',\n 'muu': 'x',\n 'm\u00E4\u00E4rittelem\u00E4t\u00F6n': 'z',\n 'm\u00E4\u00E4rittelem\u00E4t\u00F6n v\u00E4litt\u00E4v\u00E4 laite': 'z',\n 'of\u00F6rmedlad': 'n',\n 'ohne Hilfsmittel zu benutzen': 'n',\n 'omedierad': 'n',\n 'ospecificerad': 'z',\n 'ospecificerad medietyp': 'z',\n 'other': 'x',\n 'projected': 'g',\n 'projektion': 'g',\n 'projicerad': 'g',\n 'projicerbar': 'g',\n 'projizierbar': 'g',\n 'stereografinen': 'e',\n 'stereografisch': 'e',\n 'stereografisk': 'e',\n 'stereographic': 'e',\n 'tietokonek\u00E4ytt\u00F6inen': 'c',\n 'unmediated': 'n',\n 'unspecified': 'z',\n 'useita mediatyyppej\u00E4': 'z',\n 'video': 'v',\n '\u00F6vrig': 'x',\n // Cyrillic (sorted by result):\n '\u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D': 'c',\n '\u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u044B\u0439': 'c',\n '\u043D\u0435\u043F\u043E\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043D\u043D': 'n',\n '\u043D\u0435\u043F\u043E\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0439': 'n',\n '\u0430\u0443\u0434\u0438\u043E': 's', // audio\n '\u0432\u0438\u0434\u0435\u043E': 'v'\n};\n\nconst map338 = {\n 'aperture card': 'ha',\n 'ark': 'nb',\n 'arkki': 'nb',\n 'audio belt': 'sb',\n 'audio cartridge': 'sg',\n 'audio cylinder': 'se',\n 'audio disc': 'sd',\n 'audio roll': 'sq',\n 'audio wire reel': 'sw',\n 'audiocassette': 'ss',\n 'audiotape reel': 'st',\n 'bildband': 'gf',\n 'bildbandsmagasin': 'gc',\n 'bl\u00E4dderblock': 'nn',\n 'card': 'no',\n 'computer card': 'ck',\n 'computer cartridge': 'cb',\n 'computer disc': 'cd',\n 'computer disc cartridge': 'ce',\n 'computer tape cartridge': 'ca',\n 'computer tape cassette': 'cf',\n 'computer tape reel': 'ch',\n 'datorbandmagasin': 'ca',\n 'datorbandspole': 'ch',\n 'datorkassett': 'cf',\n 'datorkort': 'ck',\n 'datorminnesmodul': 'cb',\n 'datorskiva': 'cd',\n 'datorskivmagasin': 'ce',\n 'dia': 'gs',\n 'diabild': 'gs',\n 'film cartridge': 'mc',\n 'film cassette': 'mf',\n 'film reel': 'mr',\n 'film roll': 'mo',\n 'filmikasetti': 'mf',\n 'filmikela': 'mr',\n 'filmiliuska': 'gd',\n 'filmirulla': 'mo',\n 'filmisilmukkakasetti': 'mc',\n 'filmkassett': 'mf',\n 'filmljudspole': 'si',\n 'filmmagasin': 'mc',\n 'filmremsa': 'gd',\n 'filmrulle': 'mo',\n 'filmslip': 'gd',\n 'filmspole': 'mr',\n 'filmstrip': 'gf',\n 'filmstrip cartridge': 'gc',\n 'flipchart': 'nn',\n 'f\u00F6nsterkort': 'ha',\n 'f\u00F6rem\u00E5l': 'nr',\n 'ikkunakortti': 'ha',\n 'kort': 'no',\n 'kortti': 'no',\n 'lehti\u00F6taulu': 'nn',\n 'ljudcylinder': 'se',\n 'ljudkassett': 'ss',\n 'ljudmagasin': 'sg',\n 'ljudrulle': 'sq',\n 'ljudskiva': 'sd',\n 'ljudslinga': 'sb',\n 'ljudspole': 'st',\n 'ljudtr\u00E5d': 'sw',\n 'microfiche': 'he',\n 'microfiche cassette': 'hf',\n 'microfilm cartridge': 'hb',\n 'microfilm cassette': 'hc',\n 'microfilm reel': 'hd',\n 'microfilm roll': 'hj',\n 'microfilm slip': 'hh',\n 'microopaque': 'hg',\n 'microscope slide': 'pp',\n 'mikrofiche': 'he',\n 'mikrofiche (ogenomskinlig)': 'hg',\n 'mikrofichekassett': 'hf',\n 'mikrofilmikasetti': 'hc',\n 'mikrofilmikela': 'hd',\n 'mikrofilmiliuska': 'hh',\n 'mikrofilmirulla': 'hj',\n 'mikrofilmisilmukkakasetti': 'hb',\n 'mikrofilmskassett': 'hc',\n 'mikrofilmsmagasin': 'hb',\n 'mikrofilmsremsa': 'hh',\n 'mikrofilmsrulle': 'hj',\n 'mikrofilmsspole': 'hd',\n 'mikrokortti': 'he',\n 'mikrokortti (l\u00E4pin\u00E4kym\u00E4t\u00F6n)': 'hg',\n 'mikrokorttikasetti': 'hf',\n 'mikroskoperingspreparat': 'pp',\n 'muistikortti': 'ck',\n 'm\u00E4\u00E4rittelem\u00E4t\u00F6n': 'zu',\n 'nide': 'nc',\n 'object': 'nr',\n 'objekti': 'nr',\n 'online resource': 'cr',\n 'onlineresurs': 'cr',\n 'ospecificerad': 'zu',\n 'overhead transparency': 'gt',\n 'piirikotelo': 'cb',\n 'piirtoheitinkalvo': 'gt',\n 'preparaattilasi': 'pp',\n 'raina': 'gf',\n 'rainakasetti': 'gc',\n 'roll': 'na',\n 'rulla': 'na',\n 'rulle': 'na',\n 'sheet': 'nb',\n 'slide': 'gs',\n 'sound-track reel': 'si',\n 'stereografinen kortti': 'eh',\n 'stereografinen levy': 'es',\n 'stereografisk skiva': 'es',\n 'stereografiskt kort': 'eh',\n 'stereograph card': 'eh',\n 'stereograph disc': 'es',\n 'tietokasetti': 'cf',\n 'tietolevy': 'cd',\n 'tietolevykotelo': 'ce',\n 'tietonauhakela': 'ch',\n 'tietonauhan silmukkakasetti': 'ca',\n 'transparang': 'gt',\n 'unspecified': 'zu',\n 'verkkoaineisto': 'cr',\n 'video cartridge': 'vc',\n 'videocassette': 'vf',\n 'videodisc': 'vd',\n 'videokasetti': 'vf',\n 'videokassett': 'vf',\n 'videokela': 'vr',\n 'videolevy': 'vd',\n 'videomagasin': 'vc',\n 'videosilmukkakasetti': 'vc',\n 'videoskiva': 'vd',\n 'videospole': 'vr',\n 'videotape reel': 'vr',\n 'volume': 'nc',\n 'volym': 'nc',\n '\u00E4\u00E4nihihna': 'sb',\n '\u00E4\u00E4nikasetti': 'ss',\n '\u00E4\u00E4nikela': 'st',\n '\u00E4\u00E4nilankakela': 'sw',\n '\u00E4\u00E4nilevy': 'sd',\n '\u00E4\u00E4niraitakela': 'si',\n '\u00E4\u00E4nirulla': 'sq',\n '\u00E4\u00E4nisilmukkakasetti': 'sg',\n '\u00E4\u00E4nisylinteri': 'se'\n};\n\n// const multimediaRegexp = /multimedia/ui;\n\n// eslint-disable-next-line max-lines-per-function\nexport default function () {\n\n return {\n description, validate, fix\n };\n\n function fix(record) {\n nvdebug(`FIX ${description}...`, debugDev);\n const catLang = getCatalogingLanguage(record) || 'fin';\n const fields = getRelevantFields(record);\n fields.forEach(f => fixField(f, catLang));\n nvdebug(` GOT ${fields.length}...`, debugDev);\n // FFS: we actually need newFields array here! Videogame, for example, might be\n // 336 ## \u2021a kaksiulotteinen liikkuva kuva \u2021b tdi \u20212 rdacontent\n // 336 ## \u2021a tietokoneohjelma \u2021b cop \u20212 rdacontent\n const res = {message: [], fix: [], valid: true};\n\n return res;\n }\n\n function validate(record) {\n nvdebug(`VALIDATE ${description}...`, debugDev); // NOT READY YET\n const catLang = getCatalogingLanguage(record) || 'fin';\n const fields = getRelevantFields(record);\n if (fields.length === 0) {\n return {message: [], valid: true};\n }\n const originalStrings = fields.map(f => fieldToString(f));\n const clonedFields = fields.map(f => clone(f));\n clonedFields.forEach(f => fixField(f, catLang));\n const modifiedStrings = clonedFields.map(f => fieldToString(f));\n\n const changes = originalStrings.map((str, i) => `'${str}' => '${modifiedStrings[i]}'`);\n\n return {message: changes, valid: false};\n }\n\n\n function getA(field) {\n const as = field.subfields.filter(f => f.code === 'a');\n if (as.length === 1) {\n return as[0];\n }\n return undefined;\n }\n\n\n function mapTermToCode(term, tag) {\n nvdebug(`TERM/${tag}: '${term}'`, debugDev);\n if (tag === '336' && term in map336) {\n return map336[term];\n }\n if (tag === '337' && term in map337) {\n return map337[term];\n }\n if (tag === '338' && term in map338) {\n return map338[term];\n }\n return undefined;\n }\n\n function mapFieldToCode(field) {\n const subfieldA = getA(field);\n if (subfieldA) {\n return mapTermToCode(subfieldA.value, field.tag);\n }\n return undefined;\n }\n\n function getRelevantFields(record) {\n const fields = record.get('33[678]');\n // Currently not handline $3 etc\n return fields.filter(f => f.subfields.length === 1 && mapFieldToCode(f));\n }\n\n function tagToSubfield2(tag) {\n if (tag === '336') {\n return {'code': '2', 'value': 'rdacontent'};\n }\n if (tag === '337') {\n return {'code': '2', 'value': 'rdamedia'};\n }\n if (tag === '338') {\n return {'code': '2', 'value': 'rdacarrier'};\n }\n }\n\n function fixField(field, catalogingLanguage = 'fin') {\n const subfieldA = getA(field);\n if (!subfieldA) {\n return;\n }\n const code = mapTermToCode(subfieldA.value, field.tag);\n if (!code) {\n return;\n }\n const newTerm = codeToTerm(code);\n if (!newTerm) {\n return;\n }\n\n subfieldA.value = newTerm;\n field.subfields.push({'code': 'b', 'value': code});\n field.subfields.push(tagToSubfield2(field.tag));\n\n function codeToTerm(code) {\n if (field.tag === '336') {\n return map336CodeToTerm(code, catalogingLanguage);\n }\n if (field.tag === '337') {\n return map337CodeToTerm(code, catalogingLanguage);\n }\n if (field.tag === '338') {\n return map338CodeToTerm(code, catalogingLanguage);\n }\n return undefined;\n }\n }\n\n}\n\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["code"]
|
|
7
7
|
}
|
package/dist/fix-33X.test.js
CHANGED
|
@@ -19,7 +19,7 @@ generateTests({
|
|
|
19
19
|
});
|
|
20
20
|
async function testValidatorFactory() {
|
|
21
21
|
const validator = await validatorFactory();
|
|
22
|
-
assert.equal(typeof validator, "
|
|
22
|
+
assert.equal(typeof validator, "object");
|
|
23
23
|
assert.equal(typeof validator.description, "string");
|
|
24
24
|
assert.equal(typeof validator.validate, "function");
|
|
25
25
|
assert.equal(typeof validator.fix, "function");
|
package/dist/fix-33X.test.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/fix-33X.test.js"],
|
|
4
|
-
"sourcesContent": ["import assert from 'node:assert';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './fix-33X.js';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\n\ngenerateTests({\n callback,\n path: [import.meta.dirname, '..', 'test-fixtures', 'fix-33X'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n hooks: {\n before: async () => {\n testValidatorFactory();\n }\n }\n});\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n assert.equal(typeof validator, '
|
|
4
|
+
"sourcesContent": ["import assert from 'node:assert';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './fix-33X.js';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\n\ngenerateTests({\n callback,\n path: [import.meta.dirname, '..', 'test-fixtures', 'fix-33X'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n hooks: {\n before: async () => {\n testValidatorFactory();\n }\n }\n});\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n assert.equal(typeof validator, 'object');\n assert.equal(typeof validator.description, 'string');\n assert.equal(typeof validator.validate, 'function');\n assert.equal(typeof validator.fix, 'function');\n}\n\nasync function callback({getFixture, fix = false}) {\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n assert.deepEqual(result, expectedResult);\n return;\n }\n\n await validator.fix(record);\n assert.deepEqual(record, expectedResult);\n}\n"],
|
|
5
5
|
"mappings": "AAAA,OAAO,YAAY;AACnB,SAAQ,kBAAiB;AACzB,OAAO,sBAAsB;AAC7B,SAAQ,eAAc;AACtB,OAAO,mBAAmB;AAE1B,cAAc;AAAA,EACZ;AAAA,EACA,MAAM,CAAC,YAAY,SAAS,MAAM,iBAAiB,SAAS;AAAA,EAC5D,iBAAiB;AAAA,EACjB,SAAS;AAAA,EACT,QAAQ;AAAA,IACN,QAAQ,QAAQ;AAAA,EAClB;AAAA,EACA,OAAO;AAAA,IACL,QAAQ,YAAY;AAClB,2BAAqB;AAAA,IACvB;AAAA,EACF;AACF,CAAC;AAED,eAAe,uBAAuB;AACpC,QAAM,YAAY,MAAM,iBAAiB;AAEzC,SAAO,MAAM,OAAO,WAAW,QAAQ;AACvC,SAAO,MAAM,OAAO,UAAU,aAAa,QAAQ;AACnD,SAAO,MAAM,OAAO,UAAU,UAAU,UAAU;AAClD,SAAO,MAAM,OAAO,UAAU,KAAK,UAAU;AAC/C;AAEA,eAAe,SAAS,EAAC,YAAY,MAAM,MAAK,GAAG;AACjD,QAAM,YAAY,MAAM,iBAAiB;AACzC,QAAM,SAAS,IAAI,WAAW,WAAW,aAAa,CAAC;AACvD,QAAM,iBAAiB,WAAW,qBAAqB;AAGvD,MAAI,CAAC,KAAK;AACR,UAAM,SAAS,MAAM,UAAU,SAAS,MAAM;AAC9C,WAAO,UAAU,QAAQ,cAAc;AACvC;AAAA,EACF;AAEA,QAAM,UAAU,IAAI,MAAM;AAC1B,SAAO,UAAU,QAAQ,cAAc;AACzC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import createDebugLogger from "debug";
|
|
2
|
+
import { nvdebug } from "./utils.js";
|
|
3
|
+
const debug = createDebugLogger("@natlibfi/marc-record-validators-melinda:fix-country-codes");
|
|
4
|
+
const debugDev = debug.extend("dev");
|
|
1
5
|
export default function() {
|
|
2
6
|
return {
|
|
3
7
|
description: "Fix deprecated country codes",
|
|
@@ -5,6 +9,7 @@ export default function() {
|
|
|
5
9
|
fix
|
|
6
10
|
};
|
|
7
11
|
function fix(record) {
|
|
12
|
+
nvdebug(`FIX ME:`, debugDev);
|
|
8
13
|
const res = { message: [], fix: [], valid: true };
|
|
9
14
|
const [field008] = record.get("008");
|
|
10
15
|
if (!field008) {
|