@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
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import createDebugLogger from "debug";
|
|
2
2
|
const debug = createDebugLogger("@natlibfi/melinda-marc-record-merge-reducers:mergeConstraints");
|
|
3
3
|
const debugDev = debug.extend("dev");
|
|
4
|
-
const keyX00 = "
|
|
5
|
-
const keyX10 = "
|
|
6
|
-
const keyX11 = "
|
|
4
|
+
const keyX00 = "abcjklnoqrstuwx";
|
|
5
|
+
const keyX10 = "abcdfghklnoprstuwx";
|
|
6
|
+
const keyX11 = "acdefghklnpqstuwx";
|
|
7
7
|
const keyX30 = "adfghklmnoprstvwxyz";
|
|
8
|
+
const pairedTitleSubfields = "iklmnoprst";
|
|
8
9
|
const mergeConstraints = [
|
|
9
10
|
{ "tag": "010", "required": "a", "key": "a" },
|
|
10
11
|
{ "tag": "013", "required": "a", "key": "a" },
|
|
@@ -13,8 +14,8 @@ const mergeConstraints = [
|
|
|
13
14
|
{ "tag": "016", "required": "a", "key": "a2" },
|
|
14
15
|
{ "tag": "017", "required": "a", "key": "a" },
|
|
15
16
|
{ "tag": "018", "required": "a", "key": "a" },
|
|
16
|
-
{ "tag": "020", "required": "", "paired": "a", "key": "
|
|
17
|
-
// NB!
|
|
17
|
+
{ "tag": "020", "required": "", "paired": "a", "key": "az" },
|
|
18
|
+
// NB! $a foo $z lorum and $a foo $z ipsum would not merge! Due to common denominator and f020$z onlies this is the best we can done. This could be handled if 020 would have multiple merge constrains: one for f020$a, and one for f020$z...
|
|
18
19
|
{ "tag": "022", "required": "", "paired": "a", "key": "alz" },
|
|
19
20
|
{ "tag": "024", "required": "", "paired": "a", "key": "ad" },
|
|
20
21
|
{ "tag": "025", "required": "a", "key": "a" },
|
|
@@ -34,10 +35,10 @@ const mergeConstraints = [
|
|
|
34
35
|
{ "tag": "037", "required": "b", "key": "ab" },
|
|
35
36
|
{ "tag": "039", "required": "a" },
|
|
36
37
|
{ "tag": "040", "required": "", "key": "" },
|
|
37
|
-
{ "tag": "041", "required": "", "paired": "2", "key": "" },
|
|
38
|
+
{ "tag": "041", "required": "", "paired": "2", "key": "ad" },
|
|
38
39
|
// Don't put $2 in 'key'! hasCommonNominator() would get into trouble with it...
|
|
39
|
-
{ "tag": "042", "required": "
|
|
40
|
-
//
|
|
40
|
+
{ "tag": "042", "required": "", "key": "" },
|
|
41
|
+
// Contents (supposedly $a subfields) can be anything, and still merge... (042 $a foo + 042 $b bar is perfectly mergeable)
|
|
41
42
|
{ "tag": "043", "required": "a", "key": "abc" },
|
|
42
43
|
{ "tag": "044", "required": "", "key": "abc", "paired": "abc" },
|
|
43
44
|
{ "tag": "045", "required": "", "key": "abc", "paired": "abc" },
|
|
@@ -67,11 +68,11 @@ const mergeConstraints = [
|
|
|
67
68
|
{ "tag": "086", "required": "", "paired": "a", "key": "a" },
|
|
68
69
|
{ "tag": "088", "required": "", "paired": "a", "key": "a" },
|
|
69
70
|
// NB! 100, 110 and 111 may have title parts that are handled elsewhere
|
|
70
|
-
{ "tag": "100", "required": "a", "paired":
|
|
71
|
-
{ "tag": "110", "required": "a", "paired":
|
|
72
|
-
{ "tag": "111", "required": "a", "paired":
|
|
71
|
+
{ "tag": "100", "required": "a", "paired": `b${pairedTitleSubfields}`, "key": keyX00 },
|
|
72
|
+
{ "tag": "110", "required": "a", "paired": `b${pairedTitleSubfields}`, "key": keyX10 },
|
|
73
|
+
{ "tag": "111", "required": "a", "paired": pairedTitleSubfields, "key": keyX11 },
|
|
73
74
|
// NB! 130 has no name part, key is used for title part
|
|
74
|
-
{ "tag": "130", "required": "a", "key": keyX30 },
|
|
75
|
+
{ "tag": "130", "required": "a", paired: pairedTitleSubfields, "key": keyX30 },
|
|
75
76
|
{ "tag": "210", "required": "a", "key": "ab" },
|
|
76
77
|
{ "tag": "222", "required": "a", "key": "ab" },
|
|
77
78
|
{ "tag": "240", "required": "a", "key": "adfghklmnoprs" },
|
|
@@ -95,7 +96,7 @@ const mergeConstraints = [
|
|
|
95
96
|
{ "tag": "264", "required": "", "key": "abc" },
|
|
96
97
|
// NB "S.l." normalizations?" not implemented
|
|
97
98
|
// SKIP TAG 270 ON PURPOSE! Melinda's N=43.
|
|
98
|
-
{ "tag": "300", "required": "
|
|
99
|
+
{ "tag": "300", "required": "", "key": "abcefg" },
|
|
99
100
|
{ "tag": "306", "required": "a", "key": "a" },
|
|
100
101
|
// SKIP TAG 307 ON PURPOSE! N=0
|
|
101
102
|
{ "tag": "310", "required": "a", "key": "ab" },
|
|
@@ -109,7 +110,7 @@ const mergeConstraints = [
|
|
|
109
110
|
{ "tag": "338", "required": "b2", "key": "ab2" },
|
|
110
111
|
// / MET-88: don't merge different $a subfields
|
|
111
112
|
{ "tag": "340", "required": "", "paired": "abcdefghijkmnop", "key": "abcdefghijkmnop" },
|
|
112
|
-
{ "tag": "341", "required": "", "paired": "
|
|
113
|
+
{ "tag": "341", "required": "", "paired": "a2", "key": "abcde2" },
|
|
113
114
|
// NEW! Starting to appear!
|
|
114
115
|
{ "tag": "342", "required": "", "paired": "abcdefghijklmnopqrstuvw", "key": "abcdefghijklmnopqrstuvw" },
|
|
115
116
|
// SKIP 342. NOT SEEN!
|
|
@@ -140,7 +141,7 @@ const mergeConstraints = [
|
|
|
140
141
|
{ "tag": "385", "required": "a", "paired": "abmn", "key": "abmn" },
|
|
141
142
|
{ "tag": "386", "required": "a", "paired": "abmn", "key": "abmn" },
|
|
142
143
|
{ "tag": "388", "required": "a", "key": "a" },
|
|
143
|
-
{ "tag": "490", "required": "
|
|
144
|
+
{ "tag": "490", "required": "", "key": "axvl" },
|
|
144
145
|
{ "tag": "500", "required": "a", "key": "a" },
|
|
145
146
|
{ "tag": "501", "required": "a", "key": "a" },
|
|
146
147
|
{ "tag": "502", "required": "a", "key": "abcdgo" },
|
|
@@ -203,10 +204,10 @@ const mergeConstraints = [
|
|
|
203
204
|
{ "tag": "597", "required": "" },
|
|
204
205
|
{ "tag": "598", "required": "" },
|
|
205
206
|
{ "tag": "599", "required": "" },
|
|
206
|
-
{ "tag": "600", "required": "a", "paired":
|
|
207
|
-
{ "tag": "610", "required": "a", "paired":
|
|
208
|
-
{ "tag": "611", "required": "a", "paired":
|
|
209
|
-
{ "tag": "630", "required": "a", "paired":
|
|
207
|
+
{ "tag": "600", "required": "a", "paired": `b${pairedTitleSubfields}vxyz`, "key": keyX00 },
|
|
208
|
+
{ "tag": "610", "required": "a", "paired": `b${pairedTitleSubfields}vxyz`, "key": keyX10 },
|
|
209
|
+
{ "tag": "611", "required": "a", "paired": `${pairedTitleSubfields}vxyz`, "key": keyX11 },
|
|
210
|
+
{ "tag": "630", "required": "a", "paired": `${pairedTitleSubfields}vxyz`, "key": keyX30 },
|
|
210
211
|
// NB! 700, 710 and 711 may have title parts that are handled elsewhere
|
|
211
212
|
{ "tag": "647", "required": "a", "paired": "avxyz", "key": "acdgvxyz02" },
|
|
212
213
|
{ "tag": "648", "required": "a", "paired": "avxyz", "key": "avxyz02" },
|
|
@@ -226,15 +227,15 @@ const mergeConstraints = [
|
|
|
226
227
|
// N=0
|
|
227
228
|
{ "tag": "688", "required": "a" },
|
|
228
229
|
// N=0
|
|
229
|
-
{ "tag": "700", "required": "a", "paired":
|
|
230
|
-
// h/i/m/o/r/s/x are missing from 100
|
|
231
|
-
{ "tag": "710", "required": "a", "paired":
|
|
230
|
+
{ "tag": "700", "required": "a", "paired": `b${pairedTitleSubfields}x`, "key": keyX00 },
|
|
231
|
+
// h/i/m/o/r/s/x are missing from 100, NB! 's' is repeatable, but we are not merging them here!
|
|
232
|
+
{ "tag": "710", "required": "a", "paired": `b${pairedTitleSubfields}x`, "key": keyX10 },
|
|
232
233
|
// h/j/m/o/r/s/x are missing from 110
|
|
233
|
-
{ "tag": "711", "required": "a", "paired":
|
|
234
|
+
{ "tag": "711", "required": "a", "paired": `cdef${pairedTitleSubfields}x`, "key": keyX11 },
|
|
234
235
|
// h/i/s/x are missing from 711
|
|
235
236
|
{ "tag": "720", "required": "a", "key": "a" },
|
|
236
237
|
// NB! 730 has no name part, key is used for title part
|
|
237
|
-
{ "tag": "730", "required": "a", "key": keyX30 },
|
|
238
|
+
{ "tag": "730", "required": "a", "paired": `df${pairedTitleSubfields}x`, "key": keyX30 },
|
|
238
239
|
// NB: 130->730 magic subfields might not agree...
|
|
239
240
|
{ "tag": "740", "required": "a", "key": "ahnp" },
|
|
240
241
|
{ "tag": "751", "required": "a", "key": "a" },
|
|
@@ -264,7 +265,7 @@ const mergeConstraints = [
|
|
|
264
265
|
{ "tag": "786", "required": "", "paired": "abcrstuxyz", "key": "abcdhijmprstuxyz4" },
|
|
265
266
|
{ "tag": "787", "required": "", "paired": "abcdhmstuxyz4" },
|
|
266
267
|
{ "tag": "788", "required": "", "paired": "stx", "key": "abdestx" },
|
|
267
|
-
{ "tag": "800", "required": "a", "paired": "
|
|
268
|
+
{ "tag": "800", "required": "a", "paired": "bt", "key": keyX00 },
|
|
268
269
|
{ "tag": "810", "required": "a", "paired": "bt", "key": keyX10 },
|
|
269
270
|
{ "tag": "811", "required": "a", "paired": "t", "key": keyX11 },
|
|
270
271
|
{ "tag": "830", "required": "a", "key": keyX30 },
|
|
@@ -315,21 +316,23 @@ const mergeConstraints = [
|
|
|
315
316
|
{ "tag": "LOW", "required": "" },
|
|
316
317
|
{ "tag": "SID", "required": "" }
|
|
317
318
|
];
|
|
318
|
-
function
|
|
319
|
-
if (constraintName in tagsConstraints) {
|
|
320
|
-
return tagsConstraints[constraintName];
|
|
321
|
-
}
|
|
322
|
-
return null;
|
|
323
|
-
}
|
|
324
|
-
export function getMergeConstraintsForTag(tag, constraintName) {
|
|
319
|
+
export function getMergeConstraintsForTag(tag, constraintName = void 0) {
|
|
325
320
|
const tagsConstraintsArray = mergeConstraints.filter((entry) => tag === entry.tag);
|
|
326
321
|
if (tagsConstraintsArray.length === 0) {
|
|
327
|
-
debugDev(`WARNING No key found for ${tag}
|
|
328
|
-
|
|
322
|
+
debugDev(`WARNING No key found for ${tag}!`);
|
|
323
|
+
}
|
|
324
|
+
if (!constraintName) {
|
|
325
|
+
return tagsConstraintsArray;
|
|
329
326
|
}
|
|
330
327
|
if (tagsConstraintsArray.length > 1) {
|
|
331
328
|
debugDev(`WARNING Multiple values for '${constraintName}' (N=${tagsConstraintsArray.length}) found in ${tag}. Using first values.`);
|
|
332
329
|
}
|
|
333
|
-
return constraintToValue(
|
|
330
|
+
return tagsConstraintsArray.map((c) => constraintToValue(c, constraintName));
|
|
331
|
+
function constraintToValue(tagsConstraints, constraintName2) {
|
|
332
|
+
if (constraintName2 in tagsConstraints) {
|
|
333
|
+
return tagsConstraints[constraintName2];
|
|
334
|
+
}
|
|
335
|
+
return null;
|
|
336
|
+
}
|
|
334
337
|
}
|
|
335
338
|
//# sourceMappingURL=mergeConstraints.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/merge-fields/mergeConstraints.js"],
|
|
4
|
-
"sourcesContent": ["import createDebugLogger from 'debug';\nconst debug = createDebugLogger('@natlibfi/melinda-marc-record-merge-reducers:mergeConstraints');\n//const debugData = debug.extend('data');\nconst debugDev = debug.extend('dev');\n\n// Specs: https://workgroups.helsinki.fi/x/K1ohCw (though we occasionally differ from them)...\n\n// \"key\" is an unique key that must match (be absent or exist+be identical) in both.\n// \"paired\" refers to a field that must either exist in both or be absent in both (negative XOR). Typically it's not defined.\n// NB: key+paired with identical values is an attempt to prevent copy for (ET) fields, and to force separate fields on (T) fields.\n// NB! If base has eg. no 264, two+ 264 fields can be copied from the source.\n\n// NB! not all X00 fields have, say, $x subfield. However, we can still share them...\n// $h is non-1XX?, $i is 7XX only, $w is 8XX only...\nconst keyX00 = 'abcjloqrtuwx'; // Shared: $abcdefg...\nconst keyX10 = 'abcdfghlnoprstuwx';\nconst keyX11 = 'acdefghlnpqstuwx';\nconst keyX30 = 'adfghklmnoprstvwxyz';\n\nconst mergeConstraints = [\n {'tag': '010', 'required': 'a', 'key': 'a'},\n {'tag': '013', 'required': 'a', 'key': 'a'}, // We have 2 instances in Melinda...\n {'tag': '015', 'required': 'a', 'key': 'a'},\n {'tag': '016', 'required': 'a', 'key': 'a2'},\n {'tag': '017', 'required': 'a', 'key': 'a'},\n {'tag': '018', 'required': 'a', 'key': 'a'},\n {'tag': '020', 'required': '', 'paired': 'a', 'key': 'a'}, // NB! how to handle $z-only cases? 'required-fallback'='z'?\n {'tag': '022', 'required': '', 'paired': 'a', 'key': 'alz'},\n {'tag': '024', 'required': '', 'paired': 'a', 'key': 'ad'},\n {'tag': '025', 'required': 'a', 'key': 'a'},\n {'tag': '026', 'required': 'a', 'key': 'a'},\n {'tag': '027', 'required': 'a', 'key': 'a'}, // on tuolla pari $z:\u00E4\u00E4\n {'tag': '028', 'required': 'a', 'key': 'ab'},\n {'tag': '030', 'required': 'a', 'key': 'a'},\n {'tag': '031', 'required': '', 'key': 'abcegmnopr2'}, // mites t\u00E4mm\u00F6isen k\u00E4yt\u00E4nn\u00F6ss\u00E4 avaimettoman klaarais? TODO: tests\n {'tag': '032', 'required': 'a', 'key': 'ab'},\n {'tag': '033', 'required': 'a', 'key': 'abcp0123'}, // 0,1% are without $a. Ignore them for now.\n {'tag': '034', 'required': 'ab', 'key': 'abcdefghjkmnprstxyz0123'},\n {'tag': '035', 'required': '', 'key': 'az'},\n {'tag': '036', 'required': 'a', 'key': 'a'},\n {'tag': '037', 'required': 'b', 'key': 'ab'},\n {'tag': '039', 'required': 'a'},\n {'tag': '040', 'required': '', 'key': ''},\n {'tag': '041', 'required': '', 'paired': '2', 'key': ''}, // Don't put $2 in 'key'! hasCommonNominator() would get into trouble with it...\n {'tag': '042', 'required': 'a', 'key': ''}, // NB: preprocessor hacks applied\n {'tag': '043', 'required': 'a', 'key': 'abc'},\n {'tag': '044', 'required': '', 'key': 'abc', 'paired': 'abc'},\n {'tag': '045', 'required': '', 'key': 'abc', 'paired': 'abc'}, // (ET) // 045 is problematic either-$a or $b or $c...\n {'tag': '046', 'required': 'a', 'key': 'abcdejklmnop', 'paired': 'abcdejklmnop'},\n {'tag': '047', 'required': 'a', 'key': 'a2'},\n {'tag': '048', 'required': '', 'paired': 'ab', 'key': 'ba'},\n {'tag': '049', 'required': '', 'key': 'abcd'},\n {'tag': '050', 'required': 'a', 'key': 'ab13'},\n {'tag': '051', 'required': 'a', 'key': 'abc'}, // 2021-08-27: only one field in the whole Melinda\n {'tag': '052', 'required': 'a', 'key': 'abd'},\n {'tag': '055', 'required': 'a', 'key': 'ab'},\n {'tag': '060', 'required': 'a', 'key': 'ab'},\n {'tag': '061', 'required': 'a', 'paired': 'b', 'key': 'abc'},\n {'tag': '066', 'required': 'c'},\n {'tag': '070', 'required': 'a', 'key': 'ab'},\n {'tag': '071', 'required': 'a', 'paired': 'abc', 'key': 'abc'}, // N=3\n {'tag': '072', 'required': 'a', 'key': 'ax'},\n {'tag': '074', 'required': '', 'paired': 'a', 'key': 'az'},\n {'tag': '080', 'required': 'a', 'paired': 'bx', 'key': 'abx'},\n {'tag': '082', 'required': 'a', 'paired': 'b', 'key': 'abmq2'},\n {'tag': '083', 'required': 'a', 'paired': 'b', 'key': 'abmqy'},\n {'tag': '084', 'required': 'a', 'paired': 'b2', 'key': 'abq2'},\n {'tag': '085', 'required': '', 'paired': 'abcfrstuvwyz', 'key': 'abcfrstuvwxyz'},\n {'tag': '086', 'required': '', 'paired': 'a', 'key': 'a'},\n {'tag': '088', 'required': '', 'paired': 'a', 'key': 'a'},\n // NB! 100, 110 and 111 may have title parts that are handled elsewhere\n {'tag': '100', 'required': 'a', 'paired': 't', 'key': keyX00},\n {'tag': '110', 'required': 'a', 'paired': 'bt', 'key': keyX10},\n {'tag': '111', 'required': 'a', 'paired': 't', 'key': keyX11},\n // NB! 130 has no name part, key is used for title part\n {'tag': '130', 'required': 'a', 'key': keyX30},\n {'tag': '210', 'required': 'a', 'key': 'ab'},\n {'tag': '222', 'required': 'a', 'key': 'ab'},\n {'tag': '240', 'required': 'a', 'key': 'adfghklmnoprs'},\n {'tag': '242', 'required': 'a', 'key': 'abchnpy'},\n {'tag': '243', 'required': 'a', 'key': 'adfghklmnoprs'},\n {'tag': '245', 'required': 'a', 'key': 'abcghnps', 'paired': 'abnps'},\n {'tag': '246', 'required': 'a', 'key': 'abfnp'},\n {'tag': '247', 'required': 'a', 'key': 'abfnpx'},\n {'tag': '250', 'required': 'a', 'key': 'ab'},\n {'tag': '251', 'required': 'a', 'key': 'a'},\n {'tag': '254', 'required': 'a', 'key': 'a'},\n {'tag': '255', 'required': 'a', 'key': 'abcdefg', 'paired': 'abcdefg'},\n {'tag': '256', 'required': 'a', 'key': 'a'},\n {'tag': '257', 'required': 'a', 'key': 'a'},\n {'tag': '258', 'required': 'a', 'key': 'a'}, // Melinda: N=1\n //{'tag': '260', 'required': '', 'paired': 'abcefg', 'key': 'abcefg'},\n {'tag': '260', 'required': '', 'key': 'abcefg'},\n {'tag': '263', 'required': 'a', 'key': 'a'},\n //{'tag': '264', 'required': '', 'paired': 'abc', 'key': 'abc'}, // NB \"S.l.\" normalizations?\" not implemented\n {'tag': '264', 'required': '', 'key': 'abc'}, // NB \"S.l.\" normalizations?\" not implemented\n // SKIP TAG 270 ON PURPOSE! Melinda's N=43.\n {'tag': '300', 'required': 'a', 'key': 'abcefg'},\n {'tag': '306', 'required': 'a', 'key': 'a'},\n // SKIP TAG 307 ON PURPOSE! N=0\n {'tag': '310', 'required': 'a', 'key': 'ab'},\n {'tag': '321', 'required': 'a', 'key': 'ab'},\n {'tag': '335', 'required': 'a', 'key': 'ab'}, // Melinda N=1 (a test field). M might increase?\n {'tag': '336', 'required': 'b2', 'key': 'ab2'}, // MET-88: don't merge different $a subfields\n {'tag': '337', 'required': 'b2', 'key': 'ab2'}, // MET-88: don't merge different $a subfields\n {'tag': '338', 'required': 'b2', 'key': 'ab2'}, // / MET-88: don't merge different $a subfields\n {'tag': '340', 'required': '', 'paired': 'abcdefghijkmnop', 'key': 'abcdefghijkmnop'},\n {'tag': '341', 'required': '', 'paired': 'abcde', 'key': 'abcde'}, // NEW! Starting to appear!\n {'tag': '342', 'required': '', 'paired': 'abcdefghijklmnopqrstuvw', 'key': 'abcdefghijklmnopqrstuvw'}, // SKIP 342. NOT SEEN!\n {'tag': '343', 'required': '', 'paired': 'abcdefghi', 'key': 'abcdefghi'}, // SKIP 343.\n {'tag': '344', 'required': '', 'paired': 'abcdefgh', 'key': 'abcdefgh'},\n {'tag': '345', 'required': '', 'paired': 'abcd', 'key': 'abcd'},\n {'tag': '346', 'required': '', 'paired': 'ab', 'key': 'ab'},\n {'tag': '347', 'required': '', 'paired': 'abcdef', 'key': 'abcdef'},\n {'tag': '348', 'required': '', 'paired': 'ab', 'key': 'ab'},\n {'tag': '348', 'required': '', 'paired': 'abc', 'key': 'abc'},\n {'tag': '351', 'required': '', 'paired': 'abc', 'key': 'abc'},\n {'tag': '352', 'required': '', 'paired': 'abcdefgiq', 'key': 'abcdefgiq'},\n {'tag': '355', 'required': '', 'paired': 'abcdefghj', 'key': 'abcdefghj'},\n {'tag': '357', 'required': 'a', 'key': 'abcg'},\n {'tag': '362', 'required': 'a', 'key': 'az'},\n {'tag': '363', 'required': '', 'paired': 'abcdefghijklmuv', 'key': 'abcdefghijklmuv'},\n {'tag': '365', 'required': 'b', 'paired': 'abcdefghijkm', 'key': 'abcdefghijkm'}, // N=0\n {'tag': '366', 'required': '', 'paired': 'abcdefgjkm', 'key': 'abcdefgjkm'},\n {'tag': '370', 'required': '', 'paired': 'cfgistuv', 'key': 'cfgistuv'},\n {'tag': '377', 'required': '', 'paired': 'al', 'key': 'al'},\n {'tag': '380', 'required': 'a', 'key': 'a'},\n {'tag': '381', 'required': 'auv', 'key': 'auv'},\n {'tag': '382', 'required': ''},\n {'tag': '383', 'required': 'abcde', 'key': 'abcde'},\n {'tag': '384', 'required': 'a', 'key': 'a'},\n {'tag': '385', 'required': 'a', 'paired': 'abmn', 'key': 'abmn'},\n {'tag': '386', 'required': 'a', 'paired': 'abmn', 'key': 'abmn'},\n {'tag': '388', 'required': 'a', 'key': 'a'},\n {'tag': '490', 'required': 'a', 'key': 'axvl'},\n {'tag': '500', 'required': 'a', 'key': 'a'},\n {'tag': '501', 'required': 'a', 'key': 'a'},\n {'tag': '502', 'required': 'a', 'key': 'abcdgo'},\n {'tag': '504', 'required': 'a', 'paired': 'ab', 'key': 'ab'},\n {'tag': '505', 'required': '', 'paired': 'agrtu', 'key': 'agrtu'},\n {'tag': '506', 'required': 'a', 'paired': '', 'key': 'abcdefgqu'},\n {'tag': '507', 'required': 'a', 'paired': 'ab', 'key': 'ab'},\n {'tag': '508', 'required': 'a', 'key': 'a'},\n {'tag': '509', 'required': 'a', 'key': 'acd'},\n {'tag': '510', 'required': 'a', 'key': 'abcx'},\n {'tag': '511', 'required': 'a', 'key': 'a'},\n {'tag': '513', 'required': '', 'paired': 'ab', 'key': 'ab'},\n {'tag': '514', 'required': '', 'paired': 'abcdefghijkmuz', 'key': 'abcdefghijkmuz'},\n {'tag': '515', 'required': 'a', 'key': 'a'},\n {'tag': '518', 'required': '', 'paired': 'adop', 'key': 'adop'},\n {'tag': '520', 'required': 'a', 'paired': 'abc', 'key': 'abc'},\n {'tag': '521', 'required': 'a', 'paired': 'ab', 'key': 'ab'},\n {'tag': '522', 'required': 'a', 'key': 'a'},\n {'tag': '524', 'required': 'a', 'key': 'a'},\n {'tag': '525', 'required': 'a', 'key': 'a'},\n {'tag': '526', 'required': 'a', 'paired': 'abcdi', 'key': 'abcdi'},\n {'tag': '530', 'required': 'a', 'paired': 'abcd', 'key': 'abcd'},\n {'tag': '532', 'required': 'a', 'key': 'a'},\n {'tag': '533', 'required': 'a', 'paired': 'abcdefmn7', 'key': 'abcdefmn7'},\n {'tag': '534', 'required': '', 'paired': 'abcempt', 'key': 'abcempt'},\n {'tag': '535', 'required': '', 'paired': 'abcdg', 'key': 'abcdg'},\n {'tag': '536', 'required': '', 'paired': 'abcdefgh', 'key': 'abcdefgh'},\n {'tag': '538', 'required': 'a', 'paired': 'aiu', 'key': 'aiu'},\n {'tag': '540', 'required': '', 'paired': 'abcdfgqu', 'key': 'abcdfgqu'},\n {'tag': '541', 'required': '', 'paired': 'abcdefhno', 'key': 'abcdefhno'},\n {'tag': '542', 'required': '', 'paired': 'abcdfghijklmopqrsu', 'key': 'abcdfghijklmopqrsu'},\n {'tag': '544', 'required': '', 'paired': 'abcden', 'key': 'abcden'},\n {'tag': '545', 'required': '', 'paired': 'abu', 'key': 'abu'},\n {'tag': '546', 'required': '', 'paired': 'ab', 'key': 'ab'},\n {'tag': '547', 'required': 'a', 'key': 'a'},\n {'tag': '550', 'required': 'a', 'key': 'a'},\n {'tag': '552', 'required': '', 'paired': 'abcdefghijklmnopuz', 'key': 'abcdefghijklmnopuz'},\n {'tag': '555', 'required': 'a', 'paired': 'abcdu', 'key': 'abcdu'},\n {'tag': '556', 'required': 'a', 'key': 'az'},\n {'tag': '561', 'required': 'a', 'key': 'au'},\n {'tag': '562', 'required': '', 'paired': 'abcde', 'key': 'abcde'},\n {'tag': '563', 'required': 'a', 'key': 'au'},\n {'tag': '565', 'required': '', 'paired': 'abc', 'key': 'abc'},\n {'tag': '567', 'required': '', 'paired': 'ab', 'key': 'ab'},\n {'tag': '580', 'required': 'a', 'key': 'a'},\n {'tag': '581', 'required': 'a', 'key': 'a'},\n {'tag': '583', 'required': '', 'paired': 'abcdefhijklnou', 'key': 'abcdefhijklnou'},\n {'tag': '584', 'required': '', 'paired': 'ab', 'key': 'ab'},\n {'tag': '585', 'required': 'a', 'key': 'a'},\n {'tag': '586', 'required': 'a', 'key': 'a'},\n {'tag': '588', 'required': 'a', 'key': 'a'},\n // NB! Currently we never merge 59X fields (see mergableTags.js). Doublish removals such as MELKEHITYS-3147 are handled by postprocessor.\n {'tag': '590', 'required': ''},\n {'tag': '591', 'required': ''},\n {'tag': '592', 'required': ''},\n {'tag': '593', 'required': ''},\n {'tag': '594', 'required': ''},\n {'tag': '595', 'required': ''},\n {'tag': '596', 'required': ''},\n {'tag': '597', 'required': ''},\n {'tag': '598', 'required': ''},\n {'tag': '599', 'required': ''},\n {'tag': '600', 'required': 'a', 'paired': 'tvxyz', 'key': keyX00},\n {'tag': '610', 'required': 'a', 'paired': 'btvxyz', 'key': keyX10},\n {'tag': '611', 'required': 'a', 'paired': 'tvxyz', 'key': keyX11},\n {'tag': '630', 'required': 'a', 'paired': 'atvxyz', 'key': keyX30},\n // NB! 700, 710 and 711 may have title parts that are handled elsewhere\n {'tag': '647', 'required': 'a', 'paired': 'avxyz', 'key': 'acdgvxyz02'},\n {'tag': '648', 'required': 'a', 'paired': 'avxyz', 'key': 'avxyz02'},\n {'tag': '650', 'required': 'a', 'paired': 'abcdegvxyz', 'key': 'abcdegvxyz20'},\n {'tag': '651', 'required': 'a', 'paired': 'aegvxyz', 'key': 'aegvxyz20'},\n {'tag': '653', 'required': 'a', 'paired': 'a', 'key': 'a'}, // this is interesting as a can be repeated\n {'tag': '654', 'required': '', 'paired': 'abcevxyz'},\n {'tag': '655', 'required': 'a', 'paired': 'abcvxyz', 'key': 'avxyz20'},\n {'tag': '656', 'required': 'a', 'paired': 'akvxyz'}, // N=0\n {'tag': '657', 'required': 'a', 'paired': 'avxyz'}, // N=0\n {'tag': '658', 'required': 'a', 'paired': 'abcd'}, // N=0\n {'tag': '662', 'required': '', 'paired': 'abcdefgh'}, // N=0\n {'tag': '688', 'required': 'a'}, // N=0\n {'tag': '700', 'required': 'a', 'paired': 't', 'key': keyX00}, // h/i/m/o/r/s/x are missing from 100\n {'tag': '710', 'required': 'a', 'paired': 'bt', 'key': keyX10}, // h/j/m/o/r/s/x are missing from 110\n {'tag': '711', 'required': 'a', 'paired': 'cdeflns', 'key': keyX11}, // h/i/s/x are missing from 711\n {'tag': '720', 'required': 'a', 'key': 'a'},\n // NB! 730 has no name part, key is used for title part\n {'tag': '730', 'required': 'a', 'key': keyX30}, // NB: 130->730 magic subfields might not agree...\n {'tag': '740', 'required': 'a', 'key': 'ahnp'},\n {'tag': '751', 'required': 'a', 'key': 'a'}, // N=11, kaikissa pelkk\u00E4 $a\n {'tag': '752', 'required': '', 'key': 'abcdefgh'}, // N=12234\n {'tag': '753', 'required': '', 'key': 'abc'},\n {'tag': '754', 'required': '', 'key': 'acdxz'}, // N=3\n {'tag': '758', 'required': 'a', 'key': 'ai'}, // N=1\n\n {'tag': '760', 'required': 'tw', key: 'twxy'},\n {'tag': '762', 'required': 't', key: 'abcdhmstxy'},\n {'tag': '765', 'required': 't', key: 'abcdhmrstuwxyz'},\n {'tag': '767', 'required': 't', key: 'abcdhmrstuwxyz'},\n {'tag': '770', 'required': 't', 'paired': 'ruxyz', key: 'abcdhmrstuwxyz'},\n {'tag': '772', 'required': 't', key: 'abcdhmrstuwxyz'},\n {'tag': '773', 'required': 'w', key: 'wgq'}, // Kirjav\u00E4litys should not have any component parts. However, this need to be re-thought...\n // Currently we (appently) drop fields that don't contain 773$w...\n {'tag': '774', 'required': '', 'paired': 'nruxyz', 'key': 'npqrstrxyz'},\n {'tag': '775', 'required': '', 'paired': 'ruxyz', 'key': 'abcdefhmstuxyz'},\n {'tag': '776', 'required': '', 'paired': 'ruxyz', 'key': 'abcdhmsuwxyz'},\n {'tag': '777', 'required': '', 'paired': 'ruxyz', 'key': 'abcdhmstuxyz'},\n {'tag': '780', 'required': '', 'paired': 'ruxyz', 'key': 'abcdhmstuxyz'},\n {'tag': '785', 'required': '', 'paired': 'uxyz', 'key': 'abcdhmstuxyz'},\n {'tag': '786', 'required': '', 'paired': 'abcrstuxyz', 'key': 'abcdhijmprstuxyz4'},\n {'tag': '787', 'required': '', 'paired': 'abcdhmstuxyz4'},\n {'tag': '788', 'required': '', 'paired': 'stx', 'key': 'abdestx'},\n {'tag': '800', 'required': 'a', 'paired': 't', 'key': keyX00},\n {'tag': '810', 'required': 'a', 'paired': 'bt', 'key': keyX10},\n {'tag': '811', 'required': 'a', 'paired': 't', 'key': keyX11},\n {'tag': '830', 'required': 'a', 'key': keyX30},\n {'tag': '840', 'required': 'a'},\n {'tag': '841', 'required': 'a'},\n {'tag': '842', 'required': 'a'},\n {'tag': '843', 'required': 'a'},\n {'tag': '844', 'required': 'a'},\n {'tag': '845', 'required': 'a'},\n {'tag': '850', 'required': 'a', 'key': 'a'},\n {'tag': '852', 'required': 'a'}, // HMM... we might want to reconsider this...\n {'tag': '853', 'required': 'a'},\n {'tag': '854', 'required': 'a'},\n {'tag': '855', 'required': 'a'},\n {'tag': '856', 'required': 'u', 'paired': 'u', 'key': 'opuw23'}, // 856 is built around $u...\n {'tag': '863', 'required': 'a'},\n {'tag': '864', 'required': 'a'},\n {'tag': '865', 'required': 'a'},\n {'tag': '866', 'required': 'a'},\n {'tag': '867', 'required': 'a'},\n {'tag': '868', 'required': 'a'},\n {'tag': '876', 'required': 'a'},\n {'tag': '877', 'required': 'a'},\n {'tag': '878', 'required': 'a'},\n {'tag': '880', 'required': '', 'paired': 'a', 'key': 'abcdefghijklmnopqrstuvwxyz'},\n {'tag': '881', 'required': ''},\n {'tag': '882', 'required': ''},\n {'tag': '883', 'required': ''},\n {'tag': '884', 'required': '', 'paired': 'agkq'},\n {'tag': '885', 'required': ''},\n {'tag': '886', 'required': ''},\n {'tag': '887', 'required': ''},\n {'tag': '900', 'required': ''},\n {'tag': '901', 'required': ''},\n {'tag': '910', 'required': ''},\n {'tag': '935', 'required': 'a', 'key': 'az'}, // Fono information at least\n {'tag': '940', 'required': ''},\n {'tag': '946', 'required': 'a', 'key': 'abfnp'}, // Copied from 246. However, final version might contain some elements from field 245 as well\n {'tag': '960', 'required': ''},\n {'tag': '973', 'required': 'w', 'key': 'w'}, // Viola multi-hosts\n {'tag': '995', 'required': ''},\n {'tag': 'CAT', 'required': ''},\n {'tag': 'LOW', 'required': ''},\n {'tag': 'SID', 'required': ''}\n];\n\nfunction constraintToValue(tagsConstraints, constraintName) {\n if (constraintName in tagsConstraints) {\n return tagsConstraints[constraintName];\n }\n return null; // NB! \"\" might mean \"apply to everything\" (eg. 040.key) while null means that it is not applied.\n}\n\nexport function getMergeConstraintsForTag(tag, constraintName) {\n const tagsConstraintsArray = mergeConstraints.filter(entry => tag === entry.tag);\n if (tagsConstraintsArray.length === 0) {\n debugDev(`WARNING\\tNo key found for ${tag}. Returning NULL!`);\n return null;\n }\n // NB! should we support multiple contains for a field? Eg. 505$a vs 505($tg)+\n if (tagsConstraintsArray.length > 1) {\n debugDev(`WARNING\\tMultiple values for '${constraintName}' (N=${tagsConstraintsArray.length}) found in ${tag}. Using first values.`);\n }\n return constraintToValue(tagsConstraintsArray[0], constraintName);\n}\n"],
|
|
5
|
-
"mappings": "AAAA,OAAO,uBAAuB;AAC9B,MAAM,QAAQ,kBAAkB,+DAA+D;AAE/F,MAAM,WAAW,MAAM,OAAO,KAAK;AAWnC,MAAM,SAAS;AACf,MAAM,SAAS;AACf,MAAM,SAAS;AACf,MAAM,SAAS;AAEf,MAAM,mBAAmB;AAAA,EACvB,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,KAAI;AAAA,EAC3C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,KAAK,OAAO,IAAG;AAAA;AAAA,EACxD,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,KAAK,OAAO,MAAK;AAAA,EAC1D,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,KAAK,OAAO,KAAI;AAAA,EACzD,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,KAAI;AAAA,EAC3C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,IAAI,OAAO,cAAa;AAAA;AAAA,EACnD,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,KAAI;AAAA,EAC3C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,WAAU;AAAA;AAAA,EACjD,EAAC,OAAO,OAAO,YAAY,MAAM,OAAO,0BAAyB;AAAA,EACjE,EAAC,OAAO,OAAO,YAAY,IAAI,OAAO,KAAI;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,KAAI;AAAA,EAC3C,EAAC,OAAO,OAAO,YAAY,IAAG;AAAA,EAC9B,EAAC,OAAO,OAAO,YAAY,IAAI,OAAO,GAAE;AAAA,EACxC,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,KAAK,OAAO,GAAE;AAAA;AAAA,EACvD,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,GAAE;AAAA;AAAA,EACzC,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,MAAK;AAAA,EAC5C,EAAC,OAAO,OAAO,YAAY,IAAI,OAAO,OAAO,UAAU,MAAK;AAAA,EAC5D,EAAC,OAAO,OAAO,YAAY,IAAI,OAAO,OAAO,UAAU,MAAK;AAAA;AAAA,EAC5D,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,gBAAgB,UAAU,eAAc;AAAA,EAC/E,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,KAAI;AAAA,EAC3C,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,MAAM,OAAO,KAAI;AAAA,EAC1D,EAAC,OAAO,OAAO,YAAY,IAAI,OAAO,OAAM;AAAA,EAC5C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,OAAM;AAAA,EAC7C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,MAAK;AAAA;AAAA,EAC5C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,MAAK;AAAA,EAC5C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,KAAI;AAAA,EAC3C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,KAAI;AAAA,EAC3C,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,KAAK,OAAO,MAAK;AAAA,EAC3D,EAAC,OAAO,OAAO,YAAY,IAAG;AAAA,EAC9B,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,KAAI;AAAA,EAC3C,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,OAAO,OAAO,MAAK;AAAA;AAAA,EAC7D,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,KAAI;AAAA,EAC3C,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,KAAK,OAAO,KAAI;AAAA,EACzD,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,MAAM,OAAO,MAAK;AAAA,EAC5D,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,KAAK,OAAO,QAAO;AAAA,EAC7D,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,KAAK,OAAO,QAAO;AAAA,EAC7D,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,MAAM,OAAO,OAAM;AAAA,EAC7D,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,gBAAgB,OAAO,gBAAe;AAAA,EAC/E,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,KAAK,OAAO,IAAG;AAAA,EACxD,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,KAAK,OAAO,IAAG;AAAA;AAAA,EAExD,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,KAAK,OAAO,OAAM;AAAA,EAC5D,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,MAAM,OAAO,OAAM;AAAA,EAC7D,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,KAAK,OAAO,OAAM;AAAA;AAAA,EAE5D,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,OAAM;AAAA,EAC7C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,KAAI;AAAA,EAC3C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,KAAI;AAAA,EAC3C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,gBAAe;AAAA,EACtD,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,UAAS;AAAA,EAChD,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,gBAAe;AAAA,EACtD,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,YAAY,UAAU,QAAO;AAAA,EACpE,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,QAAO;AAAA,EAC9C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,SAAQ;AAAA,EAC/C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,KAAI;AAAA,EAC3C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,WAAW,UAAU,UAAS;AAAA,EACrE,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA;AAAA;AAAA,EAE1C,EAAC,OAAO,OAAO,YAAY,IAAI,OAAO,SAAQ;AAAA,EAC9C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA;AAAA,EAE1C,EAAC,OAAO,OAAO,YAAY,IAAI,OAAO,MAAK;AAAA;AAAA;AAAA,EAE3C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,SAAQ;AAAA,EAC/C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA;AAAA,EAE1C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,KAAI;AAAA,EAC3C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,KAAI;AAAA,EAC3C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,KAAI;AAAA;AAAA,EAC3C,EAAC,OAAO,OAAO,YAAY,MAAM,OAAO,MAAK;AAAA;AAAA,EAC7C,EAAC,OAAO,OAAO,YAAY,MAAM,OAAO,MAAK;AAAA;AAAA,EAC7C,EAAC,OAAO,OAAO,YAAY,MAAM,OAAO,MAAK;AAAA;AAAA,EAC7C,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,mBAAmB,OAAO,kBAAiB;AAAA,EACpF,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,SAAS,OAAO,QAAO;AAAA;AAAA,EAChE,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,2BAA2B,OAAO,0BAAyB;AAAA;AAAA,EACpG,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,aAAa,OAAO,YAAW;AAAA;AAAA,EACxE,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,YAAY,OAAO,WAAU;AAAA,EACtE,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,QAAQ,OAAO,OAAM;AAAA,EAC9D,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,MAAM,OAAO,KAAI;AAAA,EAC1D,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,UAAU,OAAO,SAAQ;AAAA,EAClE,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,MAAM,OAAO,KAAI;AAAA,EAC1D,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,OAAO,OAAO,MAAK;AAAA,EAC5D,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,OAAO,OAAO,MAAK;AAAA,EAC5D,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,aAAa,OAAO,YAAW;AAAA,EACxE,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,aAAa,OAAO,YAAW;AAAA,EACxE,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,OAAM;AAAA,EAC7C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,KAAI;AAAA,EAC3C,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,mBAAmB,OAAO,kBAAiB;AAAA,EACpF,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,gBAAgB,OAAO,eAAc;AAAA;AAAA,EAC/E,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,cAAc,OAAO,aAAY;AAAA,EAC1E,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,YAAY,OAAO,WAAU;AAAA,EACtE,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,MAAM,OAAO,KAAI;AAAA,EAC1D,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,OAAO,OAAO,MAAK;AAAA,EAC9C,EAAC,OAAO,OAAO,YAAY,GAAE;AAAA,EAC7B,EAAC,OAAO,OAAO,YAAY,SAAS,OAAO,QAAO;AAAA,EAClD,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,QAAQ,OAAO,OAAM;AAAA,EAC/D,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,QAAQ,OAAO,OAAM;AAAA,EAC/D,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,OAAM;AAAA,EAC7C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,SAAQ;AAAA,EAC/C,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,MAAM,OAAO,KAAI;AAAA,EAC3D,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,SAAS,OAAO,QAAO;AAAA,EAChE,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,IAAI,OAAO,YAAW;AAAA,EAChE,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,MAAM,OAAO,KAAI;AAAA,EAC3D,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,MAAK;AAAA,EAC5C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,OAAM;AAAA,EAC7C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,MAAM,OAAO,KAAI;AAAA,EAC1D,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,kBAAkB,OAAO,iBAAgB;AAAA,EAClF,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,QAAQ,OAAO,OAAM;AAAA,EAC9D,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,OAAO,OAAO,MAAK;AAAA,EAC7D,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,MAAM,OAAO,KAAI;AAAA,EAC3D,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,SAAS,OAAO,QAAO;AAAA,EACjE,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,QAAQ,OAAO,OAAM;AAAA,EAC/D,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,aAAa,OAAO,YAAW;AAAA,EACzE,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,WAAW,OAAO,UAAS;AAAA,EACpE,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,SAAS,OAAO,QAAO;AAAA,EAChE,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,YAAY,OAAO,WAAU;AAAA,EACtE,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,OAAO,OAAO,MAAK;AAAA,EAC7D,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,YAAY,OAAO,WAAU;AAAA,EACtE,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,aAAa,OAAO,YAAW;AAAA,EACxE,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,sBAAsB,OAAO,qBAAoB;AAAA,EAC1F,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,UAAU,OAAO,SAAQ;AAAA,EAClE,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,OAAO,OAAO,MAAK;AAAA,EAC5D,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,MAAM,OAAO,KAAI;AAAA,EAC1D,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,sBAAsB,OAAO,qBAAoB;AAAA,EAC1F,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,SAAS,OAAO,QAAO;AAAA,EACjE,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,KAAI;AAAA,EAC3C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,KAAI;AAAA,EAC3C,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,SAAS,OAAO,QAAO;AAAA,EAChE,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,KAAI;AAAA,EAC3C,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,OAAO,OAAO,MAAK;AAAA,EAC5D,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,MAAM,OAAO,KAAI;AAAA,EAC1D,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,kBAAkB,OAAO,iBAAgB;AAAA,EAClF,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,MAAM,OAAO,KAAI;AAAA,EAC1D,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA;AAAA,EAE1C,EAAC,OAAO,OAAO,YAAY,GAAE;AAAA,EAC7B,EAAC,OAAO,OAAO,YAAY,GAAE;AAAA,EAC7B,EAAC,OAAO,OAAO,YAAY,GAAE;AAAA,EAC7B,EAAC,OAAO,OAAO,YAAY,GAAE;AAAA,EAC7B,EAAC,OAAO,OAAO,YAAY,GAAE;AAAA,EAC7B,EAAC,OAAO,OAAO,YAAY,GAAE;AAAA,EAC7B,EAAC,OAAO,OAAO,YAAY,GAAE;AAAA,EAC7B,EAAC,OAAO,OAAO,YAAY,GAAE;AAAA,EAC7B,EAAC,OAAO,OAAO,YAAY,GAAE;AAAA,EAC7B,EAAC,OAAO,OAAO,YAAY,GAAE;AAAA,EAC7B,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,SAAS,OAAO,OAAM;AAAA,EAChE,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,UAAU,OAAO,OAAM;AAAA,EACjE,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,SAAS,OAAO,OAAM;AAAA,EAChE,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,UAAU,OAAO,OAAM;AAAA;AAAA,EAEjE,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,SAAS,OAAO,aAAY;AAAA,EACtE,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,SAAS,OAAO,UAAS;AAAA,EACnE,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,cAAc,OAAO,eAAc;AAAA,EAC7E,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,WAAW,OAAO,YAAW;AAAA,EACvE,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,KAAK,OAAO,IAAG;AAAA;AAAA,EACzD,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,WAAU;AAAA,EACnD,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,WAAW,OAAO,UAAS;AAAA,EACrE,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,SAAQ;AAAA;AAAA,EAClD,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,QAAO;AAAA;AAAA,EACjD,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,OAAM;AAAA;AAAA,EAChD,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,WAAU;AAAA;AAAA,EACnD,EAAC,OAAO,OAAO,YAAY,IAAG;AAAA;AAAA,EAC9B,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,KAAK,OAAO,OAAM;AAAA;AAAA,EAC5D,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,MAAM,OAAO,OAAM;AAAA;AAAA,EAC7D,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,WAAW,OAAO,OAAM;AAAA;AAAA,EAClE,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA;AAAA,EAE1C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,OAAM;AAAA;AAAA,EAC7C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,OAAM;AAAA,EAC7C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,IAAI,OAAO,WAAU;AAAA;AAAA,EAChD,EAAC,OAAO,OAAO,YAAY,IAAI,OAAO,MAAK;AAAA,EAC3C,EAAC,OAAO,OAAO,YAAY,IAAI,OAAO,QAAO;AAAA;AAAA,EAC7C,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,KAAI;AAAA;AAAA,EAE3C,EAAC,OAAO,OAAO,YAAY,MAAM,KAAK,OAAM;AAAA,EAC5C,EAAC,OAAO,OAAO,YAAY,KAAK,KAAK,aAAY;AAAA,EACjD,EAAC,OAAO,OAAO,YAAY,KAAK,KAAK,iBAAgB;AAAA,EACrD,EAAC,OAAO,OAAO,YAAY,KAAK,KAAK,iBAAgB;AAAA,EACrD,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,SAAS,KAAK,iBAAgB;AAAA,EACxE,EAAC,OAAO,OAAO,YAAY,KAAK,KAAK,iBAAgB;AAAA,EACrD,EAAC,OAAO,OAAO,YAAY,KAAK,KAAK,MAAK;AAAA;AAAA;AAAA,EAE1C,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,UAAU,OAAO,aAAY;AAAA,EACtE,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,SAAS,OAAO,iBAAgB;AAAA,EACzE,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,SAAS,OAAO,eAAc;AAAA,EACvE,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,SAAS,OAAO,eAAc;AAAA,EACvE,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,SAAS,OAAO,eAAc;AAAA,EACvE,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,QAAQ,OAAO,eAAc;AAAA,EACtE,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,cAAc,OAAO,oBAAmB;AAAA,EACjF,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,gBAAe;AAAA,EACxD,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,OAAO,OAAO,UAAS;AAAA,EAChE,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,KAAK,OAAO,OAAM;AAAA,EAC5D,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,MAAM,OAAO,OAAM;AAAA,EAC7D,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,KAAK,OAAO,OAAM;AAAA,EAC5D,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,OAAM;AAAA,EAC7C,EAAC,OAAO,OAAO,YAAY,IAAG;AAAA,EAC9B,EAAC,OAAO,OAAO,YAAY,IAAG;AAAA,EAC9B,EAAC,OAAO,OAAO,YAAY,IAAG;AAAA,EAC9B,EAAC,OAAO,OAAO,YAAY,IAAG;AAAA,EAC9B,EAAC,OAAO,OAAO,YAAY,IAAG;AAAA,EAC9B,EAAC,OAAO,OAAO,YAAY,IAAG;AAAA,EAC9B,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,IAAG;AAAA;AAAA,EAC9B,EAAC,OAAO,OAAO,YAAY,IAAG;AAAA,EAC9B,EAAC,OAAO,OAAO,YAAY,IAAG;AAAA,EAC9B,EAAC,OAAO,OAAO,YAAY,IAAG;AAAA,EAC9B,EAAC,OAAO,OAAO,YAAY,KAAK,UAAU,KAAK,OAAO,SAAQ;AAAA;AAAA,EAC9D,EAAC,OAAO,OAAO,YAAY,IAAG;AAAA,EAC9B,EAAC,OAAO,OAAO,YAAY,IAAG;AAAA,EAC9B,EAAC,OAAO,OAAO,YAAY,IAAG;AAAA,EAC9B,EAAC,OAAO,OAAO,YAAY,IAAG;AAAA,EAC9B,EAAC,OAAO,OAAO,YAAY,IAAG;AAAA,EAC9B,EAAC,OAAO,OAAO,YAAY,IAAG;AAAA,EAC9B,EAAC,OAAO,OAAO,YAAY,IAAG;AAAA,EAC9B,EAAC,OAAO,OAAO,YAAY,IAAG;AAAA,EAC9B,EAAC,OAAO,OAAO,YAAY,IAAG;AAAA,EAC9B,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,KAAK,OAAO,6BAA4B;AAAA,EACjF,EAAC,OAAO,OAAO,YAAY,GAAE;AAAA,EAC7B,EAAC,OAAO,OAAO,YAAY,GAAE;AAAA,EAC7B,EAAC,OAAO,OAAO,YAAY,GAAE;AAAA,EAC7B,EAAC,OAAO,OAAO,YAAY,IAAI,UAAU,OAAM;AAAA,EAC/C,EAAC,OAAO,OAAO,YAAY,GAAE;AAAA,EAC7B,EAAC,OAAO,OAAO,YAAY,GAAE;AAAA,EAC7B,EAAC,OAAO,OAAO,YAAY,GAAE;AAAA,EAC7B,EAAC,OAAO,OAAO,YAAY,GAAE;AAAA,EAC7B,EAAC,OAAO,OAAO,YAAY,GAAE;AAAA,EAC7B,EAAC,OAAO,OAAO,YAAY,GAAE;AAAA,EAC7B,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,KAAI;AAAA;AAAA,EAC3C,EAAC,OAAO,OAAO,YAAY,GAAE;AAAA,EAC7B,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,QAAO;AAAA;AAAA,EAC9C,EAAC,OAAO,OAAO,YAAY,GAAE;AAAA,EAC7B,EAAC,OAAO,OAAO,YAAY,KAAK,OAAO,IAAG;AAAA;AAAA,EAC1C,EAAC,OAAO,OAAO,YAAY,GAAE;AAAA,EAC7B,EAAC,OAAO,OAAO,YAAY,GAAE;AAAA,EAC7B,EAAC,OAAO,OAAO,YAAY,GAAE;AAAA,EAC7B,EAAC,OAAO,OAAO,YAAY,GAAE;AAC/B;AAEA,SAAS,kBAAkB,iBAAiB,gBAAgB;AAC1D,MAAI,kBAAkB,iBAAiB;AACrC,WAAO,gBAAgB,cAAc;AAAA,EACvC;AACA,SAAO;AACT;AAEO,gBAAS,0BAA0B,KAAK,gBAAgB;AAC7D,QAAM,uBAAuB,iBAAiB,OAAO,WAAS,QAAQ,MAAM,GAAG;AAC/E,MAAI,qBAAqB,WAAW,GAAG;AACrC,aAAS,4BAA6B,GAAG,mBAAmB;AAC5D,WAAO;AAAA,EACT;AAEA,MAAI,qBAAqB,SAAS,GAAG;AACnC,aAAS,gCAAiC,cAAc,QAAQ,qBAAqB,MAAM,cAAc,GAAG,uBAAuB;AAAA,EACrI;AACA,SAAO,kBAAkB,qBAAqB,CAAC,GAAG,cAAc;AAClE;",
|
|
6
|
-
"names": []
|
|
4
|
+
"sourcesContent": ["import createDebugLogger from 'debug';\nconst debug = createDebugLogger('@natlibfi/melinda-marc-record-merge-reducers:mergeConstraints');\n//const debugData = debug.extend('data');\nconst debugDev = debug.extend('dev');\n\n// \"required\": both fields bust have the subfield and the value must be same.\n// \"paired\": subfield bust either exists (with value match) or not exist in both fields (negative XOR). Sort of an optional version of 'required'\n// \"key\": one or both fields lack the subfield OR both fields have it and theor values match.\n// There are typically NR subfields but the system should support multival repeatable subfields. However, (R) support is considered experimental.\n// NB: key+paired with identical values is an attempt to prevent copy for (ET) fields, and to force separate fields on (T) fields.\n// NB! If base has eg. no 264, two+ 264 fields can be copied from the source.\n\n// NB! not all X00 fields have, say, $x subfield. However, we can still share them...\n// $h is non-1XX?, $i is 7XX only, $w is 8XX only...\nconst keyX00 = 'abcjklnoqrstuwx'; // Shared: $abcdefg...\nconst keyX10 = 'abcdfghklnoprstuwx';\nconst keyX11 = 'acdefghklnpqstuwx';\nconst keyX30 = 'adfghklmnoprstvwxyz';\nconst pairedTitleSubfields = 'iklmnoprst'\n\nconst mergeConstraints = [\n {'tag': '010', 'required': 'a', 'key': 'a'},\n {'tag': '013', 'required': 'a', 'key': 'a'}, // We have 2 instances in Melinda...\n {'tag': '015', 'required': 'a', 'key': 'a'},\n {'tag': '016', 'required': 'a', 'key': 'a2'},\n {'tag': '017', 'required': 'a', 'key': 'a'},\n {'tag': '018', 'required': 'a', 'key': 'a'},\n {'tag': '020', 'required': '', 'paired': 'a', 'key': 'az'}, // NB! $a foo $z lorum and $a foo $z ipsum would not merge! Due to common denominator and f020$z onlies this is the best we can done. This could be handled if 020 would have multiple merge constrains: one for f020$a, and one for f020$z...\n {'tag': '022', 'required': '', 'paired': 'a', 'key': 'alz'},\n {'tag': '024', 'required': '', 'paired': 'a', 'key': 'ad'},\n {'tag': '025', 'required': 'a', 'key': 'a'},\n {'tag': '026', 'required': 'a', 'key': 'a'},\n {'tag': '027', 'required': 'a', 'key': 'a'}, // on tuolla pari $z:\u00E4\u00E4\n {'tag': '028', 'required': 'a', 'key': 'ab'},\n {'tag': '030', 'required': 'a', 'key': 'a'},\n {'tag': '031', 'required': '', 'key': 'abcegmnopr2'}, // mites t\u00E4mm\u00F6isen k\u00E4yt\u00E4nn\u00F6ss\u00E4 avaimettoman klaarais? TODO: tests\n {'tag': '032', 'required': 'a', 'key': 'ab'},\n {'tag': '033', 'required': 'a', 'key': 'abcp0123'}, // 0,1% are without $a. Ignore them for now.\n {'tag': '034', 'required': 'ab', 'key': 'abcdefghjkmnprstxyz0123'},\n {'tag': '035', 'required': '', 'key': 'az'},\n {'tag': '036', 'required': 'a', 'key': 'a'},\n {'tag': '037', 'required': 'b', 'key': 'ab'},\n {'tag': '039', 'required': 'a'},\n {'tag': '040', 'required': '', 'key': ''},\n {'tag': '041', 'required': '', 'paired': '2', 'key': 'ad'}, // Don't put $2 in 'key'! hasCommonNominator() would get into trouble with it...\n {'tag': '042', 'required': '', 'key': ''}, // Contents (supposedly $a subfields) can be anything, and still merge... (042 $a foo + 042 $b bar is perfectly mergeable)\n {'tag': '043', 'required': 'a', 'key': 'abc'},\n {'tag': '044', 'required': '', 'key': 'abc', 'paired': 'abc'},\n {'tag': '045', 'required': '', 'key': 'abc', 'paired': 'abc'}, // (ET) // 045 is problematic either-$a or $b or $c...\n {'tag': '046', 'required': 'a', 'key': 'abcdejklmnop', 'paired': 'abcdejklmnop'},\n {'tag': '047', 'required': 'a', 'key': 'a2'},\n {'tag': '048', 'required': '', 'paired': 'ab', 'key': 'ba'},\n {'tag': '049', 'required': '', 'key': 'abcd'},\n {'tag': '050', 'required': 'a', 'key': 'ab13'},\n {'tag': '051', 'required': 'a', 'key': 'abc'}, // 2021-08-27: only one field in the whole Melinda\n {'tag': '052', 'required': 'a', 'key': 'abd'},\n {'tag': '055', 'required': 'a', 'key': 'ab'},\n {'tag': '060', 'required': 'a', 'key': 'ab'},\n {'tag': '061', 'required': 'a', 'paired': 'b', 'key': 'abc'},\n {'tag': '066', 'required': 'c'},\n {'tag': '070', 'required': 'a', 'key': 'ab'},\n {'tag': '071', 'required': 'a', 'paired': 'abc', 'key': 'abc'}, // N=3\n {'tag': '072', 'required': 'a', 'key': 'ax'},\n {'tag': '074', 'required': '', 'paired': 'a', 'key': 'az'},\n {'tag': '080', 'required': 'a', 'paired': 'bx', 'key': 'abx'},\n {'tag': '082', 'required': 'a', 'paired': 'b', 'key': 'abmq2'},\n {'tag': '083', 'required': 'a', 'paired': 'b', 'key': 'abmqy'},\n {'tag': '084', 'required': 'a', 'paired': 'b2', 'key': 'abq2'},\n {'tag': '085', 'required': '', 'paired': 'abcfrstuvwyz', 'key': 'abcfrstuvwxyz'},\n {'tag': '086', 'required': '', 'paired': 'a', 'key': 'a'},\n {'tag': '088', 'required': '', 'paired': 'a', 'key': 'a'},\n // NB! 100, 110 and 111 may have title parts that are handled elsewhere\n {'tag': '100', 'required': 'a', 'paired': `b${pairedTitleSubfields}`, 'key': keyX00},\n {'tag': '110', 'required': 'a', 'paired': `b${pairedTitleSubfields}`, 'key': keyX10},\n {'tag': '111', 'required': 'a', 'paired': pairedTitleSubfields, 'key': keyX11},\n // NB! 130 has no name part, key is used for title part\n {'tag': '130', 'required': 'a', paired: pairedTitleSubfields, 'key': keyX30},\n {'tag': '210', 'required': 'a', 'key': 'ab'},\n {'tag': '222', 'required': 'a', 'key': 'ab'},\n {'tag': '240', 'required': 'a', 'key': 'adfghklmnoprs'},\n {'tag': '242', 'required': 'a', 'key': 'abchnpy'},\n {'tag': '243', 'required': 'a', 'key': 'adfghklmnoprs'},\n {'tag': '245', 'required': 'a', 'key': 'abcghnps', 'paired': 'abnps'},\n {'tag': '246', 'required': 'a', 'key': 'abfnp'},\n {'tag': '247', 'required': 'a', 'key': 'abfnpx'},\n {'tag': '250', 'required': 'a', 'key': 'ab'},\n {'tag': '251', 'required': 'a', 'key': 'a'},\n {'tag': '254', 'required': 'a', 'key': 'a'},\n {'tag': '255', 'required': 'a', 'key': 'abcdefg', 'paired': 'abcdefg'},\n {'tag': '256', 'required': 'a', 'key': 'a'},\n {'tag': '257', 'required': 'a', 'key': 'a'},\n {'tag': '258', 'required': 'a', 'key': 'a'}, // Melinda: N=1\n //{'tag': '260', 'required': '', 'paired': 'abcefg', 'key': 'abcefg'},\n {'tag': '260', 'required': '', 'key': 'abcefg'},\n {'tag': '263', 'required': 'a', 'key': 'a'},\n //{'tag': '264', 'required': '', 'paired': 'abc', 'key': 'abc'}, // NB \"S.l.\" normalizations?\" not implemented\n {'tag': '264', 'required': '', 'key': 'abc'}, // NB \"S.l.\" normalizations?\" not implemented\n // SKIP TAG 270 ON PURPOSE! Melinda's N=43.\n {'tag': '300', 'required': '', 'key': 'abcefg'},\n {'tag': '306', 'required': 'a', 'key': 'a'},\n // SKIP TAG 307 ON PURPOSE! N=0\n {'tag': '310', 'required': 'a', 'key': 'ab'},\n {'tag': '321', 'required': 'a', 'key': 'ab'},\n {'tag': '335', 'required': 'a', 'key': 'ab'}, // Melinda N=1 (a test field). M might increase?\n {'tag': '336', 'required': 'b2', 'key': 'ab2'}, // MET-88: don't merge different $a subfields\n {'tag': '337', 'required': 'b2', 'key': 'ab2'}, // MET-88: don't merge different $a subfields\n {'tag': '338', 'required': 'b2', 'key': 'ab2'}, // / MET-88: don't merge different $a subfields\n {'tag': '340', 'required': '', 'paired': 'abcdefghijkmnop', 'key': 'abcdefghijkmnop'},\n {'tag': '341', 'required': '', 'paired': 'a2', 'key': 'abcde2'}, // NEW! Starting to appear!\n {'tag': '342', 'required': '', 'paired': 'abcdefghijklmnopqrstuvw', 'key': 'abcdefghijklmnopqrstuvw'}, // SKIP 342. NOT SEEN!\n {'tag': '343', 'required': '', 'paired': 'abcdefghi', 'key': 'abcdefghi'}, // SKIP 343.\n {'tag': '344', 'required': '', 'paired': 'abcdefgh', 'key': 'abcdefgh'},\n {'tag': '345', 'required': '', 'paired': 'abcd', 'key': 'abcd'},\n {'tag': '346', 'required': '', 'paired': 'ab', 'key': 'ab'},\n {'tag': '347', 'required': '', 'paired': 'abcdef', 'key': 'abcdef'},\n {'tag': '348', 'required': '', 'paired': 'ab', 'key': 'ab'},\n {'tag': '348', 'required': '', 'paired': 'abc', 'key': 'abc'},\n {'tag': '351', 'required': '', 'paired': 'abc', 'key': 'abc'},\n {'tag': '352', 'required': '', 'paired': 'abcdefgiq', 'key': 'abcdefgiq'},\n {'tag': '355', 'required': '', 'paired': 'abcdefghj', 'key': 'abcdefghj'},\n {'tag': '357', 'required': 'a', 'key': 'abcg'},\n {'tag': '362', 'required': 'a', 'key': 'az'},\n {'tag': '363', 'required': '', 'paired': 'abcdefghijklmuv', 'key': 'abcdefghijklmuv'},\n {'tag': '365', 'required': 'b', 'paired': 'abcdefghijkm', 'key': 'abcdefghijkm'}, // N=0\n {'tag': '366', 'required': '', 'paired': 'abcdefgjkm', 'key': 'abcdefgjkm'},\n {'tag': '370', 'required': '', 'paired': 'cfgistuv', 'key': 'cfgistuv'},\n {'tag': '377', 'required': '', 'paired': 'al', 'key': 'al'},\n {'tag': '380', 'required': 'a', 'key': 'a'},\n {'tag': '381', 'required': 'auv', 'key': 'auv'},\n {'tag': '382', 'required': ''},\n {'tag': '383', 'required': 'abcde', 'key': 'abcde'},\n {'tag': '384', 'required': 'a', 'key': 'a'},\n {'tag': '385', 'required': 'a', 'paired': 'abmn', 'key': 'abmn'},\n {'tag': '386', 'required': 'a', 'paired': 'abmn', 'key': 'abmn'},\n {'tag': '388', 'required': 'a', 'key': 'a'},\n {'tag': '490', 'required': '', 'key': 'axvl'},\n {'tag': '500', 'required': 'a', 'key': 'a'},\n {'tag': '501', 'required': 'a', 'key': 'a'},\n {'tag': '502', 'required': 'a', 'key': 'abcdgo'},\n {'tag': '504', 'required': 'a', 'paired': 'ab', 'key': 'ab'},\n {'tag': '505', 'required': '', 'paired': 'agrtu', 'key': 'agrtu'},\n {'tag': '506', 'required': 'a', 'paired': '', 'key': 'abcdefgqu'},\n {'tag': '507', 'required': 'a', 'paired': 'ab', 'key': 'ab'},\n {'tag': '508', 'required': 'a', 'key': 'a'},\n {'tag': '509', 'required': 'a', 'key': 'acd'},\n {'tag': '510', 'required': 'a', 'key': 'abcx'},\n {'tag': '511', 'required': 'a', 'key': 'a'},\n {'tag': '513', 'required': '', 'paired': 'ab', 'key': 'ab'},\n {'tag': '514', 'required': '', 'paired': 'abcdefghijkmuz', 'key': 'abcdefghijkmuz'},\n {'tag': '515', 'required': 'a', 'key': 'a'},\n {'tag': '518', 'required': '', 'paired': 'adop', 'key': 'adop'},\n {'tag': '520', 'required': 'a', 'paired': 'abc', 'key': 'abc'},\n {'tag': '521', 'required': 'a', 'paired': 'ab', 'key': 'ab'},\n {'tag': '522', 'required': 'a', 'key': 'a'},\n {'tag': '524', 'required': 'a', 'key': 'a'},\n {'tag': '525', 'required': 'a', 'key': 'a'},\n {'tag': '526', 'required': 'a', 'paired': 'abcdi', 'key': 'abcdi'},\n {'tag': '530', 'required': 'a', 'paired': 'abcd', 'key': 'abcd'},\n {'tag': '532', 'required': 'a', 'key': 'a'},\n {'tag': '533', 'required': 'a', 'paired': 'abcdefmn7', 'key': 'abcdefmn7'},\n {'tag': '534', 'required': '', 'paired': 'abcempt', 'key': 'abcempt'},\n {'tag': '535', 'required': '', 'paired': 'abcdg', 'key': 'abcdg'},\n {'tag': '536', 'required': '', 'paired': 'abcdefgh', 'key': 'abcdefgh'},\n {'tag': '538', 'required': 'a', 'paired': 'aiu', 'key': 'aiu'},\n {'tag': '540', 'required': '', 'paired': 'abcdfgqu', 'key': 'abcdfgqu'},\n {'tag': '541', 'required': '', 'paired': 'abcdefhno', 'key': 'abcdefhno'},\n {'tag': '542', 'required': '', 'paired': 'abcdfghijklmopqrsu', 'key': 'abcdfghijklmopqrsu'},\n {'tag': '544', 'required': '', 'paired': 'abcden', 'key': 'abcden'},\n {'tag': '545', 'required': '', 'paired': 'abu', 'key': 'abu'},\n {'tag': '546', 'required': '', 'paired': 'ab', 'key': 'ab'},\n {'tag': '547', 'required': 'a', 'key': 'a'},\n {'tag': '550', 'required': 'a', 'key': 'a'},\n {'tag': '552', 'required': '', 'paired': 'abcdefghijklmnopuz', 'key': 'abcdefghijklmnopuz'},\n {'tag': '555', 'required': 'a', 'paired': 'abcdu', 'key': 'abcdu'},\n {'tag': '556', 'required': 'a', 'key': 'az'},\n {'tag': '561', 'required': 'a', 'key': 'au'},\n {'tag': '562', 'required': '', 'paired': 'abcde', 'key': 'abcde'},\n {'tag': '563', 'required': 'a', 'key': 'au'},\n {'tag': '565', 'required': '', 'paired': 'abc', 'key': 'abc'},\n {'tag': '567', 'required': '', 'paired': 'ab', 'key': 'ab'},\n {'tag': '580', 'required': 'a', 'key': 'a'},\n {'tag': '581', 'required': 'a', 'key': 'a'},\n {'tag': '583', 'required': '', 'paired': 'abcdefhijklnou', 'key': 'abcdefhijklnou'},\n {'tag': '584', 'required': '', 'paired': 'ab', 'key': 'ab'},\n {'tag': '585', 'required': 'a', 'key': 'a'},\n {'tag': '586', 'required': 'a', 'key': 'a'},\n {'tag': '588', 'required': 'a', 'key': 'a'},\n // NB! Currently we never merge 59X fields (see mergableTags.js). Doublish removals such as MELKEHITYS-3147 are handled by postprocessor.\n {'tag': '590', 'required': ''},\n {'tag': '591', 'required': ''},\n {'tag': '592', 'required': ''},\n {'tag': '593', 'required': ''},\n {'tag': '594', 'required': ''},\n {'tag': '595', 'required': ''},\n {'tag': '596', 'required': ''},\n {'tag': '597', 'required': ''},\n {'tag': '598', 'required': ''},\n {'tag': '599', 'required': ''},\n {'tag': '600', 'required': 'a', 'paired': `b${pairedTitleSubfields}vxyz`, 'key': keyX00},\n {'tag': '610', 'required': 'a', 'paired': `b${pairedTitleSubfields}vxyz`, 'key': keyX10},\n {'tag': '611', 'required': 'a', 'paired': `${pairedTitleSubfields}vxyz`, 'key': keyX11},\n {'tag': '630', 'required': 'a', 'paired': `${pairedTitleSubfields}vxyz`, 'key': keyX30},\n // NB! 700, 710 and 711 may have title parts that are handled elsewhere\n {'tag': '647', 'required': 'a', 'paired': 'avxyz', 'key': 'acdgvxyz02'},\n {'tag': '648', 'required': 'a', 'paired': 'avxyz', 'key': 'avxyz02'},\n {'tag': '650', 'required': 'a', 'paired': 'abcdegvxyz', 'key': 'abcdegvxyz20'},\n {'tag': '651', 'required': 'a', 'paired': 'aegvxyz', 'key': 'aegvxyz20'},\n {'tag': '653', 'required': 'a', 'paired': 'a', 'key': 'a'}, // this is interesting as a can be repeated\n {'tag': '654', 'required': '', 'paired': 'abcevxyz'},\n {'tag': '655', 'required': 'a', 'paired': 'abcvxyz', 'key': 'avxyz20'},\n {'tag': '656', 'required': 'a', 'paired': 'akvxyz'}, // N=0\n {'tag': '657', 'required': 'a', 'paired': 'avxyz'}, // N=0\n {'tag': '658', 'required': 'a', 'paired': 'abcd'}, // N=0\n {'tag': '662', 'required': '', 'paired': 'abcdefgh'}, // N=0\n {'tag': '688', 'required': 'a'}, // N=0\n {'tag': '700', 'required': 'a', 'paired': `b${pairedTitleSubfields}x`, 'key': keyX00}, // h/i/m/o/r/s/x are missing from 100, NB! 's' is repeatable, but we are not merging them here!\n {'tag': '710', 'required': 'a', 'paired': `b${pairedTitleSubfields}x`, 'key': keyX10}, // h/j/m/o/r/s/x are missing from 110\n {'tag': '711', 'required': 'a', 'paired': `cdef${pairedTitleSubfields}x`, 'key': keyX11}, // h/i/s/x are missing from 711\n {'tag': '720', 'required': 'a', 'key': 'a'},\n // NB! 730 has no name part, key is used for title part\n {'tag': '730', 'required': 'a', 'paired': `df${pairedTitleSubfields}x`, 'key': keyX30}, // NB: 130->730 magic subfields might not agree...\n {'tag': '740', 'required': 'a', 'key': 'ahnp'},\n {'tag': '751', 'required': 'a', 'key': 'a'}, // N=11, kaikissa pelkk\u00E4 $a\n {'tag': '752', 'required': '', 'key': 'abcdefgh'}, // N=12234\n {'tag': '753', 'required': '', 'key': 'abc'},\n {'tag': '754', 'required': '', 'key': 'acdxz'}, // N=3\n {'tag': '758', 'required': 'a', 'key': 'ai'}, // N=1\n\n {'tag': '760', 'required': 'tw', key: 'twxy'},\n {'tag': '762', 'required': 't', key: 'abcdhmstxy'},\n {'tag': '765', 'required': 't', key: 'abcdhmrstuwxyz'},\n {'tag': '767', 'required': 't', key: 'abcdhmrstuwxyz'},\n {'tag': '770', 'required': 't', 'paired': 'ruxyz', key: 'abcdhmrstuwxyz'},\n {'tag': '772', 'required': 't', key: 'abcdhmrstuwxyz'},\n {'tag': '773', 'required': 'w', key: 'wgq'}, // Kirjav\u00E4litys should not have any component parts. However, this need to be re-thought...\n // Currently we (appently) drop fields that don't contain 773$w...\n {'tag': '774', 'required': '', 'paired': 'nruxyz', 'key': 'npqrstrxyz'},\n {'tag': '775', 'required': '', 'paired': 'ruxyz', 'key': 'abcdefhmstuxyz'},\n {'tag': '776', 'required': '', 'paired': 'ruxyz', 'key': 'abcdhmsuwxyz'},\n {'tag': '777', 'required': '', 'paired': 'ruxyz', 'key': 'abcdhmstuxyz'},\n {'tag': '780', 'required': '', 'paired': 'ruxyz', 'key': 'abcdhmstuxyz'},\n {'tag': '785', 'required': '', 'paired': 'uxyz', 'key': 'abcdhmstuxyz'},\n {'tag': '786', 'required': '', 'paired': 'abcrstuxyz', 'key': 'abcdhijmprstuxyz4'},\n {'tag': '787', 'required': '', 'paired': 'abcdhmstuxyz4'},\n {'tag': '788', 'required': '', 'paired': 'stx', 'key': 'abdestx'},\n {'tag': '800', 'required': 'a', 'paired': 'bt', 'key': keyX00},\n {'tag': '810', 'required': 'a', 'paired': 'bt', 'key': keyX10},\n {'tag': '811', 'required': 'a', 'paired': 't', 'key': keyX11},\n {'tag': '830', 'required': 'a', 'key': keyX30},\n {'tag': '840', 'required': 'a'},\n {'tag': '841', 'required': 'a'},\n {'tag': '842', 'required': 'a'},\n {'tag': '843', 'required': 'a'},\n {'tag': '844', 'required': 'a'},\n {'tag': '845', 'required': 'a'},\n {'tag': '850', 'required': 'a', 'key': 'a'},\n {'tag': '852', 'required': 'a'}, // HMM... we might want to reconsider this...\n {'tag': '853', 'required': 'a'},\n {'tag': '854', 'required': 'a'},\n {'tag': '855', 'required': 'a'},\n {'tag': '856', 'required': 'u', 'paired': 'u', 'key': 'opuw23'}, // 856 is built around $u...\n {'tag': '863', 'required': 'a'},\n {'tag': '864', 'required': 'a'},\n {'tag': '865', 'required': 'a'},\n {'tag': '866', 'required': 'a'},\n {'tag': '867', 'required': 'a'},\n {'tag': '868', 'required': 'a'},\n {'tag': '876', 'required': 'a'},\n {'tag': '877', 'required': 'a'},\n {'tag': '878', 'required': 'a'},\n {'tag': '880', 'required': '', 'paired': 'a', 'key': 'abcdefghijklmnopqrstuvwxyz'},\n {'tag': '881', 'required': ''},\n {'tag': '882', 'required': ''},\n {'tag': '883', 'required': ''},\n {'tag': '884', 'required': '', 'paired': 'agkq'},\n {'tag': '885', 'required': ''},\n {'tag': '886', 'required': ''},\n {'tag': '887', 'required': ''},\n {'tag': '900', 'required': ''},\n {'tag': '901', 'required': ''},\n {'tag': '910', 'required': ''},\n {'tag': '935', 'required': 'a', 'key': 'az'}, // Fono information at least\n {'tag': '940', 'required': ''},\n {'tag': '946', 'required': 'a', 'key': 'abfnp'}, // Copied from 246. However, final version might contain some elements from field 245 as well\n {'tag': '960', 'required': ''},\n {'tag': '973', 'required': 'w', 'key': 'w'}, // Viola multi-hosts\n {'tag': '995', 'required': ''},\n {'tag': 'CAT', 'required': ''},\n {'tag': 'LOW', 'required': ''},\n {'tag': 'SID', 'required': ''}\n];\n\n\nexport function getMergeConstraintsForTag(tag, constraintName = undefined) {\n const tagsConstraintsArray = mergeConstraints.filter(entry => tag === entry.tag);\n if (tagsConstraintsArray.length === 0) {\n debugDev(`WARNING\\tNo key found for ${tag}!`);\n }\n if (!constraintName) {\n return tagsConstraintsArray;\n }\n // NB! should we support multiple contains for a field? Eg. 505$a vs 505($tg)+\n if (tagsConstraintsArray.length > 1) {\n debugDev(`WARNING\\tMultiple values for '${constraintName}' (N=${tagsConstraintsArray.length}) found in ${tag}. Using first values.`);\n }\n //return constraintToValue(tagsConstraintsArray[0], constraintName);\n return tagsConstraintsArray.map(c => constraintToValue(c, constraintName));\n\n function constraintToValue(tagsConstraints, constraintName) {\n if (constraintName in tagsConstraints) {\n return tagsConstraints[constraintName];\n }\n return null; // NB! \"\" might mean \"apply to everything\" (eg. 040.key) while null means that it is not applied.\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["constraintName"]
|
|
7
7
|
}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import createDebugLogger from "debug";
|
|
2
2
|
import { fieldToString, fieldsToString, fieldsAreIdentical, nvdebug, hasCopyright, removeCopyright, subfieldToString } from "../utils.js";
|
|
3
3
|
import { fieldGetOccurrenceNumberPairs } from "../subfield6Utils.js";
|
|
4
|
-
import { cloneAndNormalizeFieldForComparison, cloneAndRemovePunctuation
|
|
4
|
+
import { cloneAndNormalizeFieldForComparison, cloneAndRemovePunctuation } from "../normalizeFieldForComparison.js";
|
|
5
5
|
import { mergeOrAddSubfield } from "./mergeOrAddSubfield.js";
|
|
6
6
|
import { mergeIndicators } from "./mergeIndicator.js";
|
|
7
7
|
import { mergableTag } from "./mergableTag.js";
|
|
8
8
|
import { getCounterpart } from "./counterpartField.js";
|
|
9
|
+
import { isEnnakkotietoSubfield } from "../prepublicationUtils.js";
|
|
9
10
|
const debug = createDebugLogger("@natlibfi/melinda-marc-record-merge-reducers:mergeField");
|
|
10
11
|
const debugDev = debug.extend("dev");
|
|
11
12
|
function removeEnnakkotieto(field) {
|
|
12
|
-
const tmp = field.subfields.filter((subfield) => !
|
|
13
|
+
const tmp = field.subfields.filter((subfield) => !isEnnakkotietoSubfield(subfield));
|
|
13
14
|
if (tmp.length > 0) {
|
|
14
15
|
field.subfields = tmp;
|
|
15
16
|
}
|
|
@@ -29,7 +30,7 @@ function mergeField2(baseRecord, baseField, sourceField, config, candFieldPairs8
|
|
|
29
30
|
if (fieldToString(baseField) === fieldToString(sourceField)) {
|
|
30
31
|
return baseRecord;
|
|
31
32
|
}
|
|
32
|
-
if (baseField.subfields?.find((sf) =>
|
|
33
|
+
if (baseField.subfields?.find((sf) => isEnnakkotietoSubfield(sf)) && !sourceField.subfields?.find((sf) => isEnnakkotietoSubfield(sf))) {
|
|
33
34
|
removeEnnakkotieto(baseField);
|
|
34
35
|
baseField.merged = 1;
|
|
35
36
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/merge-fields/mergeField.js"],
|
|
4
|
-
"sourcesContent": ["//import {MarcRecord} from '@natlibfi/marc-record';\nimport createDebugLogger from 'debug';\nimport {fieldToString, fieldsToString, fieldsAreIdentical, nvdebug, hasCopyright, removeCopyright, subfieldToString} from '../utils.js';\nimport {fieldGetOccurrenceNumberPairs} from '../subfield6Utils.js';\nimport {cloneAndNormalizeFieldForComparison, cloneAndRemovePunctuation
|
|
5
|
-
"mappings": "AACA,OAAO,uBAAuB;AAC9B,SAAQ,eAAe,gBAAgB,oBAAoB,SAAS,cAAc,iBAAiB,wBAAuB;AAC1H,SAAQ,qCAAoC;AAC5C,SAAQ,qCAAqC,
|
|
4
|
+
"sourcesContent": ["//import {MarcRecord} from '@natlibfi/marc-record';\nimport createDebugLogger from 'debug';\nimport {fieldToString, fieldsToString, fieldsAreIdentical, nvdebug, hasCopyright, removeCopyright, subfieldToString} from '../utils.js';\nimport {fieldGetOccurrenceNumberPairs} from '../subfield6Utils.js';\nimport {cloneAndNormalizeFieldForComparison, cloneAndRemovePunctuation} from '../normalizeFieldForComparison.js';\nimport {mergeOrAddSubfield} from './mergeOrAddSubfield.js';\nimport {mergeIndicators} from './mergeIndicator.js';\nimport {mergableTag} from './mergableTag.js';\nimport {getCounterpart} from './counterpartField.js';\nimport {isEnnakkotietoSubfield} from '../prepublicationUtils.js';\n//import {default as normalizeEncoding} from '@natlibfi/marc-record-validators-melinda/dist/normalize-utf8-diacritics';\n//import {postprocessRecords} from './mergeOrAddPostprocess.js';\n//import {preprocessBeforeAdd} from './processFilter.js';\n\n//const defaultConfig = JSON.parse(fs.readFileSync(path.join(__dirname, '..', '..', 'src', 'reducers', 'config.json'), 'utf8'));\n\n// Specs: https://workgroups.helsinki.fi/x/K1ohCw (though we occasionally differ from them)...\n\nconst debug = createDebugLogger('@natlibfi/melinda-marc-record-merge-reducers:mergeField');\n//const debugData = debug.extend('data');\nconst debugDev = debug.extend('dev');\n\n// NB! Can we do this via config.json?\nfunction removeEnnakkotieto(field) {\n const tmp = field.subfields.filter(subfield => !isEnnakkotietoSubfield(subfield));\n // remove only iff some other subfield remains\n if (tmp.length > 0) {\n field.subfields = tmp;\n }\n}\n\n\nfunction copyrightYearHack(baseRecord, baseField, sourceField) {\n if (baseField.tag !== '264' || sourceField.tag !== '260') {\n return;\n }\n const relevantSubfields = sourceField.subfields.filter(sf => sf.code === 'c' && hasCopyright(sf.value));\n\n relevantSubfields.forEach(sf => {\n // Add new:\n const value = sf.value.replace(/\\.$/u, '');\n baseRecord.insertField({'tag': '264', 'ind1': ' ', 'ind2': '4', 'subfields': [{'code': 'c', value}]});\n // Modify original subfield:\n sf.value = removeCopyright(sf.value);\n });\n}\n\nfunction mergeField2(baseRecord, baseField, sourceField, config, candFieldPairs880 = []) {\n //// Identical fields\n // No need to check every subfield separately.\n // Also no need to postprocess the resulting field.\n if (fieldToString(baseField) === fieldToString(sourceField)) {\n return baseRecord;\n }\n\n // If a base ennakkotieto is merged with real data, remove ennakkotieto subfield:\n // (If our prepub normalizations are ok, this should not be needed.\n // However, it's simple and works well enough, so let's keep it here.)\n if (baseField.subfields?.find(sf => isEnnakkotietoSubfield(sf)) && !sourceField.subfields?.find(sf => isEnnakkotietoSubfield(sf))) {\n removeEnnakkotieto(baseField);\n baseField.merged = 1;\n }\n\n copyrightYearHack(baseRecord, baseField, sourceField);\n\n mergeIndicators(baseField, sourceField, config);\n\n\n // We want to add the incoming subfields without punctuation, and add puctuation later on.\n // (Cloning is harmless, but probably not needed.)\n // NEW: we also drag the normalized version along. It is needed for the merge-or-add decision\n const normalizedSourceField = cloneAndNormalizeFieldForComparison(sourceField); // This is for comparison\n const strippedSourceField = cloneAndRemovePunctuation(sourceField); // This is for adding subfields\n\n //nvdebug(` MERGING SUBFIELDS OF '${fieldToString(sourceField)}' (original)`, debugDev);\n //nvdebug(` MERGING SUBFIELDS OF '${fieldToString(normalizedSourceField)}' (comparison)`, debugDev);\n nvdebug(` MERGING SUBFIELDS OF '${fieldToString(strippedSourceField)}' (merge/add)`, debugDev);\n\n sourceField.subfields.forEach((originalSubfield, index) => {\n //strippedSourceField.subfields.forEach((subfieldForMergeOrAdd, index) => {\n const normalizedSubfield = normalizedSourceField.subfields[index];\n const punctlessSubfield = strippedSourceField.subfields[index];\n const originalBaseValue = fieldToString(baseField);\n nvdebug(` TRYING TO MERGE SUBFIELD '${subfieldToString(originalSubfield)}' TO '${originalBaseValue}'`, debugDev);\n\n const subfieldData = {'tag': sourceField.tag, 'code': originalSubfield.code, 'originalValue': originalSubfield.value, 'normalizedValue': normalizedSubfield.value, 'punctuationlessValue': punctlessSubfield.value};\n\n mergeOrAddSubfield(baseField, subfieldData, candFieldPairs880); // candSubfield);\n const newValue = fieldToString(baseField);\n if (originalBaseValue !== newValue) {\n nvdebug(` SUBFIELD MERGE RESULT: '${newValue}'`, debugDev);\n //debug(` TODO: sort subfields, handle punctuation...`);\n }\n //else { debugDev(` mergeOrAddSubfield() did not add '\u2021${fieldToString(subfieldForMergeOrAdd)}' to '${originalValue}'`); }\n\n });\n}\n\n\nfunction skipMergeField(baseRecord, sourceField, config) {\n if (!mergableTag(sourceField.tag, config)) {\n nvdebug(`skipMergeField(): field '${fieldToString(sourceField)}' listed as skippable!`, debugDev);\n return true;\n }\n\n // Skip duplicate field when merging two records (NB! internal merge merges/removes the duplicate field):\n if (!baseRecord.internalMerge && baseRecord.fields.some(baseField => !baseField.mergeCandidate && fieldsAreIdentical(sourceField, baseField))) {\n nvdebug(`skipMergeField(): field '${fieldToString(sourceField)}' already exists! No merge required!`, debugDev);\n sourceField.deleted = 1;\n return true;\n }\n\n return false;\n}\n\nfunction sourceRecordIsBetter(baseField, sourceField) {\n if (!baseField.subfields) {\n return;\n }\n // MELINDA-8978: prefer Asteri version\n if (isAsteriField(sourceField) && !isAsteriField(baseField)) {\n return 1;\n }\n\n function isAsteriField(field) {\n if (field.subfields.some(sf => sf.code === '0' && sf.value.match(/^\\((?:FI-ASTERI-[NW]|FIN1[13])\\)[0-9]{9}$/u))) {\n return true;\n }\n }\n return false;\n}\n\nfunction swapDataBetweenFields(field1, field2) {\n // NB! Does not support controlfields yet! Add support if the need arises.\n if (field1.subfields) { // If field1 has subfields, then also field2 has them. No need to check the other field here.\n swapNamedData('ind1');\n swapNamedData('ind2');\n swapNamedData('subfields');\n return;\n }\n return;\n\n function swapNamedData(name) {\n const data = field1[name];\n field1[name] = field2[name];\n field2[name] = data;\n }\n\n}\n\nexport function mergeField(baseRecord, sourceRecord, sourceField, config) {\n nvdebug(`SELF: ${fieldToString(sourceField)}`, debugDev);\n\n sourceField.mergeCandidate = true;\n // skip duplicates and special cases:\n if (skipMergeField(baseRecord, sourceField, config)) {\n nvdebug(`mergeField(): don't merge '${fieldToString(sourceField)}'`, debugDev);\n delete sourceField.mergeCandidate;\n return false;\n }\n\n nvdebug(`mergeField(): Try to merge '${fieldToString(sourceField)}'.`, debugDev);\n const counterpartField = getCounterpart(baseRecord, sourceRecord, sourceField, config);\n\n if (counterpartField) {\n if (sourceRecordIsBetter(counterpartField, sourceField)) {\n swapDataBetweenFields(counterpartField, sourceField);\n }\n\n const candFieldPairs880 = sourceField.tag === '880' ? undefined : fieldGetOccurrenceNumberPairs(sourceField, sourceRecord.fields);\n nvdebug(`mergeField(): Got counterpart: '${fieldToString(counterpartField)}'. Thus try merge...`, debugDev);\n nvdebug(`PAIR: ${candFieldPairs880 ? fieldsToString(candFieldPairs880) : 'NADA'}`, debugDev);\n mergeField2(baseRecord, counterpartField, sourceField, config, candFieldPairs880);\n sourceField.deleted = 1;\n delete sourceField.mergeCandidate;\n return true;\n }\n // NB! Counterpartless field is inserted to 7XX even if field.tag says 1XX:\n debugDev(`mergeField(): No mergable counterpart found for '${fieldToString(sourceField)}'.`);\n delete sourceField.mergeCandidate;\n return false;\n}\n\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import createDebugLogger from "debug";
|
|
2
|
-
import { cloneAndNormalizeFieldForComparison
|
|
2
|
+
import { cloneAndNormalizeFieldForComparison } from "../normalizeFieldForComparison.js";
|
|
3
3
|
import { normalizeAs, normalizeControlSubfieldValue } from "../normalize-identifiers.js";
|
|
4
|
-
import { fieldHasSubfield, fieldToString,
|
|
4
|
+
import { fieldHasSubfield, fieldToString, isContentSubfieldCode, nvdebug, subfieldIsRepeatable, subfieldToString } from "../utils.js";
|
|
5
5
|
import { mergeSubfield } from "./mergeSubfield.js";
|
|
6
6
|
import { sortAdjacentSubfields } from "../sortSubfields.js";
|
|
7
7
|
import { valueCarriesMeaning } from "./worldKnowledge.js";
|
|
8
8
|
import { resetSubfield6Tag } from "../subfield6Utils.js";
|
|
9
|
+
import { isEnnakkotietoSubfield } from "../prepublicationUtils.js";
|
|
9
10
|
const debug = createDebugLogger("@natlibfi/melinda-marc-record-merge-reducers:mergeOrAddSubfield");
|
|
10
11
|
const debugDev = debug.extend("dev");
|
|
11
12
|
function catalogingSourceModifyingAgencyCandIsOriginalCatalogingSourceAgencyInTargetField(targetField, candSubfieldData) {
|
|
@@ -19,9 +20,9 @@ function catalogingSourceModifyingAgencyCandIsOriginalCatalogingSourceAgencyInTa
|
|
|
19
20
|
}
|
|
20
21
|
return false;
|
|
21
22
|
}
|
|
22
|
-
function
|
|
23
|
-
if (
|
|
24
|
-
debugDev(`Skip '\
|
|
23
|
+
function dataContainsPrepublicationSubfield(candSubfieldData) {
|
|
24
|
+
if (isEnnakkotietoSubfield({ "code": candSubfieldData.code, "value": candSubfieldData.originalValue })) {
|
|
25
|
+
debugDev(`Skip '\u2021${candSubfieldData.code} ${candSubfieldData.originalValue}'`);
|
|
25
26
|
return true;
|
|
26
27
|
}
|
|
27
28
|
return false;
|
|
@@ -52,7 +53,7 @@ function skipNormalizedComparison(tag, subfieldCode, subfieldValue) {
|
|
|
52
53
|
return false;
|
|
53
54
|
}
|
|
54
55
|
function mergeOrAddSubfieldNotRequired(targetField, candSubfieldData) {
|
|
55
|
-
if (catalogingSourceModifyingAgencyCandIsOriginalCatalogingSourceAgencyInTargetField(targetField, candSubfieldData) ||
|
|
56
|
+
if (catalogingSourceModifyingAgencyCandIsOriginalCatalogingSourceAgencyInTargetField(targetField, candSubfieldData) || dataContainsPrepublicationSubfield(candSubfieldData)) {
|
|
56
57
|
return true;
|
|
57
58
|
}
|
|
58
59
|
if (mergeOrAddSubfieldNotRequiredSpecialCases(targetField, candSubfieldData)) {
|
|
@@ -89,7 +90,7 @@ function addSubfield(targetField, candSubfield) {
|
|
|
89
90
|
sortAdjacentSubfields(targetField);
|
|
90
91
|
}
|
|
91
92
|
function setPunctuationFlag(field, addedSubfield) {
|
|
92
|
-
if (
|
|
93
|
+
if (!isContentSubfieldCode(addedSubfield.code, field.tag)) {
|
|
93
94
|
return;
|
|
94
95
|
}
|
|
95
96
|
field.useExternalEndPunctuation = 1;
|