@natlibfi/marc-record-validators-melinda 11.5.3 → 11.5.4
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/dist/merge-fields/mergeConstraints.js +3 -1
- package/dist/merge-fields/mergeConstraints.js.map +1 -1
- package/dist/removeInferiorDataFields.js +16 -0
- package/dist/removeInferiorDataFields.js.map +1 -1
- package/dist/sortFields.js +27 -10
- package/dist/sortFields.js.map +1 -1
- package/package.json +7 -7
- package/src/merge-fields/mergeConstraints.js +1 -0
- package/src/removeInferiorDataFields.js +14 -0
- package/src/sortFields.js +28 -13
- package/test-fixtures/sort-fields/13/input.json +21 -0
- package/test-fixtures/sort-fields/13/metadata.json +5 -0
- package/test-fixtures/sort-fields/13/result.json +22 -0
|
@@ -782,7 +782,9 @@ const mergeConstraints = [{
|
|
|
782
782
|
'tag': '588',
|
|
783
783
|
'required': 'a',
|
|
784
784
|
'key': 'a'
|
|
785
|
-
},
|
|
785
|
+
},
|
|
786
|
+
// NB! Currently we never merge 59X fields (see mergableTags.js). Doublish removals such as MELKEHITYS-3147 are handled by postprocessor.
|
|
787
|
+
{
|
|
786
788
|
'tag': '590',
|
|
787
789
|
'required': ''
|
|
788
790
|
}, {
|
|
@@ -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 {'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) { // 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":[]}
|
|
@@ -269,6 +269,14 @@ function deriveIndividualDeletables(record) {
|
|
|
269
269
|
return processTodoList([...stillToDo, ...moreToDo], [...deletables, tmp]);
|
|
270
270
|
}
|
|
271
271
|
}
|
|
272
|
+
if (currString.match(/^500 ## ‡a Ei vastaanotettu\.$/u)) {
|
|
273
|
+
// MELKEHITYS-3147
|
|
274
|
+
return processTodoList([...stillToDo, ...moreToDo], [...deletables, '500 ## ‡a EI VASTAANOTETTU.']);
|
|
275
|
+
}
|
|
276
|
+
if (currString.match(/^500 ## ‡a Ei ilmesty\.$/u)) {
|
|
277
|
+
// MELKEHITYS-3147
|
|
278
|
+
return processTodoList([...stillToDo, ...moreToDo], [...deletables, '500 ## ‡a EI ILMESTY.']);
|
|
279
|
+
}
|
|
272
280
|
if (currString.match(/^505 .0.*-- ‡t/u)) {
|
|
273
281
|
// MRA-413-ish
|
|
274
282
|
const tmp = currString.replace(/ -- ‡t /gu, ' -- ').
|
|
@@ -285,6 +293,14 @@ function deriveIndividualDeletables(record) {
|
|
|
285
293
|
//nvdebug(`505 ORIGINAL: '${fieldAsString}'`)
|
|
286
294
|
//nvdebug(`505 DERIVATE: '${tmp}'`)
|
|
287
295
|
}
|
|
296
|
+
if (currString.match(/^594 ## ‡a Ei vastaanotettu ‡5 FENNI$/u)) {
|
|
297
|
+
// MELKEHITYS-3147
|
|
298
|
+
return processTodoList([...stillToDo, ...moreToDo], [...deletables, '594 ## ‡a EI VASTAANOTETTU ‡5 FENNI']);
|
|
299
|
+
}
|
|
300
|
+
if (currString.match(/^594 ## ‡a Ei ilmesty ‡5 FENNI$/u)) {
|
|
301
|
+
// MELKEHITYS-3147
|
|
302
|
+
return processTodoList([...stillToDo, ...moreToDo], [...deletables, '594 ## ‡a EI ILMESTY ‡5 FENNI']);
|
|
303
|
+
}
|
|
288
304
|
|
|
289
305
|
// MET-381: remove occurence number TAG-00, if TAG-NN existists
|
|
290
306
|
if (currString.match(/^880.* ‡6 [0-9][0-9][0-9]-(?:[1-9][0-9]|0[1-9])/u)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"removeInferiorDataFields.js","names":["_debug","_interopRequireDefault","require","_removeDuplicateDataFields","_subfield6Utils","_utils","_subfield8Utils","_prepublicationUtils","_normalizeFieldForComparison","_normalizeUtf8Diacritics","e","__esModule","default","debug","createDebugLogger","_default","description","validate","fix","record","nvdebug","res","message","valid","removeInferiorDatafields","duplicates","length","deriveInferiorChains","fields","hash","forEach","f","fieldToChainToDeletables","field","chain","fieldToChain","chainAsString","fieldsToNormalizedString","arr","deriveChainDeletables","val","todoList","deletables","stillToDo","undefined","withoutScriptIdentificationCode","replace","keepless","linked490Ind1","filter","isRelevantChain6","fieldHasValidSubfield6","fieldHasValidSubfield8","some","subfields","sf","code","sameField","removeInferiorChains","deletableChainsAsKeys","nChains","Object","keys","innerRemoveInferiorChains","deletedStringsArray","currField","remainingFields","triggeringField","triggeringChain","chainContains1XX","sevenToOne","deletedString","fieldsToString","removeField","tag","substring","includes","pairs","fieldGetOccurrenceNumberPairs","pairedField","fieldSevenToOneOccurrenceNumber","getIdentifierlessAndKeeplessSubsets","fieldAsString","identifierlessString","keeplessString","deriveIndividualDeletables490","match","sixless","withoutFinalVOrX","xless","xvless","modifiedInd2","deriveIndividualDeletables","map","fieldToString","deletableStringsArray","processTodoList","inferiorTerms","getInferiorTerms","uniqArray","inputFields","result","flatMap","fieldToInferiorFields","aArray","value","thingsToDo","currString","accentless","getAccentlessVersion","d490","subsets","moreToDo","tmp","tmp1","tmp2","getPrepublicationTerms","newDeletables","string","precomposeFinnishLetters","String","fixComposition","fieldToNormalizedString","normalizedField","cloneAndNormalizeFieldForComparison","deriveIndividualNormalizedDeletables","encodingLevel","getEncodingLevel","recordIsFinished","encodingLevelIsBetterThanPrepublication","met495","fieldRefersToKoneellisestiTuotettuTietue","relevantFields","fieldHasSubfield","deriveDeletable946s","results","fieldAsNormalizedString","candArray","removeIndividualInferiorDatafields","deletableFieldsAsStrings","deletableFieldsAsNormalizedStrings","hits","isDeletableField","deletedFieldsAsStrings","removables","removables6","join","removablesAll","concat"],"sources":["../src/removeInferiorDataFields.js"],"sourcesContent":["import createDebugLogger from 'debug';\nimport {fieldToChain, sameField} from './removeDuplicateDataFields';\nimport {fieldGetOccurrenceNumberPairs, fieldHasValidSubfield6, fieldSevenToOneOccurrenceNumber, fieldsToNormalizedString} from './subfield6Utils';\nimport {fieldHasSubfield, fieldsToString, fieldToString, nvdebug, uniqArray} from './utils';\nimport {fieldHasValidSubfield8} from './subfield8Utils';\nimport {encodingLevelIsBetterThanPrepublication, fieldRefersToKoneellisestiTuotettuTietue, getEncodingLevel} from './prepublicationUtils';\nimport {cloneAndNormalizeFieldForComparison} from './normalizeFieldForComparison';\nimport {fixComposition, precomposeFinnishLetters} from './normalize-utf8-diacritics';\n\n// Relocated from melinda-marc-record-merge-reducers (and renamed)\n\n// NB! This validator handles only full fields, and does not support subfield $8 removal.\n// Also, having multiple $8 subfields in same fields is not supported.\n// If this functionality is needed, see removeDuplicateDatafields.js for examples of subfield-only stuff.\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:removeInferiorDataFields');\n\nexport default function () {\n return {\n description: 'Remove subset data fields. Certain exceptions apply, mainly too complicated for chained fields',\n validate, fix\n };\n\n function fix(record) {\n nvdebug('Fix record: remove inferior (eg. subset) data fields', debug);\n const res = {message: [], fix: [], valid: true};\n removeInferiorDatafields(record, true);\n // This can not really fail...\n return res;\n }\n\n function validate(record) {\n // Check max, and check number of different indexes\n nvdebug('Validate record: remove inferior (eg. subset) data fields', debug);\n\n const duplicates = removeInferiorDatafields(record, false);\n\n const res = {message: duplicates};\n\n res.valid = res.message.length < 1; // eslint-disable-line functional/immutable-data\n return res;\n }\n}\n\n\nfunction deriveInferiorChains(fields, record) {\n //nvdebug(`======= GOT ${fields.length} FIELDS TO CHAINIFY`);\n const hash = {};\n\n fields.forEach(f => fieldToChainToDeletables(f));\n\n return hash;\n\n //nvdebug(`WP1: GOT ${todoList.length} CHAINS`);\n\n\n // here we map deletableStringObject[str] => field. The idea is to help debugging. We don't actually need the field object...\n //return deriveChainDeletables(todoList);\n\n function fieldToChainToDeletables(field) {\n const chain = fieldToChain(field, record);\n if (chain.length < 2) {\n return;\n }\n const chainAsString = fieldsToNormalizedString(chain, 0, true, true);\n const arr = deriveChainDeletables([chainAsString]);\n //nvdebug(`GOT ${arr.length} DELETABLES FOR ${chainAsString}`);\n arr.forEach(val => {\n if (!(val in hash)) { // eslint-disable-line functional/no-conditional-statements\n hash[val] = field; // eslint-disable-line functional/immutable-data\n }\n });\n }\n\n function deriveChainDeletables(todoList, deletables = []) {\n const [chainAsString, ...stillToDo] = todoList;\n if (chainAsString === undefined) {\n return deletables;\n }\n\n // Fix MRA-476 (part 1): one $6 value can be worse than the other\n const withoutScriptIdentificationCode = chainAsString.replace(/( ‡6 [0-9X][0-9][0-9]-(?:XX|[0-9]+))\\/[^ ]+/u, '$1'); // eslint-disable-line prefer-named-capture-group\n\n // Remove keepless versions:\n const keepless = chainAsString.replace(/ ‡9 [A-Z]+<KEEP>/u, '');\n\n // MRA-433: 490 ind1=1 vs ind1=0: remove latter (luckily no 2nd indicator etc)\n const linked490Ind1 = chainAsString.replace(/^490 1/u, '490 0').replace(/\\t880 1/ug, '\\t880 0');\n const arr = [withoutScriptIdentificationCode, keepless, linked490Ind1].filter(val => val !== chainAsString);\n if (arr.length > 0) {\n return deriveChainDeletables([...stillToDo, ...arr], [...deletables, ...arr]);\n }\n\n return deriveChainDeletables(stillToDo, deletables);\n }\n\n}\n\nfunction isRelevantChain6(field, record) {\n //Can't be a chain:\n if (!fieldHasValidSubfield6(field) && !fieldHasValidSubfield8(field)) {\n return false;\n }\n // Too short to be a chain:\n const chain = fieldToChain(field, record);\n if (chain.length < 2) {\n return false;\n }\n // No field can contains no more than one subfield $6\n if (chain.some(f => f.subfields.filter(sf => sf.code === '6').length > 1)) {\n return false;\n }\n\n // Check whether our field is the head of a chain:\n return sameField(field, chain[0]);\n}\n\nexport function removeInferiorChains(record, fix = true) {\n const fields = record.fields.filter(f => isRelevantChain6(f, record));\n //nvdebug(`WP2.0: GOT ${fields.length} chain(s)`);\n\n const deletableChainsAsKeys = deriveInferiorChains(fields, record);\n const nChains = Object.keys(deletableChainsAsKeys).length;\n //nvdebug(`WP2: GOT ${nChains} chain(s)`);\n if (nChains === 0) {\n return [];\n }\n\n //nvdebug(`removeInferiorChains() has ${fields.length} fields-in-chain(s), and a list of ${nChains} deletable(s)`);\n\n return innerRemoveInferiorChains(fields);\n\n function innerRemoveInferiorChains(fields, deletedStringsArray = []) {\n const [currField, ...remainingFields] = fields;\n\n if (currField === undefined) {\n return deletedStringsArray;\n }\n\n const chain = fieldToChain(currField, record);\n if (chain.length === 0 || !sameField(currField, chain[0])) {\n return innerRemoveInferiorChains(remainingFields, deletedStringsArray);\n }\n\n const chainAsString = fieldsToNormalizedString(chain, 0, true, true);\n if (!(chainAsString in deletableChainsAsKeys)) {\n return innerRemoveInferiorChains(remainingFields, deletedStringsArray);\n }\n\n const triggeringField = deletableChainsAsKeys[chainAsString];\n const triggeringChain = fieldToChain(triggeringField, record);\n\n // If the inferior (deletable) chain is 1XX-based, convert the triggering better chain from 7XX to 1XX:\n if (chainContains1XX(chain)) { // eslint-disable-line functional/no-conditional-statements\n triggeringChain.forEach(f => sevenToOne(f, triggeringChain));\n }\n //nvdebug(`iRIS6C: ${chainAsString}`);\n const deletedString = fieldsToString(chain);\n const message = `DEL: '${deletedString}' REASON: '${fieldsToString(triggeringChain)}'`;\n if (fix) { // eslint-disable-line functional/no-conditional-statements\n //nvdebug(`INFERIOR $6 CHAIN REMOVAL: ${message}}`, debug);\n chain.forEach(field => record.removeField(field));\n }\n return innerRemoveInferiorChains(remainingFields, [...deletedStringsArray, message]);\n }\n\n function chainContains1XX(chain) {\n return chain.some(f => f.tag.substring(0, 1) === '1');\n }\n\n function sevenToOne(field, chain) { // Change 7XX field to 1XX field. Also handle the corresponding 880$6 7XX-NN subfields\n // NB! This function should be called only if the original 1XX gets deleted!\n if (!['700', '710', '711', '730'].includes(field.tag)) {\n return;\n }\n // Retag field 7XX as 1XX and fix corresponding occurrence numbers as well:\n const pairs = fieldGetOccurrenceNumberPairs(field, chain);\n field.tag = `1${field.tag.substring(1)}`; // eslint-disable-line functional/immutable-data\n // There should always be one pair, but I'm not sanity-checking this\n pairs.forEach(pairedField => fieldSevenToOneOccurrenceNumber(pairedField));\n }\n\n}\n\n\nfunction getIdentifierlessAndKeeplessSubsets(fieldAsString) {\n // The rules below are not perfect (in complex cases they don't catch all permutations), but good enough:\n // Remove identifier(s) (MELKEHITYS-2383-ish):\n\n const identifierlessString = fieldAsString.replace(/ ‡[01] [^‡]+($| ‡)/u, '$1'); // eslint-disable-line prefer-named-capture-group\n const keeplessString = fieldAsString.replace(/ ‡9 [A-Z]+<KEEP>/u, '');\n\n return [identifierlessString, keeplessString].filter(val => val !== fieldAsString);\n}\n\nfunction deriveIndividualDeletables490(todoList, deletables = []) {\n const [fieldAsString, ...stillToDo] = todoList;\n if (fieldAsString === undefined) {\n return deletables;\n }\n //nvdebug(`PROCESS ${fieldAsString}`);\n if (!fieldAsString.match(/^490/u)) {\n return deriveIndividualDeletables490(stillToDo, deletables);\n }\n\n // $6-less version (keep this first)\n const sixless = fieldAsString.replace(/ ‡6 [^‡]+ ‡/u, ' ‡');\n\n // Without final $v or $x:\n const withoutFinalVOrX = fieldAsString.replace(/ *[;,] ‡[vx] [^‡]+$/u, '');\n // Add intermediate $x-less version\n const xless = fieldAsString.replace(/, ‡x [^‡]+(, ‡x| ; ‡v)/u, '$1'); // eslint-disable-line prefer-named-capture-group\n\n // Add $xv-less version (handled by recursion?)\n const xvless = fieldAsString.replace(/, ‡x [^‡]+ ‡v [^‡]+$/u, '');\n\n // MRA-433-ish (non-chain): 490 ind1=1 vs ind1=0: remove latter\n const modifiedInd2 = fieldAsString.match(/^490 1/u) ? `490 0${fieldAsString.substring(5)}` : fieldAsString;\n\n const arr = [sixless, withoutFinalVOrX, xless, xvless, modifiedInd2].filter(val => val !== fieldAsString);\n\n /*\n if (arr.length) { // eslint-disable-line functional/no-conditional-statements\n nvdebug(`${arr.length} derivation(s) for ${fieldAsString}`);\n nvdebug(arr.join('\\n'));\n }\n */\n return arr;\n}\n\nfunction deriveIndividualDeletables(record) {\n const todoList = record.fields.map(f => fieldToString(f));\n //const finishedRecord = encodingLevelIsBetterThanPrepublication(getEncodingLevel(record));\n\n const deletableStringsArray = processTodoList(todoList);\n\n const inferiorTerms = getInferiorTerms(record);\n\n return uniqArray([...deletableStringsArray, ...inferiorTerms]);\n\n function getInferiorTerms(record) {\n const inputFields = record.fields.filter(f => ['648', '650', '651'].includes(f.tag) && f.subfields);\n const result = inputFields.flatMap(f => fieldToInferiorFields(f));\n\n // console.log(result.join('\\n')); // eslint-disable-line no-console\n return result;\n }\n\n function fieldToInferiorFields(field) {\n const aArray = field.subfields.filter(sf => sf.code === 'a');\n if (field.tag === '650') {\n return aArray.flatMap(sf => [`653 ## ‡a ${sf.value}`, `653 #0 ‡a ${sf.value}`]);\n }\n return aArray.map(sf => `653 ## ‡a ${sf.value}`);\n }\n\n function processTodoList(thingsToDo, deletables = []) {\n const [currString, ...stillToDo] = thingsToDo;\n\n if (currString === undefined) {\n return deletables;\n }\n\n const accentless = getAccentlessVersion(currString);\n const d490 = deriveIndividualDeletables490([currString]);\n const subsets = getIdentifierlessAndKeeplessSubsets(currString); // eslint-disable-line no-param-reassign\n const moreToDo = [...accentless, ...d490, ...subsets];\n\n\n if (currString.match(/^[1678]00/u)) {\n // Proof-of-concept rule. Should be improved eventually...\n if (currString.match(/, ‡e [^‡]+\\.$/u)) {\n const tmp = currString.replace(/, ‡e [^‡]+\\.$/u, '.');\n return processTodoList([tmp, ...stillToDo, ...moreToDo], [...deletables, tmp]);\n }\n }\n\n if (currString.match(/^500 ## ‡a Lisäpainokset: Lisäpainos /u)) { // MET-569\n const tmp1 = currString.replace(' Lisäpainos ', ' [Lisäpainos] ');\n const tmp2 = currString.replace(' Lisäpainos ', ' ');\n if (tmp1 !== currString && tmp2 !== currString) {\n return processTodoList([...stillToDo, ...moreToDo], [...deletables, tmp1, tmp2]);\n }\n }\n\n if (currString.match(/^500 ## ‡a Lisäpainokset: \\[Lisäpainos\\] /u)) { // MET-569\n const tmp = currString.replace(' [Lisäpainos] ', ' ');\n if (tmp !== currString) {\n return processTodoList([...stillToDo, ...moreToDo], [...deletables, tmp]);\n }\n }\n\n if (currString.match(/^505 .0.*-- ‡t/u)) { // MRA-413-ish\n const tmp = currString.replace(/ -- ‡t /gu, ' -- '). // remove non-initial $t subfields\n replace(/ ‡[rg] /gu, ' '). // remove $r and $g subfields\n replace(/ ‡t /u, ' ‡a '). // change first $t to $a\n // ind2: '1' => '#':\n replace(/^505 (.)0/u, '505 $1#'); // eslint-disable-line prefer-named-capture-group\n if (tmp !== currString) {\n return processTodoList([tmp, ...stillToDo, ...moreToDo], [...deletables, tmp]);\n }\n //nvdebug(`505 ORIGINAL: '${fieldAsString}'`)\n //nvdebug(`505 DERIVATE: '${tmp}'`)\n }\n\n // MET-381: remove occurence number TAG-00, if TAG-NN existists\n if (currString.match(/^880.* ‡6 [0-9][0-9][0-9]-(?:[1-9][0-9]|0[1-9])/u)) {\n const tmp = currString.replace(/( ‡6 [0-9][0-9][0-9])-[0-9]+/u, '$1-00'); // eslint-disable-line prefer-named-capture-group\n //nvdebug(`MET-381: ADD TO DELETABLES: '${tmp}'`);\n //deletableStringsArray.push(tmp);\n if (tmp.match(/ ‡6 [0-9][0-9][0-9]-00\\/[^ ]+ /u)) {\n const tmp2 = tmp.replace(/( ‡6 [0-9][0-9][0-9]-00)[^ ]+/u, '$1'); // eslint-disable-line prefer-named-capture-group\n //nvdebug(`MET-381: ADD TO DELETABLES: '${tmp2}'`);\n return processTodoList([...stillToDo, ...moreToDo], [...deletables, tmp, tmp2]);\n }\n return processTodoList([...stillToDo, ...moreToDo], [...deletables, tmp]);\n }\n\n // MET-575 (merge: applies in postprocessing)\n const inferiorTerms = getPrepublicationTerms(currString);\n\n const newDeletables = [...deletables, ...subsets, ...accentless, ...d490, ...inferiorTerms];\n\n if (subsets.length) {\n return processTodoList([...stillToDo, ...moreToDo], newDeletables);\n }\n\n return processTodoList([...stillToDo, ...moreToDo], newDeletables);\n }\n\n function getAccentlessVersion(string) { // MET-527\n //nvdebug(`START: '${string}`);\n // This is a sanity check: if precomposition does something, there's something wrong, and we don't want to proceed..\n if (string !== precomposeFinnishLetters(string)) {\n return [];\n }\n const accentless = String(fixComposition(string)).replace(/\\p{Diacritic}/gu, '');\n //nvdebug(`FROM '${string}'\\n TO '${accentless}'`);\n if (accentless === string) { // Don't self-destruct\n return [];\n }\n return [accentless];\n }\n\n function getPrepublicationTerms(fieldAsString) {\n if (fieldAsString.match(/^653./u)) {\n // MET-528 (extented by MET-575)\n return [`${fieldAsString} ‡g ENNAKKOTIETO`, `${fieldAsString} ‡g Ennakkotieto`, `${fieldAsString} ‡g ennakkotieto`, `${fieldAsString} ‡g ENNAKKOTIETO.`, `${fieldAsString} ‡g Ennakkotieto.`, `${fieldAsString} ‡g ennakkotieto.`];\n }\n\n return [];\n }\n\n}\n\nfunction fieldToNormalizedString(field) {\n const normalizedField = cloneAndNormalizeFieldForComparison(field);\n return fieldToString(normalizedField);\n}\n\nfunction deriveIndividualNormalizedDeletables(record) { // MET-461:\n const encodingLevel = getEncodingLevel(record);\n const recordIsFinished = encodingLevelIsBetterThanPrepublication(encodingLevel);\n const met495 = encodingLevel === '2' && record.fields.some(f => f.tag === '500' && fieldRefersToKoneellisestiTuotettuTietue(f));\n if (!recordIsFinished || met495) {\n return [];\n }\n const relevantFields = record.fields.filter(f => ['245', '246'].includes(f.tag) && fieldHasSubfield(f, 'a'));\n\n return deriveDeletable946s(relevantFields);\n\n function deriveDeletable946s(fields, results = []) {\n const [currField, ...remainingFields] = fields;\n if (currField === undefined) {\n return results;\n }\n\n const fieldAsNormalizedString = fieldToNormalizedString(currField);\n const tmp = fieldAsNormalizedString.replace(/^(?:...) ../u, '946 ##'). // <= Change tag to 946 and indicators to '##'\n replace(' ‡a ', ' ‡i nimeke onixissa ‡a '). // Add $i before $a. NB! This is added in the normalized lower-cased form!\n replace(/(?: \\/)? ‡c[^‡]+$/u, ''); // Remove $c. (Can $c be non-last?)\n const candArray = [tmp, `${tmp} ‡5 MELINDA`].filter(val => val !== fieldAsNormalizedString);\n if (candArray.length) {\n return deriveDeletable946s(remainingFields, [...results, ...candArray]);\n }\n return deriveDeletable946s(remainingFields, results);\n }\n}\n\nexport function removeIndividualInferiorDatafields(record, fix = true) { // No $6 nor $8 in field\n const deletableFieldsAsStrings = deriveIndividualDeletables(record);\n const deletableFieldsAsNormalizedStrings = deriveIndividualNormalizedDeletables(record);\n\n // nvdebug(`Deletables:\\n ${deletableFieldsAsStrings.join('\\n ')}`);\n // nvdebug(`Normalized deletables:\\n ${deletableFieldsAsNormalizedStrings.join('\\n ')}`);\n\n const hits = record.fields.filter(field => isDeletableField(field));\n\n const deletedFieldsAsStrings = hits.map(f => fieldToString(f));\n\n if (fix) { // eslint-disable-line functional/no-conditional-statements\n hits.forEach(field => {\n //nvdebug(`Remove inferior field: ${fieldToString(field)}`, debug);\n record.removeField(field);\n });\n }\n\n return deletedFieldsAsStrings;\n\n function isDeletableField(field) {\n const fieldAsString = fieldToString(field);\n if (deletableFieldsAsStrings.includes(fieldAsString)) {\n return true;\n }\n const fieldAsNormalizedString = fieldToNormalizedString(field);\n if (deletableFieldsAsNormalizedStrings.includes(fieldAsNormalizedString)) {\n return true;\n }\n\n return false;\n }\n}\n\n\nexport function removeInferiorDatafields(record, fix = true) {\n const removables = removeIndividualInferiorDatafields(record, fix); // Lone fields\n //const removables8 = removeDuplicateSubfield8Chains(record, fix); // Lone subfield $8 chains\n const removables6 = removeInferiorChains(record, fix); // Lone subfield $6 chains\n // HOW TO HANDLE $6+$8 combos? Skipping is relatively OK.\n\n nvdebug(`REMOVABLES:\\n ${removables.join('\\n ')}`, debug);\n nvdebug(`REMOVABLES 6:\\n ${removables6.join('\\n ')}`, debug);\n\n const removablesAll = removables.concat(removables6); //.concat(removables8);\n\n return removablesAll;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"removeInferiorDataFields.js","names":["_debug","_interopRequireDefault","require","_removeDuplicateDataFields","_subfield6Utils","_utils","_subfield8Utils","_prepublicationUtils","_normalizeFieldForComparison","_normalizeUtf8Diacritics","e","__esModule","default","debug","createDebugLogger","_default","description","validate","fix","record","nvdebug","res","message","valid","removeInferiorDatafields","duplicates","length","deriveInferiorChains","fields","hash","forEach","f","fieldToChainToDeletables","field","chain","fieldToChain","chainAsString","fieldsToNormalizedString","arr","deriveChainDeletables","val","todoList","deletables","stillToDo","undefined","withoutScriptIdentificationCode","replace","keepless","linked490Ind1","filter","isRelevantChain6","fieldHasValidSubfield6","fieldHasValidSubfield8","some","subfields","sf","code","sameField","removeInferiorChains","deletableChainsAsKeys","nChains","Object","keys","innerRemoveInferiorChains","deletedStringsArray","currField","remainingFields","triggeringField","triggeringChain","chainContains1XX","sevenToOne","deletedString","fieldsToString","removeField","tag","substring","includes","pairs","fieldGetOccurrenceNumberPairs","pairedField","fieldSevenToOneOccurrenceNumber","getIdentifierlessAndKeeplessSubsets","fieldAsString","identifierlessString","keeplessString","deriveIndividualDeletables490","match","sixless","withoutFinalVOrX","xless","xvless","modifiedInd2","deriveIndividualDeletables","map","fieldToString","deletableStringsArray","processTodoList","inferiorTerms","getInferiorTerms","uniqArray","inputFields","result","flatMap","fieldToInferiorFields","aArray","value","thingsToDo","currString","accentless","getAccentlessVersion","d490","subsets","moreToDo","tmp","tmp1","tmp2","getPrepublicationTerms","newDeletables","string","precomposeFinnishLetters","String","fixComposition","fieldToNormalizedString","normalizedField","cloneAndNormalizeFieldForComparison","deriveIndividualNormalizedDeletables","encodingLevel","getEncodingLevel","recordIsFinished","encodingLevelIsBetterThanPrepublication","met495","fieldRefersToKoneellisestiTuotettuTietue","relevantFields","fieldHasSubfield","deriveDeletable946s","results","fieldAsNormalizedString","candArray","removeIndividualInferiorDatafields","deletableFieldsAsStrings","deletableFieldsAsNormalizedStrings","hits","isDeletableField","deletedFieldsAsStrings","removables","removables6","join","removablesAll","concat"],"sources":["../src/removeInferiorDataFields.js"],"sourcesContent":["import createDebugLogger from 'debug';\nimport {fieldToChain, sameField} from './removeDuplicateDataFields';\nimport {fieldGetOccurrenceNumberPairs, fieldHasValidSubfield6, fieldSevenToOneOccurrenceNumber, fieldsToNormalizedString} from './subfield6Utils';\nimport {fieldHasSubfield, fieldsToString, fieldToString, nvdebug, uniqArray} from './utils';\nimport {fieldHasValidSubfield8} from './subfield8Utils';\nimport {encodingLevelIsBetterThanPrepublication, fieldRefersToKoneellisestiTuotettuTietue, getEncodingLevel} from './prepublicationUtils';\nimport {cloneAndNormalizeFieldForComparison} from './normalizeFieldForComparison';\nimport {fixComposition, precomposeFinnishLetters} from './normalize-utf8-diacritics';\n\n// Relocated from melinda-marc-record-merge-reducers (and renamed)\n\n// NB! This validator handles only full fields, and does not support subfield $8 removal.\n// Also, having multiple $8 subfields in same fields is not supported.\n// If this functionality is needed, see removeDuplicateDatafields.js for examples of subfield-only stuff.\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:removeInferiorDataFields');\n\nexport default function () {\n return {\n description: 'Remove subset data fields. Certain exceptions apply, mainly too complicated for chained fields',\n validate, fix\n };\n\n function fix(record) {\n nvdebug('Fix record: remove inferior (eg. subset) data fields', debug);\n const res = {message: [], fix: [], valid: true};\n removeInferiorDatafields(record, true);\n // This can not really fail...\n return res;\n }\n\n function validate(record) {\n // Check max, and check number of different indexes\n nvdebug('Validate record: remove inferior (eg. subset) data fields', debug);\n\n const duplicates = removeInferiorDatafields(record, false);\n\n const res = {message: duplicates};\n\n res.valid = res.message.length < 1; // eslint-disable-line functional/immutable-data\n return res;\n }\n}\n\n\nfunction deriveInferiorChains(fields, record) {\n //nvdebug(`======= GOT ${fields.length} FIELDS TO CHAINIFY`);\n const hash = {};\n\n fields.forEach(f => fieldToChainToDeletables(f));\n\n return hash;\n\n //nvdebug(`WP1: GOT ${todoList.length} CHAINS`);\n\n\n // here we map deletableStringObject[str] => field. The idea is to help debugging. We don't actually need the field object...\n //return deriveChainDeletables(todoList);\n\n function fieldToChainToDeletables(field) {\n const chain = fieldToChain(field, record);\n if (chain.length < 2) {\n return;\n }\n const chainAsString = fieldsToNormalizedString(chain, 0, true, true);\n const arr = deriveChainDeletables([chainAsString]);\n //nvdebug(`GOT ${arr.length} DELETABLES FOR ${chainAsString}`);\n arr.forEach(val => {\n if (!(val in hash)) { // eslint-disable-line functional/no-conditional-statements\n hash[val] = field; // eslint-disable-line functional/immutable-data\n }\n });\n }\n\n function deriveChainDeletables(todoList, deletables = []) {\n const [chainAsString, ...stillToDo] = todoList;\n if (chainAsString === undefined) {\n return deletables;\n }\n\n // Fix MRA-476 (part 1): one $6 value can be worse than the other\n const withoutScriptIdentificationCode = chainAsString.replace(/( ‡6 [0-9X][0-9][0-9]-(?:XX|[0-9]+))\\/[^ ]+/u, '$1'); // eslint-disable-line prefer-named-capture-group\n\n // Remove keepless versions:\n const keepless = chainAsString.replace(/ ‡9 [A-Z]+<KEEP>/u, '');\n\n // MRA-433: 490 ind1=1 vs ind1=0: remove latter (luckily no 2nd indicator etc)\n const linked490Ind1 = chainAsString.replace(/^490 1/u, '490 0').replace(/\\t880 1/ug, '\\t880 0');\n const arr = [withoutScriptIdentificationCode, keepless, linked490Ind1].filter(val => val !== chainAsString);\n if (arr.length > 0) {\n return deriveChainDeletables([...stillToDo, ...arr], [...deletables, ...arr]);\n }\n\n return deriveChainDeletables(stillToDo, deletables);\n }\n\n}\n\nfunction isRelevantChain6(field, record) {\n //Can't be a chain:\n if (!fieldHasValidSubfield6(field) && !fieldHasValidSubfield8(field)) {\n return false;\n }\n // Too short to be a chain:\n const chain = fieldToChain(field, record);\n if (chain.length < 2) {\n return false;\n }\n // No field can contains no more than one subfield $6\n if (chain.some(f => f.subfields.filter(sf => sf.code === '6').length > 1)) {\n return false;\n }\n\n // Check whether our field is the head of a chain:\n return sameField(field, chain[0]);\n}\n\nexport function removeInferiorChains(record, fix = true) {\n const fields = record.fields.filter(f => isRelevantChain6(f, record));\n //nvdebug(`WP2.0: GOT ${fields.length} chain(s)`);\n\n const deletableChainsAsKeys = deriveInferiorChains(fields, record);\n const nChains = Object.keys(deletableChainsAsKeys).length;\n //nvdebug(`WP2: GOT ${nChains} chain(s)`);\n if (nChains === 0) {\n return [];\n }\n\n //nvdebug(`removeInferiorChains() has ${fields.length} fields-in-chain(s), and a list of ${nChains} deletable(s)`);\n\n return innerRemoveInferiorChains(fields);\n\n function innerRemoveInferiorChains(fields, deletedStringsArray = []) {\n const [currField, ...remainingFields] = fields;\n\n if (currField === undefined) {\n return deletedStringsArray;\n }\n\n const chain = fieldToChain(currField, record);\n if (chain.length === 0 || !sameField(currField, chain[0])) {\n return innerRemoveInferiorChains(remainingFields, deletedStringsArray);\n }\n\n const chainAsString = fieldsToNormalizedString(chain, 0, true, true);\n if (!(chainAsString in deletableChainsAsKeys)) {\n return innerRemoveInferiorChains(remainingFields, deletedStringsArray);\n }\n\n const triggeringField = deletableChainsAsKeys[chainAsString];\n const triggeringChain = fieldToChain(triggeringField, record);\n\n // If the inferior (deletable) chain is 1XX-based, convert the triggering better chain from 7XX to 1XX:\n if (chainContains1XX(chain)) { // eslint-disable-line functional/no-conditional-statements\n triggeringChain.forEach(f => sevenToOne(f, triggeringChain));\n }\n //nvdebug(`iRIS6C: ${chainAsString}`);\n const deletedString = fieldsToString(chain);\n const message = `DEL: '${deletedString}' REASON: '${fieldsToString(triggeringChain)}'`;\n if (fix) { // eslint-disable-line functional/no-conditional-statements\n //nvdebug(`INFERIOR $6 CHAIN REMOVAL: ${message}}`, debug);\n chain.forEach(field => record.removeField(field));\n }\n return innerRemoveInferiorChains(remainingFields, [...deletedStringsArray, message]);\n }\n\n function chainContains1XX(chain) {\n return chain.some(f => f.tag.substring(0, 1) === '1');\n }\n\n function sevenToOne(field, chain) { // Change 7XX field to 1XX field. Also handle the corresponding 880$6 7XX-NN subfields\n // NB! This function should be called only if the original 1XX gets deleted!\n if (!['700', '710', '711', '730'].includes(field.tag)) {\n return;\n }\n // Retag field 7XX as 1XX and fix corresponding occurrence numbers as well:\n const pairs = fieldGetOccurrenceNumberPairs(field, chain);\n field.tag = `1${field.tag.substring(1)}`; // eslint-disable-line functional/immutable-data\n // There should always be one pair, but I'm not sanity-checking this\n pairs.forEach(pairedField => fieldSevenToOneOccurrenceNumber(pairedField));\n }\n\n}\n\n\nfunction getIdentifierlessAndKeeplessSubsets(fieldAsString) {\n // The rules below are not perfect (in complex cases they don't catch all permutations), but good enough:\n // Remove identifier(s) (MELKEHITYS-2383-ish):\n\n const identifierlessString = fieldAsString.replace(/ ‡[01] [^‡]+($| ‡)/u, '$1'); // eslint-disable-line prefer-named-capture-group\n const keeplessString = fieldAsString.replace(/ ‡9 [A-Z]+<KEEP>/u, '');\n\n return [identifierlessString, keeplessString].filter(val => val !== fieldAsString);\n}\n\nfunction deriveIndividualDeletables490(todoList, deletables = []) {\n const [fieldAsString, ...stillToDo] = todoList;\n if (fieldAsString === undefined) {\n return deletables;\n }\n //nvdebug(`PROCESS ${fieldAsString}`);\n if (!fieldAsString.match(/^490/u)) {\n return deriveIndividualDeletables490(stillToDo, deletables);\n }\n\n // $6-less version (keep this first)\n const sixless = fieldAsString.replace(/ ‡6 [^‡]+ ‡/u, ' ‡');\n\n // Without final $v or $x:\n const withoutFinalVOrX = fieldAsString.replace(/ *[;,] ‡[vx] [^‡]+$/u, '');\n // Add intermediate $x-less version\n const xless = fieldAsString.replace(/, ‡x [^‡]+(, ‡x| ; ‡v)/u, '$1'); // eslint-disable-line prefer-named-capture-group\n\n // Add $xv-less version (handled by recursion?)\n const xvless = fieldAsString.replace(/, ‡x [^‡]+ ‡v [^‡]+$/u, '');\n\n // MRA-433-ish (non-chain): 490 ind1=1 vs ind1=0: remove latter\n const modifiedInd2 = fieldAsString.match(/^490 1/u) ? `490 0${fieldAsString.substring(5)}` : fieldAsString;\n\n const arr = [sixless, withoutFinalVOrX, xless, xvless, modifiedInd2].filter(val => val !== fieldAsString);\n\n /*\n if (arr.length) { // eslint-disable-line functional/no-conditional-statements\n nvdebug(`${arr.length} derivation(s) for ${fieldAsString}`);\n nvdebug(arr.join('\\n'));\n }\n */\n return arr;\n}\n\nfunction deriveIndividualDeletables(record) {\n const todoList = record.fields.map(f => fieldToString(f));\n //const finishedRecord = encodingLevelIsBetterThanPrepublication(getEncodingLevel(record));\n\n const deletableStringsArray = processTodoList(todoList);\n\n const inferiorTerms = getInferiorTerms(record);\n\n return uniqArray([...deletableStringsArray, ...inferiorTerms]);\n\n function getInferiorTerms(record) {\n const inputFields = record.fields.filter(f => ['648', '650', '651'].includes(f.tag) && f.subfields);\n const result = inputFields.flatMap(f => fieldToInferiorFields(f));\n\n // console.log(result.join('\\n')); // eslint-disable-line no-console\n return result;\n }\n\n function fieldToInferiorFields(field) {\n const aArray = field.subfields.filter(sf => sf.code === 'a');\n if (field.tag === '650') {\n return aArray.flatMap(sf => [`653 ## ‡a ${sf.value}`, `653 #0 ‡a ${sf.value}`]);\n }\n return aArray.map(sf => `653 ## ‡a ${sf.value}`);\n }\n\n function processTodoList(thingsToDo, deletables = []) {\n const [currString, ...stillToDo] = thingsToDo;\n\n if (currString === undefined) {\n return deletables;\n }\n\n const accentless = getAccentlessVersion(currString);\n const d490 = deriveIndividualDeletables490([currString]);\n const subsets = getIdentifierlessAndKeeplessSubsets(currString); // eslint-disable-line no-param-reassign\n const moreToDo = [...accentless, ...d490, ...subsets];\n\n\n if (currString.match(/^[1678]00/u)) {\n // Proof-of-concept rule. Should be improved eventually...\n if (currString.match(/, ‡e [^‡]+\\.$/u)) {\n const tmp = currString.replace(/, ‡e [^‡]+\\.$/u, '.');\n return processTodoList([tmp, ...stillToDo, ...moreToDo], [...deletables, tmp]);\n }\n }\n\n if (currString.match(/^500 ## ‡a Lisäpainokset: Lisäpainos /u)) { // MET-569\n const tmp1 = currString.replace(' Lisäpainos ', ' [Lisäpainos] ');\n const tmp2 = currString.replace(' Lisäpainos ', ' ');\n if (tmp1 !== currString && tmp2 !== currString) {\n return processTodoList([...stillToDo, ...moreToDo], [...deletables, tmp1, tmp2]);\n }\n }\n\n if (currString.match(/^500 ## ‡a Lisäpainokset: \\[Lisäpainos\\] /u)) { // MET-569\n const tmp = currString.replace(' [Lisäpainos] ', ' ');\n if (tmp !== currString) {\n return processTodoList([...stillToDo, ...moreToDo], [...deletables, tmp]);\n }\n }\n\n if (currString.match(/^500 ## ‡a Ei vastaanotettu\\.$/u)) { // MELKEHITYS-3147\n return processTodoList([...stillToDo, ...moreToDo], [...deletables, '500 ## ‡a EI VASTAANOTETTU.']);\n }\n if (currString.match(/^500 ## ‡a Ei ilmesty\\.$/u)) { // MELKEHITYS-3147\n return processTodoList([...stillToDo, ...moreToDo], [...deletables, '500 ## ‡a EI ILMESTY.']);\n }\n\n if (currString.match(/^505 .0.*-- ‡t/u)) { // MRA-413-ish\n const tmp = currString.replace(/ -- ‡t /gu, ' -- '). // remove non-initial $t subfields\n replace(/ ‡[rg] /gu, ' '). // remove $r and $g subfields\n replace(/ ‡t /u, ' ‡a '). // change first $t to $a\n // ind2: '1' => '#':\n replace(/^505 (.)0/u, '505 $1#'); // eslint-disable-line prefer-named-capture-group\n if (tmp !== currString) {\n return processTodoList([tmp, ...stillToDo, ...moreToDo], [...deletables, tmp]);\n }\n //nvdebug(`505 ORIGINAL: '${fieldAsString}'`)\n //nvdebug(`505 DERIVATE: '${tmp}'`)\n }\n\n if (currString.match(/^594 ## ‡a Ei vastaanotettu ‡5 FENNI$/u)) { // MELKEHITYS-3147\n return processTodoList([...stillToDo, ...moreToDo], [...deletables, '594 ## ‡a EI VASTAANOTETTU ‡5 FENNI']);\n }\n if (currString.match(/^594 ## ‡a Ei ilmesty ‡5 FENNI$/u)) { // MELKEHITYS-3147\n return processTodoList([...stillToDo, ...moreToDo], [...deletables, '594 ## ‡a EI ILMESTY ‡5 FENNI']);\n }\n\n // MET-381: remove occurence number TAG-00, if TAG-NN existists\n if (currString.match(/^880.* ‡6 [0-9][0-9][0-9]-(?:[1-9][0-9]|0[1-9])/u)) {\n const tmp = currString.replace(/( ‡6 [0-9][0-9][0-9])-[0-9]+/u, '$1-00'); // eslint-disable-line prefer-named-capture-group\n //nvdebug(`MET-381: ADD TO DELETABLES: '${tmp}'`);\n //deletableStringsArray.push(tmp);\n if (tmp.match(/ ‡6 [0-9][0-9][0-9]-00\\/[^ ]+ /u)) {\n const tmp2 = tmp.replace(/( ‡6 [0-9][0-9][0-9]-00)[^ ]+/u, '$1'); // eslint-disable-line prefer-named-capture-group\n //nvdebug(`MET-381: ADD TO DELETABLES: '${tmp2}'`);\n return processTodoList([...stillToDo, ...moreToDo], [...deletables, tmp, tmp2]);\n }\n return processTodoList([...stillToDo, ...moreToDo], [...deletables, tmp]);\n }\n\n // MET-575 (merge: applies in postprocessing)\n const inferiorTerms = getPrepublicationTerms(currString);\n\n const newDeletables = [...deletables, ...subsets, ...accentless, ...d490, ...inferiorTerms];\n\n if (subsets.length) {\n return processTodoList([...stillToDo, ...moreToDo], newDeletables);\n }\n\n return processTodoList([...stillToDo, ...moreToDo], newDeletables);\n }\n\n function getAccentlessVersion(string) { // MET-527\n //nvdebug(`START: '${string}`);\n // This is a sanity check: if precomposition does something, there's something wrong, and we don't want to proceed..\n if (string !== precomposeFinnishLetters(string)) {\n return [];\n }\n const accentless = String(fixComposition(string)).replace(/\\p{Diacritic}/gu, '');\n //nvdebug(`FROM '${string}'\\n TO '${accentless}'`);\n if (accentless === string) { // Don't self-destruct\n return [];\n }\n return [accentless];\n }\n\n function getPrepublicationTerms(fieldAsString) {\n if (fieldAsString.match(/^653./u)) {\n // MET-528 (extented by MET-575)\n return [`${fieldAsString} ‡g ENNAKKOTIETO`, `${fieldAsString} ‡g Ennakkotieto`, `${fieldAsString} ‡g ennakkotieto`, `${fieldAsString} ‡g ENNAKKOTIETO.`, `${fieldAsString} ‡g Ennakkotieto.`, `${fieldAsString} ‡g ennakkotieto.`];\n }\n\n return [];\n }\n\n}\n\nfunction fieldToNormalizedString(field) {\n const normalizedField = cloneAndNormalizeFieldForComparison(field);\n return fieldToString(normalizedField);\n}\n\nfunction deriveIndividualNormalizedDeletables(record) { // MET-461:\n const encodingLevel = getEncodingLevel(record);\n const recordIsFinished = encodingLevelIsBetterThanPrepublication(encodingLevel);\n const met495 = encodingLevel === '2' && record.fields.some(f => f.tag === '500' && fieldRefersToKoneellisestiTuotettuTietue(f));\n if (!recordIsFinished || met495) {\n return [];\n }\n const relevantFields = record.fields.filter(f => ['245', '246'].includes(f.tag) && fieldHasSubfield(f, 'a'));\n\n return deriveDeletable946s(relevantFields);\n\n function deriveDeletable946s(fields, results = []) {\n const [currField, ...remainingFields] = fields;\n if (currField === undefined) {\n return results;\n }\n\n const fieldAsNormalizedString = fieldToNormalizedString(currField);\n const tmp = fieldAsNormalizedString.replace(/^(?:...) ../u, '946 ##'). // <= Change tag to 946 and indicators to '##'\n replace(' ‡a ', ' ‡i nimeke onixissa ‡a '). // Add $i before $a. NB! This is added in the normalized lower-cased form!\n replace(/(?: \\/)? ‡c[^‡]+$/u, ''); // Remove $c. (Can $c be non-last?)\n const candArray = [tmp, `${tmp} ‡5 MELINDA`].filter(val => val !== fieldAsNormalizedString);\n if (candArray.length) {\n return deriveDeletable946s(remainingFields, [...results, ...candArray]);\n }\n return deriveDeletable946s(remainingFields, results);\n }\n}\n\nexport function removeIndividualInferiorDatafields(record, fix = true) { // No $6 nor $8 in field\n const deletableFieldsAsStrings = deriveIndividualDeletables(record);\n const deletableFieldsAsNormalizedStrings = deriveIndividualNormalizedDeletables(record);\n\n // nvdebug(`Deletables:\\n ${deletableFieldsAsStrings.join('\\n ')}`);\n // nvdebug(`Normalized deletables:\\n ${deletableFieldsAsNormalizedStrings.join('\\n ')}`);\n\n const hits = record.fields.filter(field => isDeletableField(field));\n\n const deletedFieldsAsStrings = hits.map(f => fieldToString(f));\n\n if (fix) { // eslint-disable-line functional/no-conditional-statements\n hits.forEach(field => {\n //nvdebug(`Remove inferior field: ${fieldToString(field)}`, debug);\n record.removeField(field);\n });\n }\n\n return deletedFieldsAsStrings;\n\n function isDeletableField(field) {\n const fieldAsString = fieldToString(field);\n if (deletableFieldsAsStrings.includes(fieldAsString)) {\n return true;\n }\n const fieldAsNormalizedString = fieldToNormalizedString(field);\n if (deletableFieldsAsNormalizedStrings.includes(fieldAsNormalizedString)) {\n return true;\n }\n\n return false;\n }\n}\n\n\nexport function removeInferiorDatafields(record, fix = true) {\n const removables = removeIndividualInferiorDatafields(record, fix); // Lone fields\n //const removables8 = removeDuplicateSubfield8Chains(record, fix); // Lone subfield $8 chains\n const removables6 = removeInferiorChains(record, fix); // Lone subfield $6 chains\n // HOW TO HANDLE $6+$8 combos? Skipping is relatively OK.\n\n nvdebug(`REMOVABLES:\\n ${removables.join('\\n ')}`, debug);\n nvdebug(`REMOVABLES 6:\\n ${removables6.join('\\n ')}`, debug);\n\n const removablesAll = removables.concat(removables6); //.concat(removables8);\n\n return removablesAll;\n}\n"],"mappings":";;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,0BAAA,GAAAD,OAAA;AACA,IAAAE,eAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AACA,IAAAI,eAAA,GAAAJ,OAAA;AACA,IAAAK,oBAAA,GAAAL,OAAA;AACA,IAAAM,4BAAA,GAAAN,OAAA;AACA,IAAAO,wBAAA,GAAAP,OAAA;AAAqF,SAAAD,uBAAAS,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAErF;;AAEA;AACA;AACA;AACA,MAAMG,KAAK,GAAG,IAAAC,cAAiB,EAAC,mEAAmE,CAAC;AAErF,SAAAC,SAAA,EAAY;EACzB,OAAO;IACLC,WAAW,EAAE,gGAAgG;IAC7GC,QAAQ;IAAEC;EACZ,CAAC;EAED,SAASA,GAAGA,CAACC,MAAM,EAAE;IACnB,IAAAC,cAAO,EAAC,sDAAsD,EAAEP,KAAK,CAAC;IACtE,MAAMQ,GAAG,GAAG;MAACC,OAAO,EAAE,EAAE;MAAEJ,GAAG,EAAE,EAAE;MAAEK,KAAK,EAAE;IAAI,CAAC;IAC/CC,wBAAwB,CAACL,MAAM,EAAE,IAAI,CAAC;IACtC;IACA,OAAOE,GAAG;EACZ;EAEA,SAASJ,QAAQA,CAACE,MAAM,EAAE;IACxB;IACA,IAAAC,cAAO,EAAC,2DAA2D,EAAEP,KAAK,CAAC;IAE3E,MAAMY,UAAU,GAAGD,wBAAwB,CAACL,MAAM,EAAE,KAAK,CAAC;IAE1D,MAAME,GAAG,GAAG;MAACC,OAAO,EAAEG;IAAU,CAAC;IAEjCJ,GAAG,CAACE,KAAK,GAAGF,GAAG,CAACC,OAAO,CAACI,MAAM,GAAG,CAAC,CAAC,CAAC;IACpC,OAAOL,GAAG;EACZ;AACF;AAGA,SAASM,oBAAoBA,CAACC,MAAM,EAAET,MAAM,EAAE;EAC5C;EACA,MAAMU,IAAI,GAAG,CAAC,CAAC;EAEfD,MAAM,CAACE,OAAO,CAACC,CAAC,IAAIC,wBAAwB,CAACD,CAAC,CAAC,CAAC;EAEhD,OAAOF,IAAI;;EAEX;;EAGA;EACA;;EAEA,SAASG,wBAAwBA,CAACC,KAAK,EAAE;IACvC,MAAMC,KAAK,GAAG,IAAAC,uCAAY,EAACF,KAAK,EAAEd,MAAM,CAAC;IACzC,IAAIe,KAAK,CAACR,MAAM,GAAG,CAAC,EAAE;MACpB;IACF;IACA,MAAMU,aAAa,GAAG,IAAAC,wCAAwB,EAACH,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;IACpE,MAAMI,GAAG,GAAGC,qBAAqB,CAAC,CAACH,aAAa,CAAC,CAAC;IAClD;IACAE,GAAG,CAACR,OAAO,CAACU,GAAG,IAAI;MACjB,IAAI,EAAEA,GAAG,IAAIX,IAAI,CAAC,EAAE;QAAE;QACpBA,IAAI,CAACW,GAAG,CAAC,GAAGP,KAAK,CAAC,CAAC;MACrB;IACF,CAAC,CAAC;EACJ;EAEA,SAASM,qBAAqBA,CAACE,QAAQ,EAAEC,UAAU,GAAG,EAAE,EAAE;IACxD,MAAM,CAACN,aAAa,EAAE,GAAGO,SAAS,CAAC,GAAGF,QAAQ;IAC9C,IAAIL,aAAa,KAAKQ,SAAS,EAAE;MAC/B,OAAOF,UAAU;IACnB;;IAEA;IACA,MAAMG,+BAA+B,GAAGT,aAAa,CAACU,OAAO,CAAC,8CAA8C,EAAE,IAAI,CAAC,CAAC,CAAC;;IAErH;IACA,MAAMC,QAAQ,GAAGX,aAAa,CAACU,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC;;IAE/D;IACA,MAAME,aAAa,GAAGZ,aAAa,CAACU,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAACA,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC;IAC/F,MAAMR,GAAG,GAAG,CAACO,+BAA+B,EAAEE,QAAQ,EAAEC,aAAa,CAAC,CAACC,MAAM,CAACT,GAAG,IAAIA,GAAG,KAAKJ,aAAa,CAAC;IAC3G,IAAIE,GAAG,CAACZ,MAAM,GAAG,CAAC,EAAE;MAClB,OAAOa,qBAAqB,CAAC,CAAC,GAAGI,SAAS,EAAE,GAAGL,GAAG,CAAC,EAAE,CAAC,GAAGI,UAAU,EAAE,GAAGJ,GAAG,CAAC,CAAC;IAC/E;IAEA,OAAOC,qBAAqB,CAACI,SAAS,EAAED,UAAU,CAAC;EACrD;AAEF;AAEA,SAASQ,gBAAgBA,CAACjB,KAAK,EAAEd,MAAM,EAAE;EACvC;EACA,IAAI,CAAC,IAAAgC,sCAAsB,EAAClB,KAAK,CAAC,IAAI,CAAC,IAAAmB,sCAAsB,EAACnB,KAAK,CAAC,EAAE;IACpE,OAAO,KAAK;EACd;EACA;EACA,MAAMC,KAAK,GAAG,IAAAC,uCAAY,EAACF,KAAK,EAAEd,MAAM,CAAC;EACzC,IAAIe,KAAK,CAACR,MAAM,GAAG,CAAC,EAAE;IACpB,OAAO,KAAK;EACd;EACA;EACA,IAAIQ,KAAK,CAACmB,IAAI,CAACtB,CAAC,IAAIA,CAAC,CAACuB,SAAS,CAACL,MAAM,CAACM,EAAE,IAAIA,EAAE,CAACC,IAAI,KAAK,GAAG,CAAC,CAAC9B,MAAM,GAAG,CAAC,CAAC,EAAE;IACzE,OAAO,KAAK;EACd;;EAEA;EACA,OAAO,IAAA+B,oCAAS,EAACxB,KAAK,EAAEC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC;AAEO,SAASwB,oBAAoBA,CAACvC,MAAM,EAAED,GAAG,GAAG,IAAI,EAAE;EACvD,MAAMU,MAAM,GAAGT,MAAM,CAACS,MAAM,CAACqB,MAAM,CAAClB,CAAC,IAAImB,gBAAgB,CAACnB,CAAC,EAAEZ,MAAM,CAAC,CAAC;EACrE;;EAEA,MAAMwC,qBAAqB,GAAGhC,oBAAoB,CAACC,MAAM,EAAET,MAAM,CAAC;EAClE,MAAMyC,OAAO,GAAGC,MAAM,CAACC,IAAI,CAACH,qBAAqB,CAAC,CAACjC,MAAM;EACzD;EACA,IAAIkC,OAAO,KAAK,CAAC,EAAE;IACjB,OAAO,EAAE;EACX;;EAEA;;EAEA,OAAOG,yBAAyB,CAACnC,MAAM,CAAC;EAExC,SAASmC,yBAAyBA,CAACnC,MAAM,EAAEoC,mBAAmB,GAAG,EAAE,EAAE;IACnE,MAAM,CAACC,SAAS,EAAE,GAAGC,eAAe,CAAC,GAAGtC,MAAM;IAE9C,IAAIqC,SAAS,KAAKrB,SAAS,EAAE;MAC3B,OAAOoB,mBAAmB;IAC5B;IAEA,MAAM9B,KAAK,GAAG,IAAAC,uCAAY,EAAC8B,SAAS,EAAE9C,MAAM,CAAC;IAC7C,IAAIe,KAAK,CAACR,MAAM,KAAK,CAAC,IAAI,CAAC,IAAA+B,oCAAS,EAACQ,SAAS,EAAE/B,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;MACzD,OAAO6B,yBAAyB,CAACG,eAAe,EAAEF,mBAAmB,CAAC;IACxE;IAEA,MAAM5B,aAAa,GAAG,IAAAC,wCAAwB,EAACH,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;IACpE,IAAI,EAAEE,aAAa,IAAIuB,qBAAqB,CAAC,EAAE;MAC7C,OAAOI,yBAAyB,CAACG,eAAe,EAAEF,mBAAmB,CAAC;IACxE;IAEA,MAAMG,eAAe,GAAGR,qBAAqB,CAACvB,aAAa,CAAC;IAC5D,MAAMgC,eAAe,GAAG,IAAAjC,uCAAY,EAACgC,eAAe,EAAEhD,MAAM,CAAC;;IAE7D;IACA,IAAIkD,gBAAgB,CAACnC,KAAK,CAAC,EAAE;MAAE;MAC7BkC,eAAe,CAACtC,OAAO,CAACC,CAAC,IAAIuC,UAAU,CAACvC,CAAC,EAAEqC,eAAe,CAAC,CAAC;IAC9D;IACA;IACA,MAAMG,aAAa,GAAG,IAAAC,qBAAc,EAACtC,KAAK,CAAC;IAC3C,MAAMZ,OAAO,GAAG,SAASiD,aAAa,eAAe,IAAAC,qBAAc,EAACJ,eAAe,CAAC,GAAG;IACvF,IAAIlD,GAAG,EAAE;MAAE;MACT;MACAgB,KAAK,CAACJ,OAAO,CAACG,KAAK,IAAId,MAAM,CAACsD,WAAW,CAACxC,KAAK,CAAC,CAAC;IACnD;IACA,OAAO8B,yBAAyB,CAACG,eAAe,EAAE,CAAC,GAAGF,mBAAmB,EAAE1C,OAAO,CAAC,CAAC;EACtF;EAEA,SAAS+C,gBAAgBA,CAACnC,KAAK,EAAE;IAC/B,OAAOA,KAAK,CAACmB,IAAI,CAACtB,CAAC,IAAIA,CAAC,CAAC2C,GAAG,CAACC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC;EACvD;EAEA,SAASL,UAAUA,CAACrC,KAAK,EAAEC,KAAK,EAAE;IAAE;IAClC;IACA,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC0C,QAAQ,CAAC3C,KAAK,CAACyC,GAAG,CAAC,EAAE;MACrD;IACF;IACA;IACA,MAAMG,KAAK,GAAG,IAAAC,6CAA6B,EAAC7C,KAAK,EAAEC,KAAK,CAAC;IACzDD,KAAK,CAACyC,GAAG,GAAG,IAAIzC,KAAK,CAACyC,GAAG,CAACC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1C;IACAE,KAAK,CAAC/C,OAAO,CAACiD,WAAW,IAAI,IAAAC,+CAA+B,EAACD,WAAW,CAAC,CAAC;EAC5E;AAEF;AAGA,SAASE,mCAAmCA,CAACC,aAAa,EAAE;EAC1D;EACA;;EAEA,MAAMC,oBAAoB,GAAGD,aAAa,CAACpC,OAAO,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC,CAAC;EACjF,MAAMsC,cAAc,GAAGF,aAAa,CAACpC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC;EAErE,OAAO,CAACqC,oBAAoB,EAAEC,cAAc,CAAC,CAACnC,MAAM,CAACT,GAAG,IAAIA,GAAG,KAAK0C,aAAa,CAAC;AACpF;AAEA,SAASG,6BAA6BA,CAAC5C,QAAQ,EAAEC,UAAU,GAAG,EAAE,EAAE;EAChE,MAAM,CAACwC,aAAa,EAAE,GAAGvC,SAAS,CAAC,GAAGF,QAAQ;EAC9C,IAAIyC,aAAa,KAAKtC,SAAS,EAAE;IAC/B,OAAOF,UAAU;EACnB;EACA;EACA,IAAI,CAACwC,aAAa,CAACI,KAAK,CAAC,OAAO,CAAC,EAAE;IACjC,OAAOD,6BAA6B,CAAC1C,SAAS,EAAED,UAAU,CAAC;EAC7D;;EAEA;EACA,MAAM6C,OAAO,GAAGL,aAAa,CAACpC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;;EAE3D;EACA,MAAM0C,gBAAgB,GAAGN,aAAa,CAACpC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC;EAC1E;EACA,MAAM2C,KAAK,GAAGP,aAAa,CAACpC,OAAO,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC,CAAC;;EAEtE;EACA,MAAM4C,MAAM,GAAGR,aAAa,CAACpC,OAAO,CAAC,uBAAuB,EAAE,EAAE,CAAC;;EAEjE;EACA,MAAM6C,YAAY,GAAGT,aAAa,CAACI,KAAK,CAAC,SAAS,CAAC,GAAG,QAAQJ,aAAa,CAACP,SAAS,CAAC,CAAC,CAAC,EAAE,GAAGO,aAAa;EAE1G,MAAM5C,GAAG,GAAG,CAACiD,OAAO,EAAEC,gBAAgB,EAAEC,KAAK,EAAEC,MAAM,EAAEC,YAAY,CAAC,CAAC1C,MAAM,CAACT,GAAG,IAAIA,GAAG,KAAK0C,aAAa,CAAC;;EAEzG;AACF;AACA;AACA;AACA;AACA;EACE,OAAO5C,GAAG;AACZ;AAEA,SAASsD,0BAA0BA,CAACzE,MAAM,EAAE;EAC1C,MAAMsB,QAAQ,GAAGtB,MAAM,CAACS,MAAM,CAACiE,GAAG,CAAC9D,CAAC,IAAI,IAAA+D,oBAAa,EAAC/D,CAAC,CAAC,CAAC;EACzD;;EAEA,MAAMgE,qBAAqB,GAAGC,eAAe,CAACvD,QAAQ,CAAC;EAEvD,MAAMwD,aAAa,GAAGC,gBAAgB,CAAC/E,MAAM,CAAC;EAE9C,OAAO,IAAAgF,gBAAS,EAAC,CAAC,GAAGJ,qBAAqB,EAAE,GAAGE,aAAa,CAAC,CAAC;EAE9D,SAASC,gBAAgBA,CAAC/E,MAAM,EAAE;IAChC,MAAMiF,WAAW,GAAGjF,MAAM,CAACS,MAAM,CAACqB,MAAM,CAAClB,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC6C,QAAQ,CAAC7C,CAAC,CAAC2C,GAAG,CAAC,IAAI3C,CAAC,CAACuB,SAAS,CAAC;IACnG,MAAM+C,MAAM,GAAGD,WAAW,CAACE,OAAO,CAACvE,CAAC,IAAIwE,qBAAqB,CAACxE,CAAC,CAAC,CAAC;;IAEjE;IACA,OAAOsE,MAAM;EACf;EAEA,SAASE,qBAAqBA,CAACtE,KAAK,EAAE;IACpC,MAAMuE,MAAM,GAAGvE,KAAK,CAACqB,SAAS,CAACL,MAAM,CAACM,EAAE,IAAIA,EAAE,CAACC,IAAI,KAAK,GAAG,CAAC;IAC5D,IAAIvB,KAAK,CAACyC,GAAG,KAAK,KAAK,EAAE;MACvB,OAAO8B,MAAM,CAACF,OAAO,CAAC/C,EAAE,IAAI,CAAC,aAAaA,EAAE,CAACkD,KAAK,EAAE,EAAE,aAAalD,EAAE,CAACkD,KAAK,EAAE,CAAC,CAAC;IACjF;IACA,OAAOD,MAAM,CAACX,GAAG,CAACtC,EAAE,IAAI,aAAaA,EAAE,CAACkD,KAAK,EAAE,CAAC;EAClD;EAEA,SAAST,eAAeA,CAACU,UAAU,EAAEhE,UAAU,GAAG,EAAE,EAAE;IACpD,MAAM,CAACiE,UAAU,EAAE,GAAGhE,SAAS,CAAC,GAAG+D,UAAU;IAE7C,IAAIC,UAAU,KAAK/D,SAAS,EAAE;MAC5B,OAAOF,UAAU;IACnB;IAEA,MAAMkE,UAAU,GAAGC,oBAAoB,CAACF,UAAU,CAAC;IACnD,MAAMG,IAAI,GAAGzB,6BAA6B,CAAC,CAACsB,UAAU,CAAC,CAAC;IACxD,MAAMI,OAAO,GAAG9B,mCAAmC,CAAC0B,UAAU,CAAC,CAAC,CAAC;IACjE,MAAMK,QAAQ,GAAG,CAAC,GAAGJ,UAAU,EAAE,GAAGE,IAAI,EAAE,GAAGC,OAAO,CAAC;IAGrD,IAAIJ,UAAU,CAACrB,KAAK,CAAC,YAAY,CAAC,EAAE;MAClC;MACA,IAAIqB,UAAU,CAACrB,KAAK,CAAC,gBAAgB,CAAC,EAAE;QACtC,MAAM2B,GAAG,GAAGN,UAAU,CAAC7D,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;QACrD,OAAOkD,eAAe,CAAC,CAACiB,GAAG,EAAE,GAAGtE,SAAS,EAAE,GAAGqE,QAAQ,CAAC,EAAE,CAAC,GAAGtE,UAAU,EAAEuE,GAAG,CAAC,CAAC;MAChF;IACF;IAEA,IAAIN,UAAU,CAACrB,KAAK,CAAC,wCAAwC,CAAC,EAAE;MAAE;MAChE,MAAM4B,IAAI,GAAGP,UAAU,CAAC7D,OAAO,CAAC,cAAc,EAAE,gBAAgB,CAAC;MACjE,MAAMqE,IAAI,GAAGR,UAAU,CAAC7D,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC;MACpD,IAAIoE,IAAI,KAAKP,UAAU,IAAIQ,IAAI,KAAKR,UAAU,EAAE;QAC9C,OAAOX,eAAe,CAAC,CAAC,GAAGrD,SAAS,EAAE,GAAGqE,QAAQ,CAAC,EAAE,CAAC,GAAGtE,UAAU,EAAEwE,IAAI,EAAEC,IAAI,CAAC,CAAC;MAClF;IACF;IAEA,IAAIR,UAAU,CAACrB,KAAK,CAAC,4CAA4C,CAAC,EAAE;MAAE;MACpE,MAAM2B,GAAG,GAAGN,UAAU,CAAC7D,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;MACrD,IAAImE,GAAG,KAAKN,UAAU,EAAE;QACtB,OAAOX,eAAe,CAAC,CAAC,GAAGrD,SAAS,EAAE,GAAGqE,QAAQ,CAAC,EAAE,CAAC,GAAGtE,UAAU,EAAEuE,GAAG,CAAC,CAAC;MAC3E;IACF;IAEA,IAAIN,UAAU,CAACrB,KAAK,CAAC,iCAAiC,CAAC,EAAE;MAAE;MACzD,OAAOU,eAAe,CAAC,CAAC,GAAGrD,SAAS,EAAE,GAAGqE,QAAQ,CAAC,EAAE,CAAC,GAAGtE,UAAU,EAAE,6BAA6B,CAAC,CAAC;IACrG;IACA,IAAIiE,UAAU,CAACrB,KAAK,CAAC,2BAA2B,CAAC,EAAE;MAAE;MACnD,OAAOU,eAAe,CAAC,CAAC,GAAGrD,SAAS,EAAE,GAAGqE,QAAQ,CAAC,EAAE,CAAC,GAAGtE,UAAU,EAAE,uBAAuB,CAAC,CAAC;IAC/F;IAEA,IAAIiE,UAAU,CAACrB,KAAK,CAAC,iBAAiB,CAAC,EAAE;MAAE;MACzC,MAAM2B,GAAG,GAAGN,UAAU,CAAC7D,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC;MAAE;MACnDA,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC;MAAE;MAC3BA,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC;MAAE;MAC1B;MACAA,OAAO,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC;MACpC,IAAImE,GAAG,KAAKN,UAAU,EAAE;QACtB,OAAOX,eAAe,CAAC,CAACiB,GAAG,EAAE,GAAGtE,SAAS,EAAE,GAAGqE,QAAQ,CAAC,EAAE,CAAC,GAAGtE,UAAU,EAAEuE,GAAG,CAAC,CAAC;MAChF;MACA;MACA;IACF;IAEA,IAAIN,UAAU,CAACrB,KAAK,CAAC,wCAAwC,CAAC,EAAE;MAAE;MAChE,OAAOU,eAAe,CAAC,CAAC,GAAGrD,SAAS,EAAE,GAAGqE,QAAQ,CAAC,EAAE,CAAC,GAAGtE,UAAU,EAAE,qCAAqC,CAAC,CAAC;IAC7G;IACA,IAAIiE,UAAU,CAACrB,KAAK,CAAC,kCAAkC,CAAC,EAAE;MAAE;MAC1D,OAAOU,eAAe,CAAC,CAAC,GAAGrD,SAAS,EAAE,GAAGqE,QAAQ,CAAC,EAAE,CAAC,GAAGtE,UAAU,EAAE,+BAA+B,CAAC,CAAC;IACvG;;IAEA;IACA,IAAIiE,UAAU,CAACrB,KAAK,CAAC,kDAAkD,CAAC,EAAE;MACxE,MAAM2B,GAAG,GAAGN,UAAU,CAAC7D,OAAO,CAAC,+BAA+B,EAAE,OAAO,CAAC,CAAC,CAAC;MAC1E;MACA;MACA,IAAImE,GAAG,CAAC3B,KAAK,CAAC,iCAAiC,CAAC,EAAE;QAChD,MAAM6B,IAAI,GAAGF,GAAG,CAACnE,OAAO,CAAC,gCAAgC,EAAE,IAAI,CAAC,CAAC,CAAC;QAClE;QACA,OAAOkD,eAAe,CAAC,CAAC,GAAGrD,SAAS,EAAE,GAAGqE,QAAQ,CAAC,EAAE,CAAC,GAAGtE,UAAU,EAAEuE,GAAG,EAAEE,IAAI,CAAC,CAAC;MACjF;MACA,OAAOnB,eAAe,CAAC,CAAC,GAAGrD,SAAS,EAAE,GAAGqE,QAAQ,CAAC,EAAE,CAAC,GAAGtE,UAAU,EAAEuE,GAAG,CAAC,CAAC;IAC3E;;IAEA;IACA,MAAMhB,aAAa,GAAGmB,sBAAsB,CAACT,UAAU,CAAC;IAExD,MAAMU,aAAa,GAAG,CAAC,GAAG3E,UAAU,EAAE,GAAGqE,OAAO,EAAE,GAAGH,UAAU,EAAE,GAAGE,IAAI,EAAE,GAAGb,aAAa,CAAC;IAE3F,IAAIc,OAAO,CAACrF,MAAM,EAAE;MAClB,OAAOsE,eAAe,CAAC,CAAC,GAAGrD,SAAS,EAAE,GAAGqE,QAAQ,CAAC,EAAEK,aAAa,CAAC;IACpE;IAEA,OAAOrB,eAAe,CAAC,CAAC,GAAGrD,SAAS,EAAE,GAAGqE,QAAQ,CAAC,EAAEK,aAAa,CAAC;EACpE;EAEA,SAASR,oBAAoBA,CAACS,MAAM,EAAE;IAAE;IACtC;IACA;IACA,IAAIA,MAAM,KAAK,IAAAC,iDAAwB,EAACD,MAAM,CAAC,EAAE;MAC/C,OAAO,EAAE;IACX;IACA,MAAMV,UAAU,GAAGY,MAAM,CAAC,IAAAC,uCAAc,EAACH,MAAM,CAAC,CAAC,CAACxE,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;IAChF;IACA,IAAI8D,UAAU,KAAKU,MAAM,EAAE;MAAE;MAC3B,OAAO,EAAE;IACX;IACA,OAAO,CAACV,UAAU,CAAC;EACrB;EAEA,SAASQ,sBAAsBA,CAAClC,aAAa,EAAE;IAC7C,IAAIA,aAAa,CAACI,KAAK,CAAC,QAAQ,CAAC,EAAE;MACjC;MACA,OAAO,CAAC,GAAGJ,aAAa,kBAAkB,EAAE,GAAGA,aAAa,kBAAkB,EAAE,GAAGA,aAAa,kBAAkB,EAAE,GAAGA,aAAa,mBAAmB,EAAE,GAAGA,aAAa,mBAAmB,EAAE,GAAGA,aAAa,mBAAmB,CAAC;IACpO;IAEA,OAAO,EAAE;EACX;AAEF;AAEA,SAASwC,uBAAuBA,CAACzF,KAAK,EAAE;EACtC,MAAM0F,eAAe,GAAG,IAAAC,gEAAmC,EAAC3F,KAAK,CAAC;EAClE,OAAO,IAAA6D,oBAAa,EAAC6B,eAAe,CAAC;AACvC;AAEA,SAASE,oCAAoCA,CAAC1G,MAAM,EAAE;EAAE;EACtD,MAAM2G,aAAa,GAAG,IAAAC,qCAAgB,EAAC5G,MAAM,CAAC;EAC9C,MAAM6G,gBAAgB,GAAG,IAAAC,4DAAuC,EAACH,aAAa,CAAC;EAC/E,MAAMI,MAAM,GAAGJ,aAAa,KAAK,GAAG,IAAI3G,MAAM,CAACS,MAAM,CAACyB,IAAI,CAACtB,CAAC,IAAIA,CAAC,CAAC2C,GAAG,KAAK,KAAK,IAAI,IAAAyD,6DAAwC,EAACpG,CAAC,CAAC,CAAC;EAC/H,IAAI,CAACiG,gBAAgB,IAAIE,MAAM,EAAE;IAC/B,OAAO,EAAE;EACX;EACA,MAAME,cAAc,GAAGjH,MAAM,CAACS,MAAM,CAACqB,MAAM,CAAClB,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC6C,QAAQ,CAAC7C,CAAC,CAAC2C,GAAG,CAAC,IAAI,IAAA2D,uBAAgB,EAACtG,CAAC,EAAE,GAAG,CAAC,CAAC;EAE5G,OAAOuG,mBAAmB,CAACF,cAAc,CAAC;EAE1C,SAASE,mBAAmBA,CAAC1G,MAAM,EAAE2G,OAAO,GAAG,EAAE,EAAE;IACjD,MAAM,CAACtE,SAAS,EAAE,GAAGC,eAAe,CAAC,GAAGtC,MAAM;IAC9C,IAAIqC,SAAS,KAAKrB,SAAS,EAAE;MAC3B,OAAO2F,OAAO;IAChB;IAEA,MAAMC,uBAAuB,GAAGd,uBAAuB,CAACzD,SAAS,CAAC;IAClE,MAAMgD,GAAG,GAAGuB,uBAAuB,CAAC1F,OAAO,CAAC,cAAc,EAAE,QAAQ,CAAC;IAAE;IACrEA,OAAO,CAAC,MAAM,EAAE,yBAAyB,CAAC;IAAE;IAC5CA,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC,CAAC;IACrC,MAAM2F,SAAS,GAAG,CAACxB,GAAG,EAAE,GAAGA,GAAG,aAAa,CAAC,CAAChE,MAAM,CAACT,GAAG,IAAIA,GAAG,KAAKgG,uBAAuB,CAAC;IAC3F,IAAIC,SAAS,CAAC/G,MAAM,EAAE;MACpB,OAAO4G,mBAAmB,CAACpE,eAAe,EAAE,CAAC,GAAGqE,OAAO,EAAE,GAAGE,SAAS,CAAC,CAAC;IACzE;IACA,OAAOH,mBAAmB,CAACpE,eAAe,EAAEqE,OAAO,CAAC;EACtD;AACF;AAEO,SAASG,kCAAkCA,CAACvH,MAAM,EAAED,GAAG,GAAG,IAAI,EAAE;EAAE;EACvE,MAAMyH,wBAAwB,GAAG/C,0BAA0B,CAACzE,MAAM,CAAC;EACnE,MAAMyH,kCAAkC,GAAGf,oCAAoC,CAAC1G,MAAM,CAAC;;EAEvF;EACA;;EAEA,MAAM0H,IAAI,GAAG1H,MAAM,CAACS,MAAM,CAACqB,MAAM,CAAChB,KAAK,IAAI6G,gBAAgB,CAAC7G,KAAK,CAAC,CAAC;EAEnE,MAAM8G,sBAAsB,GAAGF,IAAI,CAAChD,GAAG,CAAC9D,CAAC,IAAI,IAAA+D,oBAAa,EAAC/D,CAAC,CAAC,CAAC;EAE9D,IAAIb,GAAG,EAAE;IAAE;IACT2H,IAAI,CAAC/G,OAAO,CAACG,KAAK,IAAI;MACpB;MACAd,MAAM,CAACsD,WAAW,CAACxC,KAAK,CAAC;IAC3B,CAAC,CAAC;EACJ;EAEA,OAAO8G,sBAAsB;EAE7B,SAASD,gBAAgBA,CAAC7G,KAAK,EAAE;IAC/B,MAAMiD,aAAa,GAAG,IAAAY,oBAAa,EAAC7D,KAAK,CAAC;IAC1C,IAAI0G,wBAAwB,CAAC/D,QAAQ,CAACM,aAAa,CAAC,EAAE;MACpD,OAAO,IAAI;IACb;IACA,MAAMsD,uBAAuB,GAAGd,uBAAuB,CAACzF,KAAK,CAAC;IAC9D,IAAI2G,kCAAkC,CAAChE,QAAQ,CAAC4D,uBAAuB,CAAC,EAAE;MACxE,OAAO,IAAI;IACb;IAEA,OAAO,KAAK;EACd;AACF;AAGO,SAAShH,wBAAwBA,CAACL,MAAM,EAAED,GAAG,GAAG,IAAI,EAAE;EAC3D,MAAM8H,UAAU,GAAGN,kCAAkC,CAACvH,MAAM,EAAED,GAAG,CAAC,CAAC,CAAC;EACpE;EACA,MAAM+H,WAAW,GAAGvF,oBAAoB,CAACvC,MAAM,EAAED,GAAG,CAAC,CAAC,CAAC;EACvD;;EAEA,IAAAE,cAAO,EAAC,kBAAkB4H,UAAU,CAACE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAErI,KAAK,CAAC;EAC3D,IAAAO,cAAO,EAAC,oBAAoB6H,WAAW,CAACC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAErI,KAAK,CAAC;EAE9D,MAAMsI,aAAa,GAAGH,UAAU,CAACI,MAAM,CAACH,WAAW,CAAC,CAAC,CAAC;;EAEtD,OAAOE,aAAa;AACtB","ignoreList":[]}
|
package/dist/sortFields.js
CHANGED
|
@@ -70,6 +70,7 @@ const relatorTermScore = {
|
|
|
70
70
|
'soitonoppaan tekijä': 100,
|
|
71
71
|
'kartantekijä': 99,
|
|
72
72
|
'taiteilija': 98,
|
|
73
|
+
'designer': 90,
|
|
73
74
|
'sanoittaja': 90,
|
|
74
75
|
'käsikirjoittaja': 90,
|
|
75
76
|
'kuvaaja': 89,
|
|
@@ -98,6 +99,7 @@ const relatorTermScore = {
|
|
|
98
99
|
'lukija': 61,
|
|
99
100
|
'kertoja': 61,
|
|
100
101
|
// Manifestation level: https://finto.fi/mts/fi/page/m491
|
|
102
|
+
'graafinen suunnittelija': 50,
|
|
101
103
|
'kustantaja': 41
|
|
102
104
|
// Item level: https://finto.fi/mts/fi/page/m1157
|
|
103
105
|
};
|
|
@@ -111,13 +113,14 @@ const relatorTermScoreBk = {
|
|
|
111
113
|
'kuvaaja': 98,
|
|
112
114
|
'valokuvaaja': 98,
|
|
113
115
|
'kokoaja': 86,
|
|
116
|
+
'designer': 86,
|
|
114
117
|
'alkuperäisidean luoja': 85,
|
|
115
118
|
'teoksella kunnioitettu': 84,
|
|
116
119
|
'gratulaation kohde': 84,
|
|
117
|
-
'
|
|
118
|
-
'säveltäjä': 82,
|
|
120
|
+
'säveltäjä': 83,
|
|
119
121
|
// if 300$e has CD etc
|
|
120
|
-
'sanoittaja':
|
|
122
|
+
'sanoittaja': 82,
|
|
123
|
+
'julkaisija': 81,
|
|
121
124
|
// expression: https://finto.fi/mts/fi/page/m153
|
|
122
125
|
'kuvittaja': 80,
|
|
123
126
|
'esipuheen kirjoittaja': 79,
|
|
@@ -125,7 +128,9 @@ const relatorTermScoreBk = {
|
|
|
125
128
|
'loppusanojen kirjoittaja': 78,
|
|
126
129
|
'kääntäjä': 70,
|
|
127
130
|
'sovittaja': 50,
|
|
128
|
-
//
|
|
131
|
+
// manifestaatio
|
|
132
|
+
'graafinen suunnittelija': 40,
|
|
133
|
+
// kappale/item
|
|
129
134
|
'sitoja': 25,
|
|
130
135
|
'gratulaation kirjoittaja': 24
|
|
131
136
|
};
|
|
@@ -140,7 +145,13 @@ const relatorTermScoreMu = {
|
|
|
140
145
|
'johtaja': 78,
|
|
141
146
|
'esittäjä': 77,
|
|
142
147
|
'lukija': 76,
|
|
143
|
-
'miksaaja': 75
|
|
148
|
+
'miksaaja': 75,
|
|
149
|
+
// manifestaatio
|
|
150
|
+
'esittäjä (manifestaatio)': 69,
|
|
151
|
+
'graafinen suunnittelija': 50,
|
|
152
|
+
'valmistaja': 41,
|
|
153
|
+
'jakaja': 40
|
|
154
|
+
// kappale/item
|
|
144
155
|
};
|
|
145
156
|
const relatorTermScoreVm = {
|
|
146
157
|
// Visual Material
|
|
@@ -150,6 +161,7 @@ const relatorTermScoreVm = {
|
|
|
150
161
|
'author': 99,
|
|
151
162
|
// Here we assume that film/whatever is based on author's book
|
|
152
163
|
'käsikirjoittaja': 98,
|
|
164
|
+
'designer': 98,
|
|
153
165
|
'kuvaaja': 89,
|
|
154
166
|
'säveltäjä': 86,
|
|
155
167
|
// Volatile. John Williams?
|
|
@@ -163,8 +175,13 @@ const relatorTermScoreVm = {
|
|
|
163
175
|
'esittäjä': 77,
|
|
164
176
|
'lukija': 76,
|
|
165
177
|
'miksaaja': 75,
|
|
166
|
-
'kääntäjä': 70
|
|
178
|
+
'kääntäjä': 70,
|
|
167
179
|
// Manifestation
|
|
180
|
+
'kaivertaja': 60,
|
|
181
|
+
'graafinen suunnittelija': 59,
|
|
182
|
+
'kustantaja': 42,
|
|
183
|
+
'elokuvan jakelija': 41,
|
|
184
|
+
'jakaja': 41
|
|
168
185
|
|
|
169
186
|
// Item
|
|
170
187
|
};
|
|
@@ -193,7 +210,7 @@ function scoreRelatorTermVm(normalizedValue) {
|
|
|
193
210
|
return 0;
|
|
194
211
|
}
|
|
195
212
|
function scoreRelatorTerm(value, typeOfMaterial = undefined) {
|
|
196
|
-
// NB! We are currently using type of material only for sorting relator terms, not 7XX fields
|
|
213
|
+
// NB! We are currently using type of material only for sorting relator terms, not 7XX fields!!!
|
|
197
214
|
const normalizedValue = normalizeValue(value);
|
|
198
215
|
if (typeOfMaterial === 'BK') {
|
|
199
216
|
// Books
|
|
@@ -326,17 +343,17 @@ function sortByRelatorTerm(fieldA, fieldB) {
|
|
|
326
343
|
}
|
|
327
344
|
function fieldGetMaxRelatorTermScore(field) {
|
|
328
345
|
if (!field.subfields) {
|
|
329
|
-
return -
|
|
346
|
+
return -2;
|
|
330
347
|
}
|
|
331
348
|
// If field has $t, it's a teos-nimeke-auktoriteetti, and thus meaningless. These should follow all $t-less fields...
|
|
332
349
|
if ((0, _utils.fieldHasSubfield)(field, 't')) {
|
|
333
|
-
return -
|
|
350
|
+
return -2;
|
|
334
351
|
}
|
|
335
352
|
const relatorSubfieldCode = ['611', '711', '811'].includes(field.tag) ? 'j' : 'e';
|
|
336
353
|
const e = field.subfields.filter(sf => sf.code === relatorSubfieldCode);
|
|
337
354
|
if (e.length === 0) {
|
|
338
355
|
// No $e is still better than having a $t
|
|
339
|
-
return
|
|
356
|
+
return -1;
|
|
340
357
|
}
|
|
341
358
|
const scores = e.map(sf => scoreRelatorTerm(sf.value));
|
|
342
359
|
//debugDev(`RELATOR SCORE FOR '${fieldToString(field)}': ${scores.join(', ')}`);
|
package/dist/sortFields.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sortFields.js","names":["_clone","_interopRequireDefault","require","_utils","_marcFieldSort","_subfield8Utils","_subfield6Utils","e","__esModule","default","BIG_BAD_NUMBER","_default","description","validate","fix","record","res","message","valid","fields","sort","fieldOrderComparator","map","f","clone","relocatedFields","filter","i","fieldToString","length","push","relatorTermScore","relatorTermScoreBk","relatorTermScoreMu","relatorTermScoreVm","normalizeValue","value","replace","scoreRelatorTermBk","normalizedValue","scoreRelatorTermMu","scoreRelatorTermVm","scoreRelatorTerm","typeOfMaterial","undefined","fieldA","fieldB","sorterFunctions","sortByTag","sortByIndexTerms","sortAlphabetically","sortByRelatorTerm","sortByOccurrenceNumber","preferFenniKeep","sortByFieldLinkAndSequenceNumber","globalFieldOrderComparator","indexTermFields","scoreInd2","val","ind2Score","tag","includes","ind2","scoreDictionary","dictionary","dictionarySortIndex","dictionaryA","selectFirstValue","dictionaryB","dictScoreA","dictScoreB","preferKeep","keepOwner","hasKeepA","fieldHasSubfield","hasKeepB","fenniPreference","violaPreference","fieldGetMaxRelatorTermScore","field","subfields","relatorSubfieldCode","sf","code","scores","Math","max","scoreA","scoreB","fieldGetMinLinkAndSequenceNumber","relevantSubfields","isValidSubfield8","parseFloat","min","fieldGetOccurrenceNumber","subfield6","find","isValidSubfield6","parseInt","subfield6GetOccurrenceNumber","subcode","subfield","slice"],"sources":["../src/sortFields.js"],"sourcesContent":["// Taken from project marc-record-js, file marcSortFields.js as this contains more and more Melinda-specific rules.\n\nimport clone from 'clone';\n//import createDebugLogger from 'debug';\nimport {fieldHasSubfield, fieldToString} from './utils';\nimport {sortByTag, sortAlphabetically, fieldOrderComparator as globalFieldOrderComparator} from '@natlibfi/marc-record/dist/marcFieldSort';\nimport {isValidSubfield8} from './subfield8Utils';\nimport {isValidSubfield6, subfield6GetOccurrenceNumber} from './subfield6Utils';\n\n//const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:sortFields');\n//const debugData = debug.extend('data');\n//const debugDev = debug.extend('dev');\n\nconst BIG_BAD_NUMBER = 999999999;\nexport default function () {\n\n return {\n description: 'Sort fields using both generic and Melinda specific rules',\n validate, fix\n };\n\n function fix(record) {\n const res = {message: [], fix: [], valid: true};\n\n record.fields.sort(fieldOrderComparator); // eslint-disable-line functional/immutable-data\n\n return res;\n }\n\n function validate(record) {\n const res = {message: []};\n\n const fields = record.fields.map(f => clone(f));\n fields.sort(fieldOrderComparator); // eslint-disable-line functional/immutable-data\n\n\n const relocatedFields = fields.filter((f, i) => fieldToString(f) !== fieldToString(record.fields[i]));\n\n if (relocatedFields.length > 0) { // eslint-disable-line functional/no-conditional-statements\n res.message.push(`${relocatedFields.length} field(s) in new places`); // eslint-disable-line functional/immutable-data\n }\n\n res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data\n return res;\n }\n}\n\n\nconst relatorTermScore = { // Here bigger is better\n // NB! This is exportable as field internal $e sorting in marc-record-validators-js uses this.\n // NB! The more abstract, the earlier it appears.\n // Note that terms with same abstraction level might also have order preferences\n // We should 1) check the order of these, and 2) add translations (support Swedish at the very least)\n // work/teos > expression/ekspressio > manifestation/manifestaatin,\n // Work https://finto.fi/mts/fi/page/m1298\n 'säveltäjä': 100, 'composer': 100,\n 'kirjoittaja': 100, 'author': 100,\n 'libretisti': 100,\n 'sarjakuvantekijä': 100, 'soitonoppaan tekijä': 100,\n 'kartantekijä': 99,\n 'taiteilija': 98,\n 'sanoittaja': 90,\n 'käsikirjoittaja': 90,\n\n 'kuvaaja': 89, 'valokuvaaja': 89,\n 'kokoaja': 86,\n 'alkuperäisidean luoja': 85,\n 'teoksella kunnioitettu': 84, 'gratulaation kohde': 84,\n 'julkaisija': 82,\n 'tuottaja': 81,\n // expression: https://finto.fi/mts/fi/page/m153\n 'sovittaja': 79, 'arranger': 79,\n 'kuvittaja': 78,\n 'esipuheen kirjoittaja': 77,\n 'alkusanojen kirjoittaja': 76, 'loppusanojen kirjoittaja': 76,\n 'toimittaja': 75, 'editor': 75,\n 'esittäjä': 74,\n 'johtaja': 73, // orkesterinjohtaja\n 'editointi': 71, // for music, editor/toimittaja is another thing\n 'kääntäjä': 70,\n 'lukija': 61, 'kertoja': 61,\n // Manifestation level: https://finto.fi/mts/fi/page/m491\n 'kustantaja': 41\n // Item level: https://finto.fi/mts/fi/page/m1157\n};\n\nconst relatorTermScoreBk = {\n // https://finto.fi/mts/fi/page/m34 100-81\n 'libretisti': 100, 'sarjakuvantekijä': 100,\n 'kirjoittaja': 99, 'author': 99, 'soitonoppaan tekijä': 99,\n 'kuvaaja': 98, 'valokuvaaja': 98,\n 'kokoaja': 86,\n 'alkuperäisidean luoja': 85,\n 'teoksella kunnioitettu': 84, 'gratulaation kohde': 84,\n 'julkaisija': 83,\n 'säveltäjä': 82, // if 300$e has CD etc\n 'sanoittaja': 81,\n // expression: https://finto.fi/mts/fi/page/m153\n 'kuvittaja': 80,\n 'esipuheen kirjoittaja': 79,\n 'alkusanojen kirjoittaja': 78, 'loppusanojen kirjoittaja': 78,\n 'kääntäjä': 70,\n\n 'sovittaja': 50,\n // kappale\n 'sitoja': 25,\n 'gratulaation kirjoittaja': 24\n};\n\nconst relatorTermScoreMu = {\n 'säveltäjä': 100,\n 'sanoittaja': 99,\n 'soitonoppaan tekijä': 98,\n 'alkuperäisidean luoja': 85,\n 'teoksella kunnioitettu': 81,\n // expression: https://finto.fi/mts/fi/page/m153\n 'sovittaja': 79,\n 'johtaja': 78,\n 'esittäjä': 77,\n 'lukija': 76,\n 'miksaaja': 75\n};\n\nconst relatorTermScoreVm = { // Visual Material\n // Work\n 'ohjaaja': 100,\n 'kirjoittaja': 99, 'author': 99, // Here we assume that film/whatever is based on author's book\n 'käsikirjoittaja': 98,\n 'kuvaaja': 89,\n 'säveltäjä': 86, // Volatile. John Williams?\n 'alkuperäisidean luoja': 85,\n 'julkaisija': 82,\n 'tuottaja': 81,\n // Expression\n 'leikkaaja': 80,\n 'sovittaja': 79,\n 'johtaja': 78,\n 'esittäjä': 77,\n 'lukija': 76,\n 'miksaaja': 75,\n 'kääntäjä': 70\n // Manifestation\n\n // Item\n};\n\nfunction normalizeValue(value) {\n // Removing last punc char is good enough for our purposes.\n // We don't handle abbreviations here etc.\n // Brackets should not happen either, should they?\n return value.replace(/[.,]$/u, '');\n}\n\nfunction scoreRelatorTermBk(normalizedValue) {\n if (normalizedValue in relatorTermScoreBk) {\n return relatorTermScoreBk[normalizedValue];\n }\n return 0;\n}\n\nfunction scoreRelatorTermMu(normalizedValue) {\n if (normalizedValue in relatorTermScoreMu) {\n return relatorTermScoreMu[normalizedValue];\n }\n return 0;\n}\n\nfunction scoreRelatorTermVm(normalizedValue) {\n if (normalizedValue in relatorTermScoreVm) {\n return relatorTermScoreVm[normalizedValue];\n }\n return 0;\n}\n\nexport function scoreRelatorTerm(value, typeOfMaterial = undefined) {\n // NB! We are currently using type of material only for sorting relator terms, not 7XX fields!\n const normalizedValue = normalizeValue(value);\n if (typeOfMaterial === 'BK') { // Books\n return scoreRelatorTermBk(normalizedValue);\n }\n if (typeOfMaterial === 'MU') { // Music (NB: audio books should be BK in this context!)\n return scoreRelatorTermMu(normalizedValue);\n }\n if (typeOfMaterial === 'VM') { // video material\n return scoreRelatorTermVm(normalizedValue);\n }\n if (normalizedValue in relatorTermScore) {\n return relatorTermScore[normalizedValue];\n }\n return 0;\n}\n\nexport function fieldOrderComparator(fieldA, fieldB) {\n\n //const sorterFunctions = [sortByTag, sortByIndexTerms, sortAlphabetically, sortByRelatorTerm, sortByOccurrenceNumber, preferFenniKeep, sortByFieldLinkAndSequenceNumber];\n\n const sorterFunctions = [sortByTag, sortByIndexTerms, sortAlphabetically, sortByRelatorTerm, sortByOccurrenceNumber, preferFenniKeep, sortByFieldLinkAndSequenceNumber];\n //const sorterFunctions = [sortByIndexTerms, sortByRelatorTerm, sortByOccurrenceNumber, preferFenniKeep, sortByFieldLinkAndSequenceNumber];\n\n return globalFieldOrderComparator(fieldA, fieldB, sorterFunctions);\n}\n\nfunction sortByIndexTerms(fieldA, fieldB) { // eslint-disable-line complexity, max-statements\n\n const indexTermFields = ['600', '610', '611', '630', '648', '650', '651', '652', '653', '654', '655', '656', '657', '658', '659', '662'];\n\n function scoreInd2(val) {\n const ind2Score = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 8, '5': 5, '6': 6, '7': 7};\n\n if (val in ind2Score) {\n return ind2Score[val];\n }\n return 9;\n }\n\n // ATM this is not needed.\n // You may need this, if you change compare function order in sorterFunctions\n // istanbul ignore next\n if (fieldA.tag !== fieldB.tag) {\n return 0;\n }\n\n if (!indexTermFields.includes(fieldA.tag)) {\n return 0;\n }\n\n // Puts ind2=4 last\n if (scoreInd2(fieldA.ind2) > scoreInd2(fieldB.ind2)) {\n return 1;\n }\n if (scoreInd2(fieldA.ind2) < scoreInd2(fieldB.ind2)) {\n return -1;\n }\n\n function scoreDictionary(dictionary) {\n const dictionarySortIndex = {\n 'yso/fin': 0,\n 'yso/swe': 1,\n 'yso/eng': 2,\n 'slm/fin': 0.1,\n 'slm/swe': 1.1,\n 'kauno/fin': 2.1,\n 'kauno/swe': 2.2,\n 'kaunokki': 4,\n 'bella': 5\n };\n\n if (dictionary in dictionarySortIndex) {\n return dictionarySortIndex[dictionary];\n }\n return BIG_BAD_NUMBER;\n }\n\n const dictionaryA = selectFirstValue(fieldA, '2');\n const dictionaryB = selectFirstValue(fieldB, '2');\n\n const dictScoreA = scoreDictionary(dictionaryA);\n const dictScoreB = scoreDictionary(dictionaryB);\n // Use priority order for listed dictionaries:\n if (dictScoreA > dictScoreB) {\n return 1;\n }\n if (dictScoreA < dictScoreB) {\n return -1;\n }\n // Unlisted dictionaries: sort $2 value alphabetically:\n //if (dictScoreA === BIG_BAD_NUMBER) {\n if (dictionaryA > dictionaryB) {\n return 1;\n }\n if (dictionaryA < dictionaryB) {\n return -1;\n }\n //}\n return 0;\n}\n\n\nfunction preferKeep(fieldA, fieldB, keepOwner = 'FENNI') {\n const hasKeepA = fieldHasSubfield(fieldA, '9', `${keepOwner}<KEEP>`);\n const hasKeepB = fieldHasSubfield(fieldB, '9', `${keepOwner}<KEEP>`);\n\n if (hasKeepA && !hasKeepB) {\n return -1;\n }\n if (!hasKeepA && hasKeepB) {\n return 1;\n }\n\n return 0;\n}\n\n\nfunction preferFenniKeep(fieldA, fieldB) {\n const fenniPreference = preferKeep(fieldA, fieldB, 'FENNI');\n if (fenniPreference !== 0) {\n return fenniPreference;\n }\n const violaPreference = preferKeep(fieldA, fieldB, 'VIOLA');\n if (violaPreference !== 0) {\n return violaPreference;\n }\n return preferKeep(fieldA, fieldB, 'FIKKA');\n}\n\nfunction sortByRelatorTerm(fieldA, fieldB) {\n //if (!['600', '610', '611', '630', '700', '710', '711', '730', '800', '810', '811', '830'].includes(fieldA.tag)) {\n if (!['700', '710', '711', '730'].includes(fieldA.tag)) {\n return 0;\n }\n\n function fieldGetMaxRelatorTermScore(field) {\n if (!field.subfields) {\n return -1;\n }\n // If field has $t, it's a teos-nimeke-auktoriteetti, and thus meaningless. These should follow all $t-less fields...\n if (fieldHasSubfield(field, 't')) {\n return -1;\n }\n const relatorSubfieldCode = ['611', '711', '811'].includes(field.tag) ? 'j' : 'e';\n const e = field.subfields.filter(sf => sf.code === relatorSubfieldCode);\n if (e.length === 0) { // No $e is still better than having a $t\n return 0;\n }\n const scores = e.map(sf => scoreRelatorTerm(sf.value));\n //debugDev(`RELATOR SCORE FOR '${fieldToString(field)}': ${scores.join(', ')}`);\n return Math.max(...scores);\n }\n\n const scoreA = fieldGetMaxRelatorTermScore(fieldA);\n const scoreB = fieldGetMaxRelatorTermScore(fieldB);\n\n if (scoreA < scoreB) {\n return 1;\n }\n if (scoreA > scoreB) {\n return -1;\n }\n return 0;\n}\n\n\nfunction fieldGetMinLinkAndSequenceNumber(field) {\n if (!field.subfields) {\n return BIG_BAD_NUMBER;\n }\n const relevantSubfields = field.subfields.filter(sf => isValidSubfield8(sf));\n // If val is something like \"1.2\\x\" parseFloat() would give a syntax erro because of hex-like escape sequnce (at least on Chrome). Thus remove tail:\n const scores = relevantSubfields.map(sf => parseFloat(sf.value.replace(/\\\\.*$/u, '')));\n if (scores.length === 0) {\n return BIG_BAD_NUMBER;\n }\n return Math.min(...scores);\n}\n\nfunction sortByFieldLinkAndSequenceNumber(fieldA, fieldB) { // Sort by subfield $8 that is...\n const scoreA = fieldGetMinLinkAndSequenceNumber(fieldA);\n const scoreB = fieldGetMinLinkAndSequenceNumber(fieldB);\n //debugDev(` sf-8-A-score for '${fieldToString(fieldA)}: ${scoreA}`);\n //debugDev(` sf-8-B-score for '${fieldToString(fieldB)}: ${scoreB}`);\n if (scoreA === scoreB) {\n return 0;\n }\n if (scoreB === 0) {\n return 1;\n }\n if (scoreA === 0) {\n return -1;\n }\n if (scoreA > scoreB) { // smaller is better\n return 1;\n }\n return -1;\n}\n\n\nfunction sortByOccurrenceNumber(fieldA, fieldB) { // Sort by subfield $6\n\n function fieldGetOccurrenceNumber(field) { // should this function be exported? (based on validator sortRelatorFields.js)\n if (!field.subfields) {\n return 0;\n }\n const subfield6 = field.subfields.find(sf => isValidSubfield6(sf));\n if (subfield6 === undefined) {\n return 0;\n }\n return parseInt(subfield6GetOccurrenceNumber(subfield6), 10);\n }\n\n if (fieldA.tag !== '880') {\n return 0;\n }\n const scoreA = fieldGetOccurrenceNumber(fieldA);\n const scoreB = fieldGetOccurrenceNumber(fieldB);\n\n //debugDev(`A: '${fieldToString(fieldA)}: ${scoreA}`);\n //debugDev(`B: '${fieldToString(fieldB)}: ${scoreB}`);\n\n if (scoreA === scoreB) {\n return 0;\n }\n if (scoreB === 0) {\n return -1;\n }\n if (scoreA === 0) {\n return 1;\n }\n if (scoreA > scoreB) { // smaller is better\n return 1;\n }\n return -1;\n}\n\n\nfunction selectFirstValue(field, subcode) {\n return field.subfields\n .filter(subfield => subcode === subfield.code)\n .map(subfield => subfield.value)\n .slice(0, 1);\n}\n\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"sortFields.js","names":["_clone","_interopRequireDefault","require","_utils","_marcFieldSort","_subfield8Utils","_subfield6Utils","e","__esModule","default","BIG_BAD_NUMBER","_default","description","validate","fix","record","res","message","valid","fields","sort","fieldOrderComparator","map","f","clone","relocatedFields","filter","i","fieldToString","length","push","relatorTermScore","relatorTermScoreBk","relatorTermScoreMu","relatorTermScoreVm","normalizeValue","value","replace","scoreRelatorTermBk","normalizedValue","scoreRelatorTermMu","scoreRelatorTermVm","scoreRelatorTerm","typeOfMaterial","undefined","fieldA","fieldB","sorterFunctions","sortByTag","sortByIndexTerms","sortAlphabetically","sortByRelatorTerm","sortByOccurrenceNumber","preferFenniKeep","sortByFieldLinkAndSequenceNumber","globalFieldOrderComparator","indexTermFields","scoreInd2","val","ind2Score","tag","includes","ind2","scoreDictionary","dictionary","dictionarySortIndex","dictionaryA","selectFirstValue","dictionaryB","dictScoreA","dictScoreB","preferKeep","keepOwner","hasKeepA","fieldHasSubfield","hasKeepB","fenniPreference","violaPreference","fieldGetMaxRelatorTermScore","field","subfields","relatorSubfieldCode","sf","code","scores","Math","max","scoreA","scoreB","fieldGetMinLinkAndSequenceNumber","relevantSubfields","isValidSubfield8","parseFloat","min","fieldGetOccurrenceNumber","subfield6","find","isValidSubfield6","parseInt","subfield6GetOccurrenceNumber","subcode","subfield","slice"],"sources":["../src/sortFields.js"],"sourcesContent":["// Taken from project marc-record-js, file marcSortFields.js as this contains more and more Melinda-specific rules.\n\nimport clone from 'clone';\n//import createDebugLogger from 'debug';\nimport {fieldHasSubfield, fieldToString} from './utils';\nimport {sortByTag, sortAlphabetically, fieldOrderComparator as globalFieldOrderComparator} from '@natlibfi/marc-record/dist/marcFieldSort';\nimport {isValidSubfield8} from './subfield8Utils';\nimport {isValidSubfield6, subfield6GetOccurrenceNumber} from './subfield6Utils';\n\n//const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:sortFields');\n//const debugData = debug.extend('data');\n//const debugDev = debug.extend('dev');\n\nconst BIG_BAD_NUMBER = 999999999;\nexport default function () {\n\n return {\n description: 'Sort fields using both generic and Melinda specific rules',\n validate, fix\n };\n\n function fix(record) {\n const res = {message: [], fix: [], valid: true};\n\n record.fields.sort(fieldOrderComparator); // eslint-disable-line functional/immutable-data\n\n return res;\n }\n\n function validate(record) {\n const res = {message: []};\n\n const fields = record.fields.map(f => clone(f));\n fields.sort(fieldOrderComparator); // eslint-disable-line functional/immutable-data\n\n\n const relocatedFields = fields.filter((f, i) => fieldToString(f) !== fieldToString(record.fields[i]));\n\n if (relocatedFields.length > 0) { // eslint-disable-line functional/no-conditional-statements\n res.message.push(`${relocatedFields.length} field(s) in new places`); // eslint-disable-line functional/immutable-data\n }\n\n res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data\n return res;\n }\n}\n\n\nconst relatorTermScore = { // Here bigger is better\n // NB! This is exportable as field internal $e sorting in marc-record-validators-js uses this.\n // NB! The more abstract, the earlier it appears.\n // Note that terms with same abstraction level might also have order preferences\n // We should 1) check the order of these, and 2) add translations (support Swedish at the very least)\n // work/teos > expression/ekspressio > manifestation/manifestaatin,\n // Work https://finto.fi/mts/fi/page/m1298\n 'säveltäjä': 100, 'composer': 100,\n 'kirjoittaja': 100, 'author': 100,\n 'libretisti': 100,\n 'sarjakuvantekijä': 100, 'soitonoppaan tekijä': 100,\n 'kartantekijä': 99,\n 'taiteilija': 98,\n 'designer': 90,\n 'sanoittaja': 90,\n 'käsikirjoittaja': 90,\n\n 'kuvaaja': 89, 'valokuvaaja': 89,\n 'kokoaja': 86,\n 'alkuperäisidean luoja': 85,\n 'teoksella kunnioitettu': 84, 'gratulaation kohde': 84,\n 'julkaisija': 82,\n 'tuottaja': 81,\n // expression: https://finto.fi/mts/fi/page/m153\n 'sovittaja': 79, 'arranger': 79,\n 'kuvittaja': 78,\n 'esipuheen kirjoittaja': 77,\n 'alkusanojen kirjoittaja': 76, 'loppusanojen kirjoittaja': 76,\n 'toimittaja': 75, 'editor': 75,\n 'esittäjä': 74,\n 'johtaja': 73, // orkesterinjohtaja\n 'editointi': 71, // for music, editor/toimittaja is another thing\n 'kääntäjä': 70,\n 'lukija': 61, 'kertoja': 61,\n // Manifestation level: https://finto.fi/mts/fi/page/m491\n 'graafinen suunnittelija': 50,\n 'kustantaja': 41\n // Item level: https://finto.fi/mts/fi/page/m1157\n};\n\nconst relatorTermScoreBk = {\n // https://finto.fi/mts/fi/page/m34 100-81\n 'libretisti': 100, 'sarjakuvantekijä': 100,\n 'kirjoittaja': 99, 'author': 99, 'soitonoppaan tekijä': 99,\n 'kuvaaja': 98, 'valokuvaaja': 98,\n 'kokoaja': 86, 'designer': 86,\n 'alkuperäisidean luoja': 85,\n 'teoksella kunnioitettu': 84, 'gratulaation kohde': 84,\n 'säveltäjä': 83, // if 300$e has CD etc\n 'sanoittaja': 82,\n 'julkaisija': 81,\n // expression: https://finto.fi/mts/fi/page/m153\n 'kuvittaja': 80,\n 'esipuheen kirjoittaja': 79,\n 'alkusanojen kirjoittaja': 78, 'loppusanojen kirjoittaja': 78,\n 'kääntäjä': 70,\n 'sovittaja': 50,\n // manifestaatio\n 'graafinen suunnittelija': 40,\n // kappale/item\n 'sitoja': 25,\n 'gratulaation kirjoittaja': 24\n};\n\nconst relatorTermScoreMu = {\n 'säveltäjä': 100,\n 'sanoittaja': 99,\n 'soitonoppaan tekijä': 98,\n 'alkuperäisidean luoja': 85,\n 'teoksella kunnioitettu': 81,\n // expression: https://finto.fi/mts/fi/page/m153\n 'sovittaja': 79,\n 'johtaja': 78,\n 'esittäjä': 77,\n 'lukija': 76,\n 'miksaaja': 75,\n // manifestaatio\n 'esittäjä (manifestaatio)': 69,\n\n 'graafinen suunnittelija': 50,\n 'valmistaja': 41,\n 'jakaja': 40\n // kappale/item\n\n};\n\nconst relatorTermScoreVm = { // Visual Material\n // Work\n 'ohjaaja': 100,\n 'kirjoittaja': 99, 'author': 99, // Here we assume that film/whatever is based on author's book\n 'käsikirjoittaja': 98, 'designer': 98,\n 'kuvaaja': 89,\n 'säveltäjä': 86, // Volatile. John Williams?\n 'alkuperäisidean luoja': 85,\n 'julkaisija': 82,\n 'tuottaja': 81,\n // Expression\n 'leikkaaja': 80,\n 'sovittaja': 79,\n 'johtaja': 78,\n 'esittäjä': 77,\n 'lukija': 76,\n 'miksaaja': 75,\n 'kääntäjä': 70,\n // Manifestation\n 'kaivertaja': 60,\n 'graafinen suunnittelija': 59,\n 'kustantaja': 42,\n 'elokuvan jakelija': 41, 'jakaja': 41\n\n // Item\n};\n\nfunction normalizeValue(value) {\n // Removing last punc char is good enough for our purposes.\n // We don't handle abbreviations here etc.\n // Brackets should not happen either, should they?\n return value.replace(/[.,]$/u, '');\n}\n\nfunction scoreRelatorTermBk(normalizedValue) {\n if (normalizedValue in relatorTermScoreBk) {\n return relatorTermScoreBk[normalizedValue];\n }\n return 0;\n}\n\nfunction scoreRelatorTermMu(normalizedValue) {\n if (normalizedValue in relatorTermScoreMu) {\n return relatorTermScoreMu[normalizedValue];\n }\n return 0;\n}\n\nfunction scoreRelatorTermVm(normalizedValue) {\n if (normalizedValue in relatorTermScoreVm) {\n return relatorTermScoreVm[normalizedValue];\n }\n return 0;\n}\n\nexport function scoreRelatorTerm(value, typeOfMaterial = undefined) {\n // NB! We are currently using type of material only for sorting relator terms, not 7XX fields!!!\n const normalizedValue = normalizeValue(value);\n if (typeOfMaterial === 'BK') { // Books\n return scoreRelatorTermBk(normalizedValue);\n }\n if (typeOfMaterial === 'MU') { // Music (NB: audio books should be BK in this context!)\n return scoreRelatorTermMu(normalizedValue);\n }\n if (typeOfMaterial === 'VM') { // video material\n return scoreRelatorTermVm(normalizedValue);\n }\n if (normalizedValue in relatorTermScore) {\n return relatorTermScore[normalizedValue];\n }\n return 0;\n}\n\nexport function fieldOrderComparator(fieldA, fieldB) {\n\n //const sorterFunctions = [sortByTag, sortByIndexTerms, sortAlphabetically, sortByRelatorTerm, sortByOccurrenceNumber, preferFenniKeep, sortByFieldLinkAndSequenceNumber];\n\n const sorterFunctions = [sortByTag, sortByIndexTerms, sortAlphabetically, sortByRelatorTerm, sortByOccurrenceNumber, preferFenniKeep, sortByFieldLinkAndSequenceNumber];\n //const sorterFunctions = [sortByIndexTerms, sortByRelatorTerm, sortByOccurrenceNumber, preferFenniKeep, sortByFieldLinkAndSequenceNumber];\n\n return globalFieldOrderComparator(fieldA, fieldB, sorterFunctions);\n}\n\nfunction sortByIndexTerms(fieldA, fieldB) { // eslint-disable-line complexity, max-statements\n\n const indexTermFields = ['600', '610', '611', '630', '648', '650', '651', '652', '653', '654', '655', '656', '657', '658', '659', '662'];\n\n function scoreInd2(val) {\n const ind2Score = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 8, '5': 5, '6': 6, '7': 7};\n\n if (val in ind2Score) {\n return ind2Score[val];\n }\n return 9;\n }\n\n // ATM this is not needed.\n // You may need this, if you change compare function order in sorterFunctions\n // istanbul ignore next\n if (fieldA.tag !== fieldB.tag) {\n return 0;\n }\n\n if (!indexTermFields.includes(fieldA.tag)) {\n return 0;\n }\n\n // Puts ind2=4 last\n if (scoreInd2(fieldA.ind2) > scoreInd2(fieldB.ind2)) {\n return 1;\n }\n if (scoreInd2(fieldA.ind2) < scoreInd2(fieldB.ind2)) {\n return -1;\n }\n\n function scoreDictionary(dictionary) {\n const dictionarySortIndex = {\n 'yso/fin': 0,\n 'yso/swe': 1,\n 'yso/eng': 2,\n 'slm/fin': 0.1,\n 'slm/swe': 1.1,\n 'kauno/fin': 2.1,\n 'kauno/swe': 2.2,\n 'kaunokki': 4,\n 'bella': 5\n };\n\n if (dictionary in dictionarySortIndex) {\n return dictionarySortIndex[dictionary];\n }\n return BIG_BAD_NUMBER;\n }\n\n const dictionaryA = selectFirstValue(fieldA, '2');\n const dictionaryB = selectFirstValue(fieldB, '2');\n\n const dictScoreA = scoreDictionary(dictionaryA);\n const dictScoreB = scoreDictionary(dictionaryB);\n // Use priority order for listed dictionaries:\n if (dictScoreA > dictScoreB) {\n return 1;\n }\n if (dictScoreA < dictScoreB) {\n return -1;\n }\n // Unlisted dictionaries: sort $2 value alphabetically:\n //if (dictScoreA === BIG_BAD_NUMBER) {\n if (dictionaryA > dictionaryB) {\n return 1;\n }\n if (dictionaryA < dictionaryB) {\n return -1;\n }\n //}\n return 0;\n}\n\n\nfunction preferKeep(fieldA, fieldB, keepOwner = 'FENNI') {\n const hasKeepA = fieldHasSubfield(fieldA, '9', `${keepOwner}<KEEP>`);\n const hasKeepB = fieldHasSubfield(fieldB, '9', `${keepOwner}<KEEP>`);\n\n if (hasKeepA && !hasKeepB) {\n return -1;\n }\n if (!hasKeepA && hasKeepB) {\n return 1;\n }\n\n return 0;\n}\n\n\nfunction preferFenniKeep(fieldA, fieldB) {\n const fenniPreference = preferKeep(fieldA, fieldB, 'FENNI');\n if (fenniPreference !== 0) {\n return fenniPreference;\n }\n const violaPreference = preferKeep(fieldA, fieldB, 'VIOLA');\n if (violaPreference !== 0) {\n return violaPreference;\n }\n return preferKeep(fieldA, fieldB, 'FIKKA');\n}\n\nfunction sortByRelatorTerm(fieldA, fieldB) {\n //if (!['600', '610', '611', '630', '700', '710', '711', '730', '800', '810', '811', '830'].includes(fieldA.tag)) {\n if (!['700', '710', '711', '730'].includes(fieldA.tag)) {\n return 0;\n }\n\n function fieldGetMaxRelatorTermScore(field) {\n if (!field.subfields) {\n return -2;\n }\n // If field has $t, it's a teos-nimeke-auktoriteetti, and thus meaningless. These should follow all $t-less fields...\n if (fieldHasSubfield(field, 't')) {\n return -2;\n }\n const relatorSubfieldCode = ['611', '711', '811'].includes(field.tag) ? 'j' : 'e';\n const e = field.subfields.filter(sf => sf.code === relatorSubfieldCode);\n if (e.length === 0) { // No $e is still better than having a $t\n return -1;\n }\n const scores = e.map(sf => scoreRelatorTerm(sf.value));\n //debugDev(`RELATOR SCORE FOR '${fieldToString(field)}': ${scores.join(', ')}`);\n return Math.max(...scores);\n }\n\n const scoreA = fieldGetMaxRelatorTermScore(fieldA);\n const scoreB = fieldGetMaxRelatorTermScore(fieldB);\n\n if (scoreA < scoreB) {\n return 1;\n }\n if (scoreA > scoreB) {\n return -1;\n }\n return 0;\n}\n\n\nfunction fieldGetMinLinkAndSequenceNumber(field) {\n if (!field.subfields) {\n return BIG_BAD_NUMBER;\n }\n const relevantSubfields = field.subfields.filter(sf => isValidSubfield8(sf));\n // If val is something like \"1.2\\x\" parseFloat() would give a syntax erro because of hex-like escape sequnce (at least on Chrome). Thus remove tail:\n const scores = relevantSubfields.map(sf => parseFloat(sf.value.replace(/\\\\.*$/u, '')));\n if (scores.length === 0) {\n return BIG_BAD_NUMBER;\n }\n return Math.min(...scores);\n}\n\nfunction sortByFieldLinkAndSequenceNumber(fieldA, fieldB) { // Sort by subfield $8 that is...\n const scoreA = fieldGetMinLinkAndSequenceNumber(fieldA);\n const scoreB = fieldGetMinLinkAndSequenceNumber(fieldB);\n //debugDev(` sf-8-A-score for '${fieldToString(fieldA)}: ${scoreA}`);\n //debugDev(` sf-8-B-score for '${fieldToString(fieldB)}: ${scoreB}`);\n if (scoreA === scoreB) {\n return 0;\n }\n if (scoreB === 0) {\n return 1;\n }\n if (scoreA === 0) {\n return -1;\n }\n if (scoreA > scoreB) { // smaller is better\n return 1;\n }\n return -1;\n}\n\n\nfunction sortByOccurrenceNumber(fieldA, fieldB) { // Sort by subfield $6\n\n function fieldGetOccurrenceNumber(field) { // should this function be exported? (based on validator sortRelatorFields.js)\n if (!field.subfields) {\n return 0;\n }\n const subfield6 = field.subfields.find(sf => isValidSubfield6(sf));\n if (subfield6 === undefined) {\n return 0;\n }\n return parseInt(subfield6GetOccurrenceNumber(subfield6), 10);\n }\n\n if (fieldA.tag !== '880') {\n return 0;\n }\n const scoreA = fieldGetOccurrenceNumber(fieldA);\n const scoreB = fieldGetOccurrenceNumber(fieldB);\n\n //debugDev(`A: '${fieldToString(fieldA)}: ${scoreA}`);\n //debugDev(`B: '${fieldToString(fieldB)}: ${scoreB}`);\n\n if (scoreA === scoreB) {\n return 0;\n }\n if (scoreB === 0) {\n return -1;\n }\n if (scoreA === 0) {\n return 1;\n }\n if (scoreA > scoreB) { // smaller is better\n return 1;\n }\n return -1;\n}\n\n\nfunction selectFirstValue(field, subcode) {\n return field.subfields\n .filter(subfield => subcode === subfield.code)\n .map(subfield => subfield.value)\n .slice(0, 1);\n}\n\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"url": "git@github.com:natlibfi/marc-record-validators-melinda.git"
|
|
15
15
|
},
|
|
16
16
|
"license": "MIT",
|
|
17
|
-
"version": "11.5.
|
|
17
|
+
"version": "11.5.4",
|
|
18
18
|
"main": "./dist/index.js",
|
|
19
19
|
"publishConfig": {
|
|
20
20
|
"access": "public"
|
|
@@ -38,16 +38,16 @@
|
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
40
|
"@natlibfi/issn-verify": "^1.0.6",
|
|
41
|
-
"@natlibfi/marc-record": "^9.1.
|
|
41
|
+
"@natlibfi/marc-record": "^9.1.3",
|
|
42
42
|
"@natlibfi/marc-record-serializers": "^10.1.2",
|
|
43
43
|
"@natlibfi/marc-record-validate": "^8.0.12",
|
|
44
|
-
"@natlibfi/melinda-commons": "^13.0.
|
|
44
|
+
"@natlibfi/melinda-commons": "^13.0.19",
|
|
45
45
|
"@natlibfi/sru-client": "^6.0.17",
|
|
46
46
|
"@natlibfi/sfs-4900": "github:NatLibFi/sfs-4900",
|
|
47
47
|
"cld3-asm": "^4.0.0",
|
|
48
48
|
"clone": "^2.1.2",
|
|
49
49
|
"debug": "^4.4.0",
|
|
50
|
-
"isbn3": "^1.2.
|
|
50
|
+
"isbn3": "^1.2.7",
|
|
51
51
|
"iso9_1995": "^0.0.2",
|
|
52
52
|
"langs": "^2.0.0",
|
|
53
53
|
"node-fetch": "^2.7.0",
|
|
@@ -59,8 +59,8 @@
|
|
|
59
59
|
},
|
|
60
60
|
"devDependencies": {
|
|
61
61
|
"@babel/cli": "^7.26.4",
|
|
62
|
-
"@babel/core": "^7.26.
|
|
63
|
-
"@babel/preset-env": "^7.26.
|
|
62
|
+
"@babel/core": "^7.26.7",
|
|
63
|
+
"@babel/preset-env": "^7.26.7",
|
|
64
64
|
"@babel/register": "^7.25.9",
|
|
65
65
|
"@natlibfi/eslint-config-melinda-backend": "^3.0.5",
|
|
66
66
|
"@natlibfi/fixugen": "^2.0.12",
|
|
@@ -72,7 +72,7 @@
|
|
|
72
72
|
"cross-env": "^7.0.3",
|
|
73
73
|
"eslint": "^8.57.1",
|
|
74
74
|
"fetch-mock": "^11.1.5",
|
|
75
|
-
"mocha": "^11.0
|
|
75
|
+
"mocha": "^11.1.0",
|
|
76
76
|
"nyc": "^17.1.0"
|
|
77
77
|
},
|
|
78
78
|
"overrides": {
|
|
@@ -184,6 +184,7 @@ const mergeConstraints = [
|
|
|
184
184
|
{'tag': '585', 'required': 'a', 'key': 'a'},
|
|
185
185
|
{'tag': '586', 'required': 'a', 'key': 'a'},
|
|
186
186
|
{'tag': '588', 'required': 'a', 'key': 'a'},
|
|
187
|
+
// NB! Currently we never merge 59X fields (see mergableTags.js). Doublish removals such as MELKEHITYS-3147 are handled by postprocessor.
|
|
187
188
|
{'tag': '590', 'required': ''},
|
|
188
189
|
{'tag': '591', 'required': ''},
|
|
189
190
|
{'tag': '592', 'required': ''},
|
|
@@ -289,6 +289,13 @@ function deriveIndividualDeletables(record) {
|
|
|
289
289
|
}
|
|
290
290
|
}
|
|
291
291
|
|
|
292
|
+
if (currString.match(/^500 ## ‡a Ei vastaanotettu\.$/u)) { // MELKEHITYS-3147
|
|
293
|
+
return processTodoList([...stillToDo, ...moreToDo], [...deletables, '500 ## ‡a EI VASTAANOTETTU.']);
|
|
294
|
+
}
|
|
295
|
+
if (currString.match(/^500 ## ‡a Ei ilmesty\.$/u)) { // MELKEHITYS-3147
|
|
296
|
+
return processTodoList([...stillToDo, ...moreToDo], [...deletables, '500 ## ‡a EI ILMESTY.']);
|
|
297
|
+
}
|
|
298
|
+
|
|
292
299
|
if (currString.match(/^505 .0.*-- ‡t/u)) { // MRA-413-ish
|
|
293
300
|
const tmp = currString.replace(/ -- ‡t /gu, ' -- '). // remove non-initial $t subfields
|
|
294
301
|
replace(/ ‡[rg] /gu, ' '). // remove $r and $g subfields
|
|
@@ -302,6 +309,13 @@ function deriveIndividualDeletables(record) {
|
|
|
302
309
|
//nvdebug(`505 DERIVATE: '${tmp}'`)
|
|
303
310
|
}
|
|
304
311
|
|
|
312
|
+
if (currString.match(/^594 ## ‡a Ei vastaanotettu ‡5 FENNI$/u)) { // MELKEHITYS-3147
|
|
313
|
+
return processTodoList([...stillToDo, ...moreToDo], [...deletables, '594 ## ‡a EI VASTAANOTETTU ‡5 FENNI']);
|
|
314
|
+
}
|
|
315
|
+
if (currString.match(/^594 ## ‡a Ei ilmesty ‡5 FENNI$/u)) { // MELKEHITYS-3147
|
|
316
|
+
return processTodoList([...stillToDo, ...moreToDo], [...deletables, '594 ## ‡a EI ILMESTY ‡5 FENNI']);
|
|
317
|
+
}
|
|
318
|
+
|
|
305
319
|
// MET-381: remove occurence number TAG-00, if TAG-NN existists
|
|
306
320
|
if (currString.match(/^880.* ‡6 [0-9][0-9][0-9]-(?:[1-9][0-9]|0[1-9])/u)) {
|
|
307
321
|
const tmp = currString.replace(/( ‡6 [0-9][0-9][0-9])-[0-9]+/u, '$1-00'); // eslint-disable-line prefer-named-capture-group
|
package/src/sortFields.js
CHANGED
|
@@ -59,6 +59,7 @@ const relatorTermScore = { // Here bigger is better
|
|
|
59
59
|
'sarjakuvantekijä': 100, 'soitonoppaan tekijä': 100,
|
|
60
60
|
'kartantekijä': 99,
|
|
61
61
|
'taiteilija': 98,
|
|
62
|
+
'designer': 90,
|
|
62
63
|
'sanoittaja': 90,
|
|
63
64
|
'käsikirjoittaja': 90,
|
|
64
65
|
|
|
@@ -80,6 +81,7 @@ const relatorTermScore = { // Here bigger is better
|
|
|
80
81
|
'kääntäjä': 70,
|
|
81
82
|
'lukija': 61, 'kertoja': 61,
|
|
82
83
|
// Manifestation level: https://finto.fi/mts/fi/page/m491
|
|
84
|
+
'graafinen suunnittelija': 50,
|
|
83
85
|
'kustantaja': 41
|
|
84
86
|
// Item level: https://finto.fi/mts/fi/page/m1157
|
|
85
87
|
};
|
|
@@ -89,20 +91,21 @@ const relatorTermScoreBk = {
|
|
|
89
91
|
'libretisti': 100, 'sarjakuvantekijä': 100,
|
|
90
92
|
'kirjoittaja': 99, 'author': 99, 'soitonoppaan tekijä': 99,
|
|
91
93
|
'kuvaaja': 98, 'valokuvaaja': 98,
|
|
92
|
-
'kokoaja': 86,
|
|
94
|
+
'kokoaja': 86, 'designer': 86,
|
|
93
95
|
'alkuperäisidean luoja': 85,
|
|
94
96
|
'teoksella kunnioitettu': 84, 'gratulaation kohde': 84,
|
|
95
|
-
'
|
|
96
|
-
'
|
|
97
|
-
'
|
|
97
|
+
'säveltäjä': 83, // if 300$e has CD etc
|
|
98
|
+
'sanoittaja': 82,
|
|
99
|
+
'julkaisija': 81,
|
|
98
100
|
// expression: https://finto.fi/mts/fi/page/m153
|
|
99
101
|
'kuvittaja': 80,
|
|
100
102
|
'esipuheen kirjoittaja': 79,
|
|
101
103
|
'alkusanojen kirjoittaja': 78, 'loppusanojen kirjoittaja': 78,
|
|
102
104
|
'kääntäjä': 70,
|
|
103
|
-
|
|
104
105
|
'sovittaja': 50,
|
|
105
|
-
//
|
|
106
|
+
// manifestaatio
|
|
107
|
+
'graafinen suunnittelija': 40,
|
|
108
|
+
// kappale/item
|
|
106
109
|
'sitoja': 25,
|
|
107
110
|
'gratulaation kirjoittaja': 24
|
|
108
111
|
};
|
|
@@ -118,14 +121,22 @@ const relatorTermScoreMu = {
|
|
|
118
121
|
'johtaja': 78,
|
|
119
122
|
'esittäjä': 77,
|
|
120
123
|
'lukija': 76,
|
|
121
|
-
'miksaaja': 75
|
|
124
|
+
'miksaaja': 75,
|
|
125
|
+
// manifestaatio
|
|
126
|
+
'esittäjä (manifestaatio)': 69,
|
|
127
|
+
|
|
128
|
+
'graafinen suunnittelija': 50,
|
|
129
|
+
'valmistaja': 41,
|
|
130
|
+
'jakaja': 40
|
|
131
|
+
// kappale/item
|
|
132
|
+
|
|
122
133
|
};
|
|
123
134
|
|
|
124
135
|
const relatorTermScoreVm = { // Visual Material
|
|
125
136
|
// Work
|
|
126
137
|
'ohjaaja': 100,
|
|
127
138
|
'kirjoittaja': 99, 'author': 99, // Here we assume that film/whatever is based on author's book
|
|
128
|
-
'käsikirjoittaja': 98,
|
|
139
|
+
'käsikirjoittaja': 98, 'designer': 98,
|
|
129
140
|
'kuvaaja': 89,
|
|
130
141
|
'säveltäjä': 86, // Volatile. John Williams?
|
|
131
142
|
'alkuperäisidean luoja': 85,
|
|
@@ -138,8 +149,12 @@ const relatorTermScoreVm = { // Visual Material
|
|
|
138
149
|
'esittäjä': 77,
|
|
139
150
|
'lukija': 76,
|
|
140
151
|
'miksaaja': 75,
|
|
141
|
-
'kääntäjä': 70
|
|
152
|
+
'kääntäjä': 70,
|
|
142
153
|
// Manifestation
|
|
154
|
+
'kaivertaja': 60,
|
|
155
|
+
'graafinen suunnittelija': 59,
|
|
156
|
+
'kustantaja': 42,
|
|
157
|
+
'elokuvan jakelija': 41, 'jakaja': 41
|
|
143
158
|
|
|
144
159
|
// Item
|
|
145
160
|
};
|
|
@@ -173,7 +188,7 @@ function scoreRelatorTermVm(normalizedValue) {
|
|
|
173
188
|
}
|
|
174
189
|
|
|
175
190
|
export function scoreRelatorTerm(value, typeOfMaterial = undefined) {
|
|
176
|
-
// NB! We are currently using type of material only for sorting relator terms, not 7XX fields
|
|
191
|
+
// NB! We are currently using type of material only for sorting relator terms, not 7XX fields!!!
|
|
177
192
|
const normalizedValue = normalizeValue(value);
|
|
178
193
|
if (typeOfMaterial === 'BK') { // Books
|
|
179
194
|
return scoreRelatorTermBk(normalizedValue);
|
|
@@ -311,16 +326,16 @@ function sortByRelatorTerm(fieldA, fieldB) {
|
|
|
311
326
|
|
|
312
327
|
function fieldGetMaxRelatorTermScore(field) {
|
|
313
328
|
if (!field.subfields) {
|
|
314
|
-
return -
|
|
329
|
+
return -2;
|
|
315
330
|
}
|
|
316
331
|
// If field has $t, it's a teos-nimeke-auktoriteetti, and thus meaningless. These should follow all $t-less fields...
|
|
317
332
|
if (fieldHasSubfield(field, 't')) {
|
|
318
|
-
return -
|
|
333
|
+
return -2;
|
|
319
334
|
}
|
|
320
335
|
const relatorSubfieldCode = ['611', '711', '811'].includes(field.tag) ? 'j' : 'e';
|
|
321
336
|
const e = field.subfields.filter(sf => sf.code === relatorSubfieldCode);
|
|
322
337
|
if (e.length === 0) { // No $e is still better than having a $t
|
|
323
|
-
return
|
|
338
|
+
return -1;
|
|
324
339
|
}
|
|
325
340
|
const scores = e.map(sf => scoreRelatorTerm(sf.value));
|
|
326
341
|
//debugDev(`RELATOR SCORE FOR '${fieldToString(field)}': ${scores.join(', ')}`);
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"leader": "12345crm a22002417i 4500",
|
|
3
|
+
"fields":
|
|
4
|
+
[
|
|
5
|
+
{"tag": "700", "ind1": "1", "ind2": " ", "subfields": [
|
|
6
|
+
{"code": "a", "value": "Sukunimi, Etunimi1." }
|
|
7
|
+
]},
|
|
8
|
+
{"tag": "700", "ind1": "1", "ind2": " ", "subfields": [
|
|
9
|
+
{"code": "a", "value": "Sukunimi, Etunimi2," },
|
|
10
|
+
{"code": "e", "value": "graafinen suunnittelija." }
|
|
11
|
+
]},
|
|
12
|
+
{"tag": "700", "ind1": "1", "ind2": " ", "subfields": [
|
|
13
|
+
{"code": "a", "value": "Sukunimi, Etunimi3," },
|
|
14
|
+
{"code": "e", "value": "kuvittaja." }
|
|
15
|
+
]},
|
|
16
|
+
{"tag": "700", "ind1": "1", "ind2": " ", "subfields": [
|
|
17
|
+
{"code": "a", "value": "Sukunimi, Etunimi4," },
|
|
18
|
+
{"code": "e", "value": "designer." }
|
|
19
|
+
]}
|
|
20
|
+
]
|
|
21
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"leader": "12345crm a22002417i 4500",
|
|
3
|
+
"fields":
|
|
4
|
+
[
|
|
5
|
+
{"tag": "700", "ind1": "1", "ind2": " ", "subfields": [
|
|
6
|
+
{"code": "a", "value": "Sukunimi, Etunimi4," },
|
|
7
|
+
{"code": "e", "value": "designer." }
|
|
8
|
+
]},
|
|
9
|
+
{"tag": "700", "ind1": "1", "ind2": " ", "subfields": [
|
|
10
|
+
{"code": "a", "value": "Sukunimi, Etunimi3," },
|
|
11
|
+
{"code": "e", "value": "kuvittaja." }
|
|
12
|
+
]},
|
|
13
|
+
{"tag": "700", "ind1": "1", "ind2": " ", "subfields": [
|
|
14
|
+
{"code": "a", "value": "Sukunimi, Etunimi2," },
|
|
15
|
+
{"code": "e", "value": "graafinen suunnittelija." }
|
|
16
|
+
]},
|
|
17
|
+
{"tag": "700", "ind1": "1", "ind2": " ", "subfields": [
|
|
18
|
+
{"code": "a", "value": "Sukunimi, Etunimi1." }
|
|
19
|
+
]}
|
|
20
|
+
],
|
|
21
|
+
"_validationOptions": {}
|
|
22
|
+
}
|