@natlibfi/marc-record-validators-melinda 11.6.6 → 11.6.7-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/melinda-node-tests.yml +1 -1
- package/dist/access-rights.js +1 -5
- package/dist/access-rights.js.map +1 -1
- package/dist/addMissingField336.js +1 -1
- package/dist/addMissingField336.js.map +1 -1
- package/dist/cyrillux-usemarcon-replacement.js +41 -45
- package/dist/cyrillux-usemarcon-replacement.js.map +1 -1
- package/dist/cyrillux.js +13 -17
- package/dist/cyrillux.js.map +1 -1
- package/dist/disambiguateSeriesStatements.js +3 -4
- package/dist/disambiguateSeriesStatements.js.map +1 -1
- package/dist/double-commas.js +2 -1
- package/dist/double-commas.js.map +1 -1
- package/dist/duplicates-ind1.js +1 -1
- package/dist/duplicates-ind1.js.map +1 -1
- package/dist/empty-fields.js +0 -4
- package/dist/empty-fields.js.map +1 -1
- package/dist/ending-punctuation.js +21 -49
- package/dist/ending-punctuation.js.map +1 -1
- package/dist/ending-whitespace.js +0 -4
- package/dist/ending-whitespace.js.map +1 -1
- package/dist/field-008-18-34-character-groups.js +4 -5
- package/dist/field-008-18-34-character-groups.js.map +1 -1
- package/dist/field-505-separators.js +8 -6
- package/dist/field-505-separators.js.map +1 -1
- package/dist/field-521-fix.js +5 -6
- package/dist/field-521-fix.js.map +1 -1
- package/dist/field-exclusion.js +5 -12
- package/dist/field-exclusion.js.map +1 -1
- package/dist/field-exclusion.spec.js +3 -5
- package/dist/field-exclusion.spec.js.map +1 -1
- package/dist/field-structure.js +2 -5
- package/dist/field-structure.js.map +1 -1
- package/dist/fields-present.js +1 -1
- package/dist/fields-present.js.map +1 -1
- package/dist/fields-present.spec.js +1 -1
- package/dist/fields-present.spec.js.map +1 -1
- package/dist/fix-33X.js +5 -6
- package/dist/fix-33X.js.map +1 -1
- package/dist/fix-country-codes.js +3 -4
- package/dist/fix-country-codes.js.map +1 -1
- package/dist/fix-language-codes.js +12 -9
- package/dist/fix-language-codes.js.map +1 -1
- package/dist/fixRelatorTerms.js +8 -8
- package/dist/fixRelatorTerms.js.map +1 -1
- package/dist/fixed-fields.js +1 -4
- package/dist/fixed-fields.js.map +1 -1
- package/dist/identical-fields.js +2 -3
- package/dist/identical-fields.js.map +1 -1
- package/dist/indicator-fixes.js +14 -15
- package/dist/indicator-fixes.js.map +1 -1
- package/dist/isbn-issn.js +8 -11
- package/dist/isbn-issn.js.map +1 -1
- package/dist/item-language.js +5 -12
- package/dist/item-language.js.map +1 -1
- package/dist/merge-fields/counterpartField.js +6 -8
- package/dist/merge-fields/counterpartField.js.map +1 -1
- package/dist/merge-fields/index.js +3 -3
- package/dist/merge-fields/index.js.map +1 -1
- package/dist/merge-fields/mergeConstraints.js +0 -1
- package/dist/merge-fields/mergeConstraints.js.map +1 -1
- package/dist/merge-fields/mergeField.js +12 -18
- package/dist/merge-fields/mergeField.js.map +1 -1
- package/dist/merge-fields/mergeIndicator.js +5 -5
- package/dist/merge-fields/mergeIndicator.js.map +1 -1
- package/dist/merge-fields/mergeOrAddPostprocess.js +6 -9
- package/dist/merge-fields/mergeOrAddPostprocess.js.map +1 -1
- package/dist/merge-fields/mergeOrAddSubfield.js +6 -8
- package/dist/merge-fields/mergeOrAddSubfield.js.map +1 -1
- package/dist/merge-fields/mergeSubfield.js +8 -8
- package/dist/merge-fields/mergeSubfield.js.map +1 -1
- package/dist/merge-fields/removeDuplicateSubfields.js +1 -2
- package/dist/merge-fields/removeDuplicateSubfields.js.map +1 -1
- package/dist/merge-fields/worldKnowledge.js +1 -1
- package/dist/merge-fields/worldKnowledge.js.map +1 -1
- package/dist/mergeField500Lisapainokset.js +0 -3
- package/dist/mergeField500Lisapainokset.js.map +1 -1
- package/dist/mergeRelatorTermFields.js +3 -3
- package/dist/mergeRelatorTermFields.js.map +1 -1
- package/dist/modernize-502.js +6 -6
- package/dist/modernize-502.js.map +1 -1
- package/dist/multiple-subfield-0.js +4 -4
- package/dist/multiple-subfield-0.js.map +1 -1
- package/dist/non-breaking-space.js +0 -4
- package/dist/non-breaking-space.js.map +1 -1
- package/dist/normalize-dashes.js +5 -4
- package/dist/normalize-dashes.js.map +1 -1
- package/dist/normalize-identifiers.js +6 -6
- package/dist/normalize-identifiers.js.map +1 -1
- package/dist/normalize-qualifying-information.js +4 -4
- package/dist/normalize-qualifying-information.js.map +1 -1
- package/dist/normalize-utf8-diacritics.js +7 -7
- package/dist/normalize-utf8-diacritics.js.map +1 -1
- package/dist/normalizeFieldForComparison.js +21 -20
- package/dist/normalizeFieldForComparison.js.map +1 -1
- package/dist/normalizeSubfieldValueForComparison.js +1 -2
- package/dist/normalizeSubfieldValueForComparison.js.map +1 -1
- package/dist/prepublicationUtils.js +3 -3
- package/dist/prepublicationUtils.js.map +1 -1
- package/dist/punctuation/index.js +14 -31
- package/dist/punctuation/index.js.map +1 -1
- package/dist/punctuation2.js +9 -10
- package/dist/punctuation2.js.map +1 -1
- package/dist/reindexSubfield6OccurenceNumbers.js +8 -9
- package/dist/reindexSubfield6OccurenceNumbers.js.map +1 -1
- package/dist/removeDuplicateDataFields.js +18 -20
- package/dist/removeDuplicateDataFields.js.map +1 -1
- package/dist/removeInferiorDataFields.js +16 -19
- package/dist/removeInferiorDataFields.js.map +1 -1
- package/dist/resolvable-ext-references-melinda.js +4 -8
- package/dist/resolvable-ext-references-melinda.js.map +1 -1
- package/dist/resolveOrphanedSubfield6s.js +9 -9
- package/dist/resolveOrphanedSubfield6s.js.map +1 -1
- package/dist/sanitize-vocabulary-source-codes.js +9 -9
- package/dist/sanitize-vocabulary-source-codes.js.map +1 -1
- package/dist/sort-tags.js +2 -2
- package/dist/sort-tags.js.map +1 -1
- package/dist/sortFields.js +4 -9
- package/dist/sortFields.js.map +1 -1
- package/dist/sortRelatorTerms.js +4 -5
- package/dist/sortRelatorTerms.js.map +1 -1
- package/dist/sortSubfields.js +5 -6
- package/dist/sortSubfields.js.map +1 -1
- package/dist/stripPunctuation.js +2 -2
- package/dist/stripPunctuation.js.map +1 -1
- package/dist/subfield-exclusion.js +4 -11
- package/dist/subfield-exclusion.js.map +1 -1
- package/dist/subfield6Utils.js +12 -11
- package/dist/subfield6Utils.js.map +1 -1
- package/dist/subfield8Utils.js +8 -9
- package/dist/subfield8Utils.js.map +1 -1
- package/dist/subfieldValueNormalizations.js +5 -8
- package/dist/subfieldValueNormalizations.js.map +1 -1
- package/dist/sync-007-and-300.js +8 -8
- package/dist/sync-007-and-300.js.map +1 -1
- package/dist/translate-terms.js +5 -6
- package/dist/translate-terms.js.map +1 -1
- package/dist/typeOfDate-008.js +3 -4
- package/dist/typeOfDate-008.js.map +1 -1
- package/dist/unicode-decomposition.js +1 -1
- package/dist/unicode-decomposition.js.map +1 -1
- package/dist/update-field-540.js +5 -6
- package/dist/update-field-540.js.map +1 -1
- package/dist/urn.js +4 -9
- package/dist/urn.js.map +1 -1
- package/dist/utils.js +5 -9
- package/dist/utils.js.map +1 -1
- package/eslint.config.mjs +53 -0
- package/package.json +12 -13
- package/src/access-rights.js +4 -4
- package/src/addMissingField336.js +1 -1
- package/src/cyrillux-usemarcon-replacement.js +38 -38
- package/src/cyrillux.js +14 -14
- package/src/disambiguateSeriesStatements.js +3 -3
- package/src/double-commas.js +2 -2
- package/src/duplicates-ind1.js +1 -1
- package/src/empty-fields.js +4 -4
- package/src/ending-punctuation.js +46 -49
- package/src/ending-whitespace.js +0 -2
- package/src/field-008-18-34-character-groups.js +5 -5
- package/src/field-505-separators.js +6 -6
- package/src/field-521-fix.js +6 -6
- package/src/field-exclusion.js +12 -12
- package/src/field-exclusion.spec.js +4 -4
- package/src/field-structure.js +5 -5
- package/src/fields-present.js +1 -1
- package/src/fields-present.spec.js +1 -1
- package/src/fix-33X.js +5 -5
- package/src/fix-country-codes.js +3 -3
- package/src/fix-language-codes.js +10 -9
- package/src/fixRelatorTerms.js +8 -8
- package/src/fixed-fields.js +3 -3
- package/src/identical-fields.js +3 -3
- package/src/indicator-fixes.js +15 -15
- package/src/isbn-issn.js +11 -11
- package/src/item-language.js +10 -10
- package/src/merge-fields/counterpartField.js +7 -7
- package/src/merge-fields/index.js +3 -3
- package/src/merge-fields/mergeConstraints.js +1 -1
- package/src/merge-fields/mergeField.js +16 -17
- package/src/merge-fields/mergeIndicator.js +5 -5
- package/src/merge-fields/mergeOrAddPostprocess.js +9 -9
- package/src/merge-fields/mergeOrAddSubfield.js +6 -6
- package/src/merge-fields/mergeSubfield.js +8 -8
- package/src/merge-fields/removeDuplicateSubfields.js +1 -2
- package/src/merge-fields/worldKnowledge.js +1 -1
- package/src/mergeField500Lisapainokset.js +0 -2
- package/src/mergeRelatorTermFields.js +3 -3
- package/src/modernize-502.js +6 -6
- package/src/multiple-subfield-0.js +4 -4
- package/src/non-breaking-space.js +0 -2
- package/src/normalize-dashes.js +4 -4
- package/src/normalize-identifiers.js +6 -6
- package/src/normalize-qualifying-information.js +4 -4
- package/src/normalize-utf8-diacritics.js +7 -7
- package/src/normalizeFieldForComparison.js +20 -20
- package/src/normalizeSubfieldValueForComparison.js +1 -1
- package/src/prepublicationUtils.js +3 -3
- package/src/punctuation/index.js +29 -29
- package/src/punctuation2.js +10 -10
- package/src/reindexSubfield6OccurenceNumbers.js +9 -9
- package/src/removeDuplicateDataFields.js +21 -23
- package/src/removeInferiorDataFields.js +19 -19
- package/src/resolvable-ext-references-melinda.js +8 -8
- package/src/resolveOrphanedSubfield6s.js +9 -9
- package/src/sanitize-vocabulary-source-codes.js +8 -8
- package/src/sort-tags.js +2 -2
- package/src/sortFields.js +6 -6
- package/src/sortRelatorTerms.js +5 -5
- package/src/sortSubfields.js +6 -6
- package/src/stripPunctuation.js +2 -2
- package/src/subfield-exclusion.js +11 -11
- package/src/subfield6Utils.js +11 -11
- package/src/subfield8Utils.js +6 -9
- package/src/subfieldValueNormalizations.js +5 -7
- package/src/sync-007-and-300.js +8 -8
- package/src/translate-terms.js +3 -5
- package/src/typeOfDate-008.js +3 -3
- package/src/unicode-decomposition.js +1 -1
- package/src/update-field-540.js +6 -6
- package/src/urn.js +8 -6
- package/src/utils.js +8 -8
- package/.eslintignore +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mergeConstraints.js","names":["_debug","_interopRequireDefault","require","e","__esModule","default","debug","createDebugLogger","debugDev","extend","keyX00","keyX10","keyX11","keyX30","mergeConstraints","key","constraintToValue","tagsConstraints","constraintName","getMergeConstraintsForTag","tag","tagsConstraintsArray","filter","entry","length"],"sources":["../../src/merge-fields/mergeConstraints.js"],"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:ää\n {'tag': '028', 'required': 'a', 'key': 'ab'},\n {'tag': '030', 'required': 'a', 'key': 'a'},\n {'tag': '031', 'required': '', 'key': 'abcegmnopr2'}, // mites tämmöisen käytännössä 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ä $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älitys 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) { // eslint-disable-line functional/no-conditional-statements\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"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"mergeConstraints.js","names":["_debug","_interopRequireDefault","require","e","__esModule","default","debug","createDebugLogger","debugDev","extend","keyX00","keyX10","keyX11","keyX30","mergeConstraints","key","constraintToValue","tagsConstraints","constraintName","getMergeConstraintsForTag","tag","tagsConstraintsArray","filter","entry","length"],"sources":["../../src/merge-fields/mergeConstraints.js"],"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:ää\n {'tag': '028', 'required': 'a', 'key': 'ab'},\n {'tag': '030', 'required': 'a', 'key': 'a'},\n {'tag': '031', 'required': '', 'key': 'abcegmnopr2'}, // mites tämmöisen käytännössä 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ä $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älitys 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"],"mappings":"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","ignoreList":[]}
|
|
@@ -35,8 +35,7 @@ function removeEnnakkotieto(field) {
|
|
|
35
35
|
const tmp = field.subfields.filter(subfield => !(0, _normalizeFieldForComparison.isEnnakkotietoSubfieldG)(subfield));
|
|
36
36
|
// remove only iff some other subfield remains
|
|
37
37
|
if (tmp.length > 0) {
|
|
38
|
-
|
|
39
|
-
field.subfields = tmp; // eslint-disable-line functional/immutable-data
|
|
38
|
+
field.subfields = tmp;
|
|
40
39
|
}
|
|
41
40
|
}
|
|
42
41
|
function copyrightYearHack(baseRecord, baseField, sourceField) {
|
|
@@ -57,11 +56,9 @@ function copyrightYearHack(baseRecord, baseField, sourceField) {
|
|
|
57
56
|
}]
|
|
58
57
|
});
|
|
59
58
|
// Modify original subfield:
|
|
60
|
-
sf.value = (0, _utils.removeCopyright)(sf.value);
|
|
59
|
+
sf.value = (0, _utils.removeCopyright)(sf.value);
|
|
61
60
|
});
|
|
62
61
|
}
|
|
63
|
-
|
|
64
|
-
// eslint-disable-next-line max-params
|
|
65
62
|
function mergeField2(baseRecord, baseField, sourceField, config, candFieldPairs880 = []) {
|
|
66
63
|
//// Identical fields
|
|
67
64
|
// No need to check every subfield separately.
|
|
@@ -74,9 +71,8 @@ function mergeField2(baseRecord, baseField, sourceField, config, candFieldPairs8
|
|
|
74
71
|
// (If our prepub normalizations are ok, this should not be needed.
|
|
75
72
|
// However, it's simple and works well enough, so let's keep it here.)
|
|
76
73
|
if (baseField.subfields?.find(sf => (0, _normalizeFieldForComparison.isEnnakkotietoSubfieldG)(sf)) && !sourceField.subfields?.find(sf => (0, _normalizeFieldForComparison.isEnnakkotietoSubfieldG)(sf))) {
|
|
77
|
-
// eslint-disable-line functional/no-conditional-statements
|
|
78
74
|
removeEnnakkotieto(baseField);
|
|
79
|
-
baseField.merged = 1;
|
|
75
|
+
baseField.merged = 1;
|
|
80
76
|
}
|
|
81
77
|
copyrightYearHack(baseRecord, baseField, sourceField);
|
|
82
78
|
(0, _mergeIndicator.mergeIndicators)(baseField, sourceField, config);
|
|
@@ -106,7 +102,6 @@ function mergeField2(baseRecord, baseField, sourceField, config, candFieldPairs8
|
|
|
106
102
|
(0, _mergeOrAddSubfield.mergeOrAddSubfield)(baseField, subfieldData, candFieldPairs880); // candSubfield);
|
|
107
103
|
const newValue = (0, _utils.fieldToString)(baseField);
|
|
108
104
|
if (originalBaseValue !== newValue) {
|
|
109
|
-
// eslint-disable-line functional/no-conditional-statements
|
|
110
105
|
(0, _utils.nvdebug)(` SUBFIELD MERGE RESULT: '${newValue}'`, debugDev);
|
|
111
106
|
//debug(` TODO: sort subfields, handle punctuation...`);
|
|
112
107
|
}
|
|
@@ -122,7 +117,7 @@ function skipMergeField(baseRecord, sourceField, config) {
|
|
|
122
117
|
// Skip duplicate field:
|
|
123
118
|
if (baseRecord.fields.some(baseField => !baseField.mergeCandidate && (0, _utils.fieldsAreIdentical)(sourceField, baseField))) {
|
|
124
119
|
(0, _utils.nvdebug)(`skipMergeField(): field '${(0, _utils.fieldToString)(sourceField)}' already exists! No merge required!`, debugDev);
|
|
125
|
-
sourceField.deleted = 1;
|
|
120
|
+
sourceField.deleted = 1;
|
|
126
121
|
return true;
|
|
127
122
|
}
|
|
128
123
|
return false;
|
|
@@ -153,38 +148,37 @@ function swapDataBetweenFields(field1, field2) {
|
|
|
153
148
|
}
|
|
154
149
|
return;
|
|
155
150
|
function swapNamedData(name) {
|
|
156
|
-
const data = field1[name];
|
|
157
|
-
field1[name] = field2[name];
|
|
158
|
-
field2[name] = data;
|
|
151
|
+
const data = field1[name];
|
|
152
|
+
field1[name] = field2[name];
|
|
153
|
+
field2[name] = data;
|
|
159
154
|
}
|
|
160
155
|
}
|
|
161
156
|
function mergeField(baseRecord, sourceRecord, sourceField, config) {
|
|
162
157
|
(0, _utils.nvdebug)(`SELF: ${(0, _utils.fieldToString)(sourceField)}`, debugDev);
|
|
163
|
-
sourceField.mergeCandidate = true;
|
|
158
|
+
sourceField.mergeCandidate = true;
|
|
164
159
|
// skip duplicates and special cases:
|
|
165
160
|
if (skipMergeField(baseRecord, sourceField, config)) {
|
|
166
161
|
(0, _utils.nvdebug)(`mergeField(): don't merge '${(0, _utils.fieldToString)(sourceField)}'`, debugDev);
|
|
167
|
-
delete sourceField.mergeCandidate;
|
|
162
|
+
delete sourceField.mergeCandidate;
|
|
168
163
|
return false;
|
|
169
164
|
}
|
|
170
165
|
(0, _utils.nvdebug)(`mergeField(): Try to merge '${(0, _utils.fieldToString)(sourceField)}'.`, debugDev);
|
|
171
166
|
const counterpartField = (0, _counterpartField.getCounterpart)(baseRecord, sourceRecord, sourceField, config);
|
|
172
167
|
if (counterpartField) {
|
|
173
168
|
if (sourceRecordIsBetter(counterpartField, sourceField)) {
|
|
174
|
-
// eslint-disable-line functional/no-conditional-statements
|
|
175
169
|
swapDataBetweenFields(counterpartField, sourceField);
|
|
176
170
|
}
|
|
177
171
|
const candFieldPairs880 = sourceField.tag === '880' ? undefined : (0, _subfield6Utils.fieldGetOccurrenceNumberPairs)(sourceField, sourceRecord.fields);
|
|
178
172
|
(0, _utils.nvdebug)(`mergeField(): Got counterpart: '${(0, _utils.fieldToString)(counterpartField)}'. Thus try merge...`, debugDev);
|
|
179
173
|
(0, _utils.nvdebug)(`PAIR: ${candFieldPairs880 ? (0, _utils.fieldsToString)(candFieldPairs880) : 'NADA'}`, debugDev);
|
|
180
174
|
mergeField2(baseRecord, counterpartField, sourceField, config, candFieldPairs880);
|
|
181
|
-
sourceField.deleted = 1;
|
|
182
|
-
delete sourceField.mergeCandidate;
|
|
175
|
+
sourceField.deleted = 1;
|
|
176
|
+
delete sourceField.mergeCandidate;
|
|
183
177
|
return true;
|
|
184
178
|
}
|
|
185
179
|
// NB! Counterpartless field is inserted to 7XX even if field.tag says 1XX:
|
|
186
180
|
debugDev(`mergeField(): No mergable counterpart found for '${(0, _utils.fieldToString)(sourceField)}'.`);
|
|
187
|
-
delete sourceField.mergeCandidate;
|
|
181
|
+
delete sourceField.mergeCandidate;
|
|
188
182
|
return false;
|
|
189
183
|
}
|
|
190
184
|
//# sourceMappingURL=mergeField.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mergeField.js","names":["_debug","_interopRequireDefault","require","_utils","_subfield6Utils","_normalizeFieldForComparison","_mergeOrAddSubfield","_mergeIndicator","_mergableTag","_counterpartField","e","__esModule","default","debug","createDebugLogger","debugDev","extend","removeEnnakkotieto","field","tmp","subfields","filter","subfield","isEnnakkotietoSubfieldG","length","copyrightYearHack","baseRecord","baseField","sourceField","tag","relevantSubfields","sf","code","hasCopyright","value","forEach","replace","insertField","removeCopyright","mergeField2","config","candFieldPairs880","fieldToString","find","merged","mergeIndicators","normalizedSourceField","cloneAndNormalizeFieldForComparison","strippedSourceField","cloneAndRemovePunctuation","nvdebug","originalSubfield","index","normalizedSubfield","punctlessSubfield","originalBaseValue","subfieldToString","subfieldData","mergeOrAddSubfield","newValue","skipMergeField","mergableTag","fields","some","mergeCandidate","fieldsAreIdentical","deleted","sourceRecordIsBetter","isAsteriField","match","swapDataBetweenFields","field1","field2","swapNamedData","name","data","mergeField","sourceRecord","counterpartField","getCounterpart","undefined","fieldGetOccurrenceNumberPairs","fieldsToString"],"sources":["../../src/merge-fields/mergeField.js"],"sourcesContent":["//import {MarcRecord} from '@natlibfi/marc-record';\nimport createDebugLogger from 'debug';\nimport {fieldToString, fieldsToString, fieldsAreIdentical, nvdebug, hasCopyright, removeCopyright, subfieldToString} from '../utils';\nimport {fieldGetOccurrenceNumberPairs} from '../subfield6Utils.js';\nimport {cloneAndNormalizeFieldForComparison, cloneAndRemovePunctuation, isEnnakkotietoSubfieldG} from '../normalizeFieldForComparison';\nimport {mergeOrAddSubfield} from './mergeOrAddSubfield';\nimport {mergeIndicators} from './mergeIndicator';\nimport {mergableTag} from './mergableTag';\nimport {getCounterpart} from './counterpartField';\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//import fs from 'fs';\n//import path from 'path';\n\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 => !isEnnakkotietoSubfieldG(subfield));\n // remove only iff some other subfield remains\n if (tmp.length > 0) { // eslint-disable-line functional/no-conditional-statements\n field.subfields = tmp; // eslint-disable-line functional/immutable-data\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); // eslint-disable-line functional/immutable-data\n });\n}\n\n// eslint-disable-next-line max-params\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 => isEnnakkotietoSubfieldG(sf)) && !sourceField.subfields?.find(sf => isEnnakkotietoSubfieldG(sf))) { // eslint-disable-line functional/no-conditional-statements\n removeEnnakkotieto(baseField);\n baseField.merged = 1; // eslint-disable-line functional/immutable-data\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) { // eslint-disable-line functional/no-conditional-statements\n nvdebug(` SUBFIELD MERGE RESULT: '${newValue}'`, debugDev);\n //debug(` TODO: sort subfields, handle punctuation...`);\n }\n //else { debugDev(` mergeOrAddSubfield() did not add '‡${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:\n if (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; // eslint-disable-line functional/immutable-data\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]; // eslint-disable-line functional/immutable-data\n field1[name] = field2[name]; // eslint-disable-line functional/immutable-data\n field2[name] = data; // eslint-disable-line functional/immutable-data\n }\n\n}\n\nexport function mergeField(baseRecord, sourceRecord, sourceField, config) {\n nvdebug(`SELF: ${fieldToString(sourceField)}`, debugDev);\n\n sourceField.mergeCandidate = true; // eslint-disable-line functional/immutable-data\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; // eslint-disable-line functional/immutable-data\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)) { // eslint-disable-line functional/no-conditional-statements\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; // eslint-disable-line functional/immutable-data\n delete sourceField.mergeCandidate; // eslint-disable-line functional/immutable-data\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; // eslint-disable-line functional/immutable-data\n return false;\n}\n\n"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,eAAA,GAAAF,OAAA;AACA,IAAAG,4BAAA,GAAAH,OAAA;AACA,IAAAI,mBAAA,GAAAJ,OAAA;AACA,IAAAK,eAAA,GAAAL,OAAA;AACA,IAAAM,YAAA,GAAAN,OAAA;AACA,IAAAO,iBAAA,GAAAP,OAAA;AAAkD,SAAAD,uBAAAS,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AARlD;;AASA;AACA;AACA;;AAEA;AACA;;AAGA;;AAEA;;AAEA,MAAMG,KAAK,GAAG,IAAAC,cAAiB,EAAC,yDAAyD,CAAC;AAC1F;AACA,MAAMC,QAAQ,GAAGF,KAAK,CAACG,MAAM,CAAC,KAAK,CAAC;;AAEpC;AACA,SAASC,kBAAkBA,CAACC,KAAK,EAAE;EACjC,MAAMC,GAAG,GAAGD,KAAK,CAACE,SAAS,CAACC,MAAM,CAACC,QAAQ,IAAI,CAAC,IAAAC,oDAAuB,EAACD,QAAQ,CAAC,CAAC;EAClF;EACA,IAAIH,GAAG,CAACK,MAAM,GAAG,CAAC,EAAE;IAAE;IACpBN,KAAK,CAACE,SAAS,GAAGD,GAAG,CAAC,CAAC;EACzB;AACF;AAGA,SAASM,iBAAiBA,CAACC,UAAU,EAAEC,SAAS,EAAEC,WAAW,EAAE;EAC7D,IAAID,SAAS,CAACE,GAAG,KAAK,KAAK,IAAID,WAAW,CAACC,GAAG,KAAK,KAAK,EAAE;IACxD;EACF;EACA,MAAMC,iBAAiB,GAAGF,WAAW,CAACR,SAAS,CAACC,MAAM,CAACU,EAAE,IAAIA,EAAE,CAACC,IAAI,KAAK,GAAG,IAAI,IAAAC,mBAAY,EAACF,EAAE,CAACG,KAAK,CAAC,CAAC;EAEvGJ,iBAAiB,CAACK,OAAO,CAACJ,EAAE,IAAI;IAC9B;IACA,MAAMG,KAAK,GAAGH,EAAE,CAACG,KAAK,CAACE,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAC1CV,UAAU,CAACW,WAAW,CAAC;MAAC,KAAK,EAAE,KAAK;MAAE,MAAM,EAAE,GAAG;MAAE,MAAM,EAAE,GAAG;MAAE,WAAW,EAAE,CAAC;QAAC,MAAM,EAAE,GAAG;QAAEH;MAAK,CAAC;IAAC,CAAC,CAAC;IACrG;IACAH,EAAE,CAACG,KAAK,GAAG,IAAAI,sBAAe,EAACP,EAAE,CAACG,KAAK,CAAC,CAAC,CAAC;EACxC,CAAC,CAAC;AACJ;;AAEA;AACA,SAASK,WAAWA,CAACb,UAAU,EAAEC,SAAS,EAAEC,WAAW,EAAEY,MAAM,EAAEC,iBAAiB,GAAG,EAAE,EAAE;EACvF;EACA;EACA;EACA,IAAI,IAAAC,oBAAa,EAACf,SAAS,CAAC,KAAK,IAAAe,oBAAa,EAACd,WAAW,CAAC,EAAE;IAC3D,OAAOF,UAAU;EACnB;;EAEA;EACA;EACA;EACA,IAAIC,SAAS,CAACP,SAAS,EAAEuB,IAAI,CAACZ,EAAE,IAAI,IAAAR,oDAAuB,EAACQ,EAAE,CAAC,CAAC,IAAI,CAACH,WAAW,CAACR,SAAS,EAAEuB,IAAI,CAACZ,EAAE,IAAI,IAAAR,oDAAuB,EAACQ,EAAE,CAAC,CAAC,EAAE;IAAE;IACrId,kBAAkB,CAACU,SAAS,CAAC;IAC7BA,SAAS,CAACiB,MAAM,GAAG,CAAC,CAAC,CAAC;EACxB;EAEAnB,iBAAiB,CAACC,UAAU,EAAEC,SAAS,EAAEC,WAAW,CAAC;EAErD,IAAAiB,+BAAe,EAAClB,SAAS,EAAEC,WAAW,EAAEY,MAAM,CAAC;;EAG/C;EACA;EACA;EACA,MAAMM,qBAAqB,GAAG,IAAAC,gEAAmC,EAACnB,WAAW,CAAC,CAAC,CAAC;EAChF,MAAMoB,mBAAmB,GAAG,IAAAC,sDAAyB,EAACrB,WAAW,CAAC,CAAC,CAAC;;EAEpE;EACA;EACA,IAAAsB,cAAO,EAAC,2BAA2B,IAAAR,oBAAa,EAACM,mBAAmB,CAAC,eAAe,EAAEjC,QAAQ,CAAC;EAE/Fa,WAAW,CAACR,SAAS,CAACe,OAAO,CAAC,CAACgB,gBAAgB,EAAEC,KAAK,KAAK;IAC3D;IACE,MAAMC,kBAAkB,GAAGP,qBAAqB,CAAC1B,SAAS,CAACgC,KAAK,CAAC;IACjE,MAAME,iBAAiB,GAAGN,mBAAmB,CAAC5B,SAAS,CAACgC,KAAK,CAAC;IAC9D,MAAMG,iBAAiB,GAAG,IAAAb,oBAAa,EAACf,SAAS,CAAC;IAClD,IAAAuB,cAAO,EAAC,+BAA+B,IAAAM,uBAAgB,EAACL,gBAAgB,CAAC,SAASI,iBAAiB,GAAG,EAAExC,QAAQ,CAAC;IAEjH,MAAM0C,YAAY,GAAG;MAAC,KAAK,EAAE7B,WAAW,CAACC,GAAG;MAAE,MAAM,EAAEsB,gBAAgB,CAACnB,IAAI;MAAE,eAAe,EAAEmB,gBAAgB,CAACjB,KAAK;MAAE,iBAAiB,EAAEmB,kBAAkB,CAACnB,KAAK;MAAE,sBAAsB,EAAEoB,iBAAiB,CAACpB;IAAK,CAAC;IAEnN,IAAAwB,sCAAkB,EAAC/B,SAAS,EAAE8B,YAAY,EAAEhB,iBAAiB,CAAC,CAAC,CAAC;IAChE,MAAMkB,QAAQ,GAAG,IAAAjB,oBAAa,EAACf,SAAS,CAAC;IACzC,IAAI4B,iBAAiB,KAAKI,QAAQ,EAAE;MAAE;MACpC,IAAAT,cAAO,EAAC,8BAA8BS,QAAQ,GAAG,EAAE5C,QAAQ,CAAC;MAC5D;IACF;IACA;EAEF,CAAC,CAAC;AACJ;AAGA,SAAS6C,cAAcA,CAAClC,UAAU,EAAEE,WAAW,EAAEY,MAAM,EAAE;EACvD,IAAI,CAAC,IAAAqB,wBAAW,EAACjC,WAAW,CAACC,GAAG,EAAEW,MAAM,CAAC,EAAE;IACzC,IAAAU,cAAO,EAAC,4BAA4B,IAAAR,oBAAa,EAACd,WAAW,CAAC,wBAAwB,EAAEb,QAAQ,CAAC;IACjG,OAAO,IAAI;EACb;;EAEA;EACA,IAAIW,UAAU,CAACoC,MAAM,CAACC,IAAI,CAACpC,SAAS,IAAI,CAACA,SAAS,CAACqC,cAAc,IAAI,IAAAC,yBAAkB,EAACrC,WAAW,EAAED,SAAS,CAAC,CAAC,EAAE;IAChH,IAAAuB,cAAO,EAAC,4BAA4B,IAAAR,oBAAa,EAACd,WAAW,CAAC,sCAAsC,EAAEb,QAAQ,CAAC;IAC/Ga,WAAW,CAACsC,OAAO,GAAG,CAAC,CAAC,CAAC;IACzB,OAAO,IAAI;EACb;EAEA,OAAO,KAAK;AACd;AAEA,SAASC,oBAAoBA,CAACxC,SAAS,EAAEC,WAAW,EAAE;EACpD,IAAI,CAACD,SAAS,CAACP,SAAS,EAAE;IACxB;EACF;EACA;EACA,IAAIgD,aAAa,CAACxC,WAAW,CAAC,IAAI,CAACwC,aAAa,CAACzC,SAAS,CAAC,EAAE;IAC3D,OAAO,CAAC;EACV;EAEA,SAASyC,aAAaA,CAAClD,KAAK,EAAE;IAC5B,IAAIA,KAAK,CAACE,SAAS,CAAC2C,IAAI,CAAChC,EAAE,IAAIA,EAAE,CAACC,IAAI,KAAK,GAAG,IAAID,EAAE,CAACG,KAAK,CAACmC,KAAK,CAAC,4CAA4C,CAAC,CAAC,EAAE;MAC/G,OAAO,IAAI;IACb;EACF;EACA,OAAO,KAAK;AACd;AAEA,SAASC,qBAAqBA,CAACC,MAAM,EAAEC,MAAM,EAAE;EAC7C;EACA,IAAID,MAAM,CAACnD,SAAS,EAAE;IAAE;IACtBqD,aAAa,CAAC,MAAM,CAAC;IACrBA,aAAa,CAAC,MAAM,CAAC;IACrBA,aAAa,CAAC,WAAW,CAAC;IAC1B;EACF;EACA;EAEA,SAASA,aAAaA,CAACC,IAAI,EAAE;IAC3B,MAAMC,IAAI,GAAGJ,MAAM,CAACG,IAAI,CAAC,CAAC,CAAC;IAC3BH,MAAM,CAACG,IAAI,CAAC,GAAGF,MAAM,CAACE,IAAI,CAAC,CAAC,CAAC;IAC7BF,MAAM,CAACE,IAAI,CAAC,GAAGC,IAAI,CAAC,CAAC;EACvB;AAEF;AAEO,SAASC,UAAUA,CAAClD,UAAU,EAAEmD,YAAY,EAAEjD,WAAW,EAAEY,MAAM,EAAE;EACxE,IAAAU,cAAO,EAAC,SAAS,IAAAR,oBAAa,EAACd,WAAW,CAAC,EAAE,EAAEb,QAAQ,CAAC;EAExDa,WAAW,CAACoC,cAAc,GAAG,IAAI,CAAC,CAAC;EACnC;EACA,IAAIJ,cAAc,CAAClC,UAAU,EAAEE,WAAW,EAAEY,MAAM,CAAC,EAAE;IACnD,IAAAU,cAAO,EAAC,8BAA8B,IAAAR,oBAAa,EAACd,WAAW,CAAC,GAAG,EAAEb,QAAQ,CAAC;IAC9E,OAAOa,WAAW,CAACoC,cAAc,CAAC,CAAC;IACnC,OAAO,KAAK;EACd;EAEA,IAAAd,cAAO,EAAC,+BAA+B,IAAAR,oBAAa,EAACd,WAAW,CAAC,IAAI,EAAEb,QAAQ,CAAC;EAChF,MAAM+D,gBAAgB,GAAG,IAAAC,gCAAc,EAACrD,UAAU,EAAEmD,YAAY,EAAEjD,WAAW,EAAEY,MAAM,CAAC;EAEtF,IAAIsC,gBAAgB,EAAE;IACpB,IAAIX,oBAAoB,CAACW,gBAAgB,EAAElD,WAAW,CAAC,EAAE;MAAE;MACzD0C,qBAAqB,CAACQ,gBAAgB,EAAElD,WAAW,CAAC;IACtD;IAEA,MAAMa,iBAAiB,GAAGb,WAAW,CAACC,GAAG,KAAK,KAAK,GAAGmD,SAAS,GAAG,IAAAC,6CAA6B,EAACrD,WAAW,EAAEiD,YAAY,CAACf,MAAM,CAAC;IACjI,IAAAZ,cAAO,EAAC,mCAAmC,IAAAR,oBAAa,EAACoC,gBAAgB,CAAC,sBAAsB,EAAE/D,QAAQ,CAAC;IAC3G,IAAAmC,cAAO,EAAC,SAAST,iBAAiB,GAAG,IAAAyC,qBAAc,EAACzC,iBAAiB,CAAC,GAAG,MAAM,EAAE,EAAE1B,QAAQ,CAAC;IAC5FwB,WAAW,CAACb,UAAU,EAAEoD,gBAAgB,EAAElD,WAAW,EAAEY,MAAM,EAAEC,iBAAiB,CAAC;IACjFb,WAAW,CAACsC,OAAO,GAAG,CAAC,CAAC,CAAC;IACzB,OAAOtC,WAAW,CAACoC,cAAc,CAAC,CAAC;IACnC,OAAO,IAAI;EACb;EACA;EACAjD,QAAQ,CAAC,oDAAoD,IAAA2B,oBAAa,EAACd,WAAW,CAAC,IAAI,CAAC;EAC5F,OAAOA,WAAW,CAACoC,cAAc,CAAC,CAAC;EACnC,OAAO,KAAK;AACd","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"mergeField.js","names":["_debug","_interopRequireDefault","require","_utils","_subfield6Utils","_normalizeFieldForComparison","_mergeOrAddSubfield","_mergeIndicator","_mergableTag","_counterpartField","e","__esModule","default","debug","createDebugLogger","debugDev","extend","removeEnnakkotieto","field","tmp","subfields","filter","subfield","isEnnakkotietoSubfieldG","length","copyrightYearHack","baseRecord","baseField","sourceField","tag","relevantSubfields","sf","code","hasCopyright","value","forEach","replace","insertField","removeCopyright","mergeField2","config","candFieldPairs880","fieldToString","find","merged","mergeIndicators","normalizedSourceField","cloneAndNormalizeFieldForComparison","strippedSourceField","cloneAndRemovePunctuation","nvdebug","originalSubfield","index","normalizedSubfield","punctlessSubfield","originalBaseValue","subfieldToString","subfieldData","mergeOrAddSubfield","newValue","skipMergeField","mergableTag","fields","some","mergeCandidate","fieldsAreIdentical","deleted","sourceRecordIsBetter","isAsteriField","match","swapDataBetweenFields","field1","field2","swapNamedData","name","data","mergeField","sourceRecord","counterpartField","getCounterpart","undefined","fieldGetOccurrenceNumberPairs","fieldsToString"],"sources":["../../src/merge-fields/mergeField.js"],"sourcesContent":["//import {MarcRecord} from '@natlibfi/marc-record';\nimport createDebugLogger from 'debug';\nimport {fieldToString, fieldsToString, fieldsAreIdentical, nvdebug, hasCopyright, removeCopyright, subfieldToString} from '../utils';\nimport {fieldGetOccurrenceNumberPairs} from '../subfield6Utils.js';\nimport {cloneAndNormalizeFieldForComparison, cloneAndRemovePunctuation, isEnnakkotietoSubfieldG} from '../normalizeFieldForComparison';\nimport {mergeOrAddSubfield} from './mergeOrAddSubfield';\nimport {mergeIndicators} from './mergeIndicator';\nimport {mergableTag} from './mergableTag';\nimport {getCounterpart} from './counterpartField';\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//import fs from 'fs';\n//import path from 'path';\n\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 => !isEnnakkotietoSubfieldG(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 => isEnnakkotietoSubfieldG(sf)) && !sourceField.subfields?.find(sf => isEnnakkotietoSubfieldG(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 '‡${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:\n if (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"],"mappings":"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","ignoreList":[]}
|
|
@@ -105,7 +105,7 @@ function mergeIndicators(toField, fromField, config) {
|
|
|
105
105
|
|
|
106
106
|
// MRA-300: If source contains the (un)holy $9 FENNI<KEEP>, we prefer that value regardless of whatever...
|
|
107
107
|
if (!fieldIsFenniKept(toField) && fieldIsFenniKept(fromField)) {
|
|
108
|
-
toField.ind1 = fromField.ind1;
|
|
108
|
+
toField.ind1 = fromField.ind1;
|
|
109
109
|
return;
|
|
110
110
|
}
|
|
111
111
|
const preferredValues = getIndicatorPreferredValues(toField.tag, 1, config);
|
|
@@ -115,7 +115,7 @@ function mergeIndicators(toField, fromField, config) {
|
|
|
115
115
|
const preferredValue = getPreferredValue(preferredValues, fromField.ind1, toField.ind1);
|
|
116
116
|
if (typeof preferredValue !== 'undefined') {
|
|
117
117
|
//nvdebug(`${preferredValue} WINS!`, debugDev);
|
|
118
|
-
toField.ind1 = preferredValue;
|
|
118
|
+
toField.ind1 = preferredValue;
|
|
119
119
|
return;
|
|
120
120
|
}
|
|
121
121
|
//nvdebug(`No winner found indicator 1: '${toField.ind1}' vs '${fromField.ind1}', keep '${toField.ind1}'`, debugDev);
|
|
@@ -141,8 +141,8 @@ function mergeIndicators(toField, fromField, config) {
|
|
|
141
141
|
// Convert 260 to 264 so that no information is lost:
|
|
142
142
|
(0, _utils.nvdebug)(`Apply base 260->264 tag swap hack`, debugDev);
|
|
143
143
|
(0, _utils.nvdebug)(` ${(0, _utils.fieldToString)(toField)}\n ${(0, _utils.fieldToString)(fromField)}`, debugDev);
|
|
144
|
-
toField.tag = '264';
|
|
145
|
-
toField.ind2 = fromField.ind2;
|
|
144
|
+
toField.tag = '264';
|
|
145
|
+
toField.ind2 = fromField.ind2;
|
|
146
146
|
}
|
|
147
147
|
function mergeIndicator2(toField, fromField, config) {
|
|
148
148
|
if (toField.ind2 === fromField.ind2) {
|
|
@@ -162,7 +162,7 @@ function mergeIndicators(toField, fromField, config) {
|
|
|
162
162
|
//nvdebug(` Try to merge indicator 2. Got preferred values '${preferredValues}'`, debugDev);
|
|
163
163
|
const preferredValue = getPreferredValue(preferredValues, fromField.ind2, toField.ind2);
|
|
164
164
|
if (typeof preferredValue !== 'undefined') {
|
|
165
|
-
toField.ind2 = preferredValue;
|
|
165
|
+
toField.ind2 = preferredValue;
|
|
166
166
|
return;
|
|
167
167
|
}
|
|
168
168
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mergeIndicator.js","names":["_debug","_interopRequireDefault","require","_utils","e","__esModule","default","debug","createDebugLogger","debugDev","extend","ind1NonFilingChars","ind2NonFilingChars","mergeIndicators","toField","fromField","config","mergeIndicator1","mergeIndicator2","getIndicatorPreferredValues","tag","indicatorNumber","cands","getIndicatorPreferredValuesForGivenTag","Array","isArray","split","preferredValues","indicator1PreferredValues","indicator2PreferredValues","nvdebug","JSON","stringify","includes","marc21GetTagsLegalInd1Value","marc21GetTagsLegalInd2Value","length","getPreferredValue","preferences","val1","val2","i1","scoreValue","i2","undefined","val","indexOf","fieldIsFenniKept","field","subfields","some","sf","code","value","ind1","preferredValue","publisherTagSwapHack","ind2","fieldToString"],"sources":["../../src/merge-fields/mergeIndicator.js"],"sourcesContent":["import createDebugLogger from 'debug';\nimport {fieldToString, marc21GetTagsLegalInd1Value, marc21GetTagsLegalInd2Value, nvdebug} from '../utils';\n\n// Specs: https://workgroups.helsinki.fi/x/K1ohCw (though we occasionally differ from them)...\n\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:merge-fields:mergeIndicator');\n//const debugData = debug.extend('data');\nconst debugDev = debug.extend('dev');\n\nconst ind1NonFilingChars = ['130', '630', '730', '740'];\nconst ind2NonFilingChars = ['222', '240', '242', '243', '245', '830'];\n\n\nexport function mergeIndicators(toField, fromField, config) {\n // NB! For non-filing indicators we deem that bigger is better. This is a bit quick'n'dirty, as usual.\n // We could and should checks the relevant article length (using language information whilst doing it).\n // However, this is a task for record internal fixer, not merge.\n //\n // For other indicators the situation is trickier, as we don't know which one is the good value.\n //\n // NB! We could add fixes for various other indicator types as well. However, it gets quickly pretty ad hoc.\n // nvdebug(fieldToString(toField), debugDev);\n // nvdebug(fieldToString(fromField), debugDev);\n\n mergeIndicator1(toField, fromField, config);\n mergeIndicator2(toField, fromField, config);\n\n function getIndicatorPreferredValues(tag, indicatorNumber, config) {\n const cands = getIndicatorPreferredValuesForGivenTag(tag, indicatorNumber, config);\n // More complex systems where multiple indicators have same priority are objects.\n // Example: field 506 might return {\"0\": 1, \"1\": 1, \" \": 2}\n // Here indicator values '0' and '1' share top priority 1, and '#' is of lesser importance, namely 2.\n if (Array.isArray(cands) || typeof cands === 'object') {\n return cands;\n }\n if (typeof cands === 'string') { // single cand as string (seen in json in the past), though now they should all be arrays\n return cands.split('');\n }\n\n return [];\n\n function getIndicatorPreferredValuesForGivenTag(tag, indicatorNumber, config) {\n const preferredValues = indicatorNumber === 1 ? config.indicator1PreferredValues : config.indicator2PreferredValues;\n nvdebug(`${tag} IND${indicatorNumber}: get preferred values...\\nCONFIG: ${JSON.stringify(config)}`, debugDev);\n if (preferredValues) {\n //nvdebug(`${tag} PREF VALS: ${JSON.stringify(preferredValues)}`, debugDev);\n if (tag in preferredValues) {\n return preferredValues[tag];\n }\n }\n\n // Easter Egg #1: Use good-ish hard-coded defaults as not defined by user:\n if (indicatorNumber === 1 && ind1NonFilingChars.includes(tag)) {\n return '9876543210 ';\n }\n if (indicatorNumber === 2 && ind2NonFilingChars.includes(tag)) {\n return '9876543210 ';\n }\n\n // Easter Egg #2: Marc21 standard has just one value for given indicator, so prefer it:\n const cands = indicatorNumber === 1 ? marc21GetTagsLegalInd1Value(tag) : marc21GetTagsLegalInd2Value(tag);\n if (cands) {\n if (typeof cands === 'string' && cands.length === 1) { // single cand\n return [cands];\n }\n if (Array.isArray(cands) && cands.length === 1) {\n return cands;\n }\n }\n\n return [];\n }\n }\n\n function getPreferredValue(preferences, val1, val2) {\n const i1 = scoreValue(preferences, val1);\n const i2 = scoreValue(preferences, val2);\n if (i1 === -1) {\n return i2 === -1 ? undefined : val2;\n }\n if (i2 === -1) {\n return val1;\n }\n // The sooner, the better:\n return i1 < i2 ? val1 : val2;\n\n function scoreValue(preferences, val) {\n if (Array.isArray(preferences)) {\n return preferences.indexOf(val);\n }\n // preferences may be an object, since diffent values can return same score\n // (eg. 506 ind1 values '0' and '1' are equal but better than '#')\n if (!(val in preferences)) {\n return -1;\n }\n return preferences[val];\n }\n }\n\n\n function fieldIsFenniKept(field) {\n return field.subfields && field.subfields.some(sf => sf.code === '9' && sf.value === 'FENNI<KEEP>');\n }\n\n function mergeIndicator1(toField, fromField, config) {\n if (toField.ind1 === fromField.ind1) {\n return; // Do nothing\n }\n\n // MRA-300: If source contains the (un)holy $9 FENNI<KEEP>, we prefer that value regardless of whatever...\n if (!fieldIsFenniKept(toField) && fieldIsFenniKept(fromField)) {\n toField.ind1 = fromField.ind1; // eslint-disable-line functional/immutable-data\n return;\n }\n\n\n const preferredValues = getIndicatorPreferredValues(toField.tag, 1, config);\n\n if (preferredValues) {\n //nvdebug(`Try to merge indicator 1: '${toField.ind1}' vs '${fromField.ind1}'`, debugDev);\n //nvdebug(`PREF VALS: ${preferredValues}`, debugDev);\n const preferredValue = getPreferredValue(preferredValues, fromField.ind1, toField.ind1);\n if (typeof preferredValue !== 'undefined') {\n //nvdebug(`${preferredValue} WINS!`, debugDev);\n toField.ind1 = preferredValue; // eslint-disable-line functional/immutable-data\n return;\n }\n //nvdebug(`No winner found indicator 1: '${toField.ind1}' vs '${fromField.ind1}', keep '${toField.ind1}'`, debugDev);\n //return;\n }\n //nvdebug(`TAG '${toField.tag}': No rule to merge indicator 1: '${toField.ind1}' vs '${fromField.ind1}', keep '${toField.ind1}'`, debugDev);\n }\n\n\n function publisherTagSwapHack(toField, fromField) {\n // NB! Note that field 264.ind2==3 maps to $efg in field 260, so it is not relevant *here*:\n // (Not sure whether our ind2 sanity check list should contain '4' (copyright year) as well:)\n if (toField.tag !== '260' || fromField.tag !== '264' || !['0', '1', '2'].includes(fromField.ind2)) {\n return;\n }\n // Field 264 IND2 contains information that can not be coded into field 260.\n\n // However, 260 contains data that cannot be converted to 264 as well\n if (toField.subfields.some(sf => ['e', 'f', 'g'].includes(sf.code))) {\n nvdebug(`WARNING: can not change base 260 to 264 as it contains $e, $f and/or $g. Source IND2 info lost.`, debugDev);\n nvdebug(` ${fieldToString(toField)}\\n ${fieldToString(fromField)}`, debugDev);\n return;\n }\n\n // Convert 260 to 264 so that no information is lost:\n nvdebug(`Apply base 260->264 tag swap hack`, debugDev);\n nvdebug(` ${fieldToString(toField)}\\n ${fieldToString(fromField)}`, debugDev);\n\n toField.tag = '264'; // eslint-disable-line functional/immutable-data\n toField.ind2 = fromField.ind2; // eslint-disable-line functional/immutable-data\n }\n\n function mergeIndicator2(toField, fromField, config) {\n if (toField.ind2 === fromField.ind2) {\n return; // Do nothing\n }\n\n //nvdebug(`Merge IND2`, debugDev);\n //nvdebug(` ${fieldToString(toField)}\\n ${fieldToString(fromField)}`, debugDev);\n\n\n publisherTagSwapHack(toField, fromField); // Easter egg/hack for base-260 vs source-264\n\n // If source contains $9 FENNI<KEEP>, we might prefer it?\n\n //nvdebug(`Try to merge indicator 2: '${toField.ind2}' vs '${fromField.ind2}'`, debugDev);\n const preferredValues = getIndicatorPreferredValues(toField.tag, 2, config);\n\n if (preferredValues) {\n //nvdebug(` Try to merge indicator 2. Got preferred values '${preferredValues}'`, debugDev);\n const preferredValue = getPreferredValue(preferredValues, fromField.ind2, toField.ind2);\n if (typeof preferredValue !== 'undefined') {\n toField.ind2 = preferredValue; // eslint-disable-line functional/immutable-data\n return;\n }\n }\n\n }\n\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"mergeIndicator.js","names":["_debug","_interopRequireDefault","require","_utils","e","__esModule","default","debug","createDebugLogger","debugDev","extend","ind1NonFilingChars","ind2NonFilingChars","mergeIndicators","toField","fromField","config","mergeIndicator1","mergeIndicator2","getIndicatorPreferredValues","tag","indicatorNumber","cands","getIndicatorPreferredValuesForGivenTag","Array","isArray","split","preferredValues","indicator1PreferredValues","indicator2PreferredValues","nvdebug","JSON","stringify","includes","marc21GetTagsLegalInd1Value","marc21GetTagsLegalInd2Value","length","getPreferredValue","preferences","val1","val2","i1","scoreValue","i2","undefined","val","indexOf","fieldIsFenniKept","field","subfields","some","sf","code","value","ind1","preferredValue","publisherTagSwapHack","ind2","fieldToString"],"sources":["../../src/merge-fields/mergeIndicator.js"],"sourcesContent":["import createDebugLogger from 'debug';\nimport {fieldToString, marc21GetTagsLegalInd1Value, marc21GetTagsLegalInd2Value, nvdebug} from '../utils';\n\n// Specs: https://workgroups.helsinki.fi/x/K1ohCw (though we occasionally differ from them)...\n\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:merge-fields:mergeIndicator');\n//const debugData = debug.extend('data');\nconst debugDev = debug.extend('dev');\n\nconst ind1NonFilingChars = ['130', '630', '730', '740'];\nconst ind2NonFilingChars = ['222', '240', '242', '243', '245', '830'];\n\n\nexport function mergeIndicators(toField, fromField, config) {\n // NB! For non-filing indicators we deem that bigger is better. This is a bit quick'n'dirty, as usual.\n // We could and should checks the relevant article length (using language information whilst doing it).\n // However, this is a task for record internal fixer, not merge.\n //\n // For other indicators the situation is trickier, as we don't know which one is the good value.\n //\n // NB! We could add fixes for various other indicator types as well. However, it gets quickly pretty ad hoc.\n // nvdebug(fieldToString(toField), debugDev);\n // nvdebug(fieldToString(fromField), debugDev);\n\n mergeIndicator1(toField, fromField, config);\n mergeIndicator2(toField, fromField, config);\n\n function getIndicatorPreferredValues(tag, indicatorNumber, config) {\n const cands = getIndicatorPreferredValuesForGivenTag(tag, indicatorNumber, config);\n // More complex systems where multiple indicators have same priority are objects.\n // Example: field 506 might return {\"0\": 1, \"1\": 1, \" \": 2}\n // Here indicator values '0' and '1' share top priority 1, and '#' is of lesser importance, namely 2.\n if (Array.isArray(cands) || typeof cands === 'object') {\n return cands;\n }\n if (typeof cands === 'string') { // single cand as string (seen in json in the past), though now they should all be arrays\n return cands.split('');\n }\n\n return [];\n\n function getIndicatorPreferredValuesForGivenTag(tag, indicatorNumber, config) {\n const preferredValues = indicatorNumber === 1 ? config.indicator1PreferredValues : config.indicator2PreferredValues;\n nvdebug(`${tag} IND${indicatorNumber}: get preferred values...\\nCONFIG: ${JSON.stringify(config)}`, debugDev);\n if (preferredValues) {\n //nvdebug(`${tag} PREF VALS: ${JSON.stringify(preferredValues)}`, debugDev);\n if (tag in preferredValues) {\n return preferredValues[tag];\n }\n }\n\n // Easter Egg #1: Use good-ish hard-coded defaults as not defined by user:\n if (indicatorNumber === 1 && ind1NonFilingChars.includes(tag)) {\n return '9876543210 ';\n }\n if (indicatorNumber === 2 && ind2NonFilingChars.includes(tag)) {\n return '9876543210 ';\n }\n\n // Easter Egg #2: Marc21 standard has just one value for given indicator, so prefer it:\n const cands = indicatorNumber === 1 ? marc21GetTagsLegalInd1Value(tag) : marc21GetTagsLegalInd2Value(tag);\n if (cands) {\n if (typeof cands === 'string' && cands.length === 1) { // single cand\n return [cands];\n }\n if (Array.isArray(cands) && cands.length === 1) {\n return cands;\n }\n }\n\n return [];\n }\n }\n\n function getPreferredValue(preferences, val1, val2) {\n const i1 = scoreValue(preferences, val1);\n const i2 = scoreValue(preferences, val2);\n if (i1 === -1) {\n return i2 === -1 ? undefined : val2;\n }\n if (i2 === -1) {\n return val1;\n }\n // The sooner, the better:\n return i1 < i2 ? val1 : val2;\n\n function scoreValue(preferences, val) {\n if (Array.isArray(preferences)) {\n return preferences.indexOf(val);\n }\n // preferences may be an object, since diffent values can return same score\n // (eg. 506 ind1 values '0' and '1' are equal but better than '#')\n if (!(val in preferences)) {\n return -1;\n }\n return preferences[val];\n }\n }\n\n\n function fieldIsFenniKept(field) {\n return field.subfields && field.subfields.some(sf => sf.code === '9' && sf.value === 'FENNI<KEEP>');\n }\n\n function mergeIndicator1(toField, fromField, config) {\n if (toField.ind1 === fromField.ind1) {\n return; // Do nothing\n }\n\n // MRA-300: If source contains the (un)holy $9 FENNI<KEEP>, we prefer that value regardless of whatever...\n if (!fieldIsFenniKept(toField) && fieldIsFenniKept(fromField)) {\n toField.ind1 = fromField.ind1;\n return;\n }\n\n\n const preferredValues = getIndicatorPreferredValues(toField.tag, 1, config);\n\n if (preferredValues) {\n //nvdebug(`Try to merge indicator 1: '${toField.ind1}' vs '${fromField.ind1}'`, debugDev);\n //nvdebug(`PREF VALS: ${preferredValues}`, debugDev);\n const preferredValue = getPreferredValue(preferredValues, fromField.ind1, toField.ind1);\n if (typeof preferredValue !== 'undefined') {\n //nvdebug(`${preferredValue} WINS!`, debugDev);\n toField.ind1 = preferredValue;\n return;\n }\n //nvdebug(`No winner found indicator 1: '${toField.ind1}' vs '${fromField.ind1}', keep '${toField.ind1}'`, debugDev);\n //return;\n }\n //nvdebug(`TAG '${toField.tag}': No rule to merge indicator 1: '${toField.ind1}' vs '${fromField.ind1}', keep '${toField.ind1}'`, debugDev);\n }\n\n\n function publisherTagSwapHack(toField, fromField) {\n // NB! Note that field 264.ind2==3 maps to $efg in field 260, so it is not relevant *here*:\n // (Not sure whether our ind2 sanity check list should contain '4' (copyright year) as well:)\n if (toField.tag !== '260' || fromField.tag !== '264' || !['0', '1', '2'].includes(fromField.ind2)) {\n return;\n }\n // Field 264 IND2 contains information that can not be coded into field 260.\n\n // However, 260 contains data that cannot be converted to 264 as well\n if (toField.subfields.some(sf => ['e', 'f', 'g'].includes(sf.code))) {\n nvdebug(`WARNING: can not change base 260 to 264 as it contains $e, $f and/or $g. Source IND2 info lost.`, debugDev);\n nvdebug(` ${fieldToString(toField)}\\n ${fieldToString(fromField)}`, debugDev);\n return;\n }\n\n // Convert 260 to 264 so that no information is lost:\n nvdebug(`Apply base 260->264 tag swap hack`, debugDev);\n nvdebug(` ${fieldToString(toField)}\\n ${fieldToString(fromField)}`, debugDev);\n\n toField.tag = '264';\n toField.ind2 = fromField.ind2;\n }\n\n function mergeIndicator2(toField, fromField, config) {\n if (toField.ind2 === fromField.ind2) {\n return; // Do nothing\n }\n\n //nvdebug(`Merge IND2`, debugDev);\n //nvdebug(` ${fieldToString(toField)}\\n ${fieldToString(fromField)}`, debugDev);\n\n\n publisherTagSwapHack(toField, fromField); // Easter egg/hack for base-260 vs source-264\n\n // If source contains $9 FENNI<KEEP>, we might prefer it?\n\n //nvdebug(`Try to merge indicator 2: '${toField.ind2}' vs '${fromField.ind2}'`, debugDev);\n const preferredValues = getIndicatorPreferredValues(toField.tag, 2, config);\n\n if (preferredValues) {\n //nvdebug(` Try to merge indicator 2. Got preferred values '${preferredValues}'`, debugDev);\n const preferredValue = getPreferredValue(preferredValues, fromField.ind2, toField.ind2);\n if (typeof preferredValue !== 'undefined') {\n toField.ind2 = preferredValue;\n return;\n }\n }\n\n }\n\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -18,7 +18,6 @@ function postprocessBaseRecord(base) {
|
|
|
18
18
|
|
|
19
19
|
// remove merge-specific information:
|
|
20
20
|
if (field.merged) {
|
|
21
|
-
// eslint-disable-line functional/no-conditional-statements
|
|
22
21
|
// Field level ideas about things that could be done here:
|
|
23
22
|
// - Fix indicators?
|
|
24
23
|
// Record level fixes should be implemented as validators/fixers
|
|
@@ -28,27 +27,25 @@ function postprocessBaseRecord(base) {
|
|
|
28
27
|
(0, _sortSubfields.sortAdjacentSubfields)(field); // Put the added $e subfield to proper places.
|
|
29
28
|
(0, _sortRelatorTerms.sortAdjacentRelatorTerms)(field); // Sort $e subfields with each other
|
|
30
29
|
(0, _punctuation.fieldFixPunctuation)(field);
|
|
31
|
-
delete field.merged;
|
|
30
|
+
delete field.merged;
|
|
32
31
|
}
|
|
33
32
|
if (field.useExternalEndPunctuation) {
|
|
34
|
-
|
|
35
|
-
delete field.useExternalEndPunctuation; // eslint-disable-line functional/immutable-data
|
|
33
|
+
delete field.useExternalEndPunctuation;
|
|
36
34
|
}
|
|
37
35
|
if (field.added) {
|
|
38
|
-
|
|
39
|
-
delete field.added; // eslint-disable-line functional/immutable-data
|
|
36
|
+
delete field.added;
|
|
40
37
|
}
|
|
41
38
|
|
|
42
39
|
/*
|
|
43
|
-
if (field.deleted) {
|
|
44
|
-
delete field.deleted;
|
|
40
|
+
if (field.deleted) {
|
|
41
|
+
delete field.deleted;
|
|
45
42
|
}
|
|
46
43
|
*/
|
|
47
44
|
});
|
|
48
45
|
}
|
|
49
46
|
function removeDeletedFields(record) {
|
|
50
47
|
// remove fields that are marked as deleted:
|
|
51
|
-
record.fields = record.fields.filter(f => !f.deleted);
|
|
48
|
+
record.fields = record.fields.filter(f => !f.deleted);
|
|
52
49
|
}
|
|
53
50
|
function postprocessRecords(base, source) {
|
|
54
51
|
postprocessBaseRecord(base);
|