@natlibfi/marc-record-validators-melinda 11.6.7 → 12.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/melinda-node-tests.yml +1 -1
- package/dist/access-rights.js +63 -91
- package/dist/access-rights.js.map +7 -1
- package/dist/access-rights.test.js +137 -0
- package/dist/access-rights.test.js.map +7 -0
- package/dist/addMissingField041.js +21 -53
- package/dist/addMissingField041.js.map +7 -1
- package/dist/addMissingField041.test.js +39 -0
- package/dist/addMissingField041.test.js.map +7 -0
- package/dist/addMissingField336.js +99 -191
- package/dist/addMissingField336.js.map +7 -1
- package/dist/addMissingField336.test.js +39 -0
- package/dist/addMissingField336.test.js.map +7 -0
- package/dist/addMissingField337.js +63 -132
- package/dist/addMissingField337.js.map +7 -1
- package/dist/addMissingField337.test.js +39 -0
- package/dist/addMissingField337.test.js.map +7 -0
- package/dist/addMissingField338.js +147 -253
- package/dist/addMissingField338.js.map +7 -1
- package/dist/addMissingField338.test.js +39 -0
- package/dist/addMissingField338.test.js.map +7 -0
- package/dist/cyrillux-usemarcon-replacement.js +119 -272
- package/dist/cyrillux-usemarcon-replacement.js.map +7 -1
- package/dist/cyrillux-usemarcon-replacement.test.js +46 -0
- package/dist/cyrillux-usemarcon-replacement.test.js.map +7 -0
- package/dist/cyrillux.js +119 -223
- package/dist/cyrillux.js.map +7 -1
- package/dist/cyrillux.test.js +39 -0
- package/dist/cyrillux.test.js.map +7 -0
- package/dist/disambiguateSeriesStatements.js +40 -81
- package/dist/disambiguateSeriesStatements.js.map +7 -1
- package/dist/disambiguateSeriesStatements.test.js +44 -0
- package/dist/disambiguateSeriesStatements.test.js.map +7 -0
- package/dist/double-commas.js +7 -14
- package/dist/double-commas.js.map +7 -1
- package/dist/double-commas.test.js +48 -0
- package/dist/double-commas.test.js.map +7 -0
- package/dist/duplicates-ind1.js +10 -31
- package/dist/duplicates-ind1.js.map +7 -1
- package/dist/duplicates-ind1.test.js +40 -0
- package/dist/duplicates-ind1.test.js.map +7 -0
- package/dist/empty-fields.js +10 -22
- package/dist/empty-fields.js.map +7 -1
- package/dist/empty-fields.test.js +129 -0
- package/dist/empty-fields.test.js.map +7 -0
- package/dist/ending-punctuation-conf.js +871 -769
- package/dist/ending-punctuation-conf.js.map +7 -1
- package/dist/ending-punctuation.js +84 -167
- package/dist/ending-punctuation.js.map +7 -1
- package/dist/ending-punctuation.test.js +2290 -0
- package/dist/ending-punctuation.test.js.map +7 -0
- package/dist/ending-whitespace.js +10 -35
- package/dist/ending-whitespace.js.map +7 -1
- package/dist/ending-whitespace.test.js +38 -0
- package/dist/ending-whitespace.test.js.map +7 -0
- package/dist/field-008-18-34-character-groups.js +40 -125
- package/dist/field-008-18-34-character-groups.js.map +7 -1
- package/dist/field-008-18-34-character-groups.test.js +45 -0
- package/dist/field-008-18-34-character-groups.test.js.map +7 -0
- package/dist/field-505-separators.js +19 -39
- package/dist/field-505-separators.js.map +7 -1
- package/dist/field-505-separators.test.js +45 -0
- package/dist/field-505-separators.test.js.map +7 -0
- package/dist/field-521-fix.js +19 -47
- package/dist/field-521-fix.js.map +7 -1
- package/dist/field-521-fix.test.js +44 -0
- package/dist/field-521-fix.test.js.map +7 -0
- package/dist/field-exclusion.js +37 -91
- package/dist/field-exclusion.js.map +7 -1
- package/dist/field-exclusion.test.js +821 -0
- package/dist/field-exclusion.test.js.map +7 -0
- package/dist/field-structure.js +52 -104
- package/dist/field-structure.js.map +7 -1
- package/dist/field-structure.test.js +587 -0
- package/dist/field-structure.test.js.map +7 -0
- package/dist/field33XUtils.js +119 -503
- package/dist/field33XUtils.js.map +7 -1
- package/dist/fields-present.js +11 -23
- package/dist/fields-present.js.map +7 -1
- package/dist/fields-present.test.js +95 -0
- package/dist/fields-present.test.js.map +7 -0
- package/dist/fix-33X.js +393 -431
- package/dist/fix-33X.js.map +7 -1
- package/dist/fix-33X.test.js +39 -0
- package/dist/fix-33X.test.js.map +7 -0
- package/dist/fix-country-codes.js +20 -50
- package/dist/fix-country-codes.js.map +7 -1
- package/dist/fix-country-codes.test.js +44 -0
- package/dist/fix-country-codes.test.js.map +7 -0
- package/dist/fix-language-codes.js +23 -53
- package/dist/fix-language-codes.js.map +7 -1
- package/dist/fix-language-codes.test.js +38 -0
- package/dist/fix-language-codes.test.js.map +7 -0
- package/dist/fixRelatorTerms.js +82 -209
- package/dist/fixRelatorTerms.js.map +7 -1
- package/dist/fixRelatorTerms.test.js +44 -0
- package/dist/fixRelatorTerms.test.js.map +7 -0
- package/dist/fixed-fields.js +21 -30
- package/dist/fixed-fields.js.map +7 -1
- package/dist/fixed-fields.test.js +87 -0
- package/dist/fixed-fields.test.js.map +7 -0
- package/dist/identical-fields.js +8 -24
- package/dist/identical-fields.js.map +7 -1
- package/dist/identical-fields.test.js +119 -0
- package/dist/identical-fields.test.js.map +7 -0
- package/dist/index.js +119 -413
- package/dist/index.js.map +7 -1
- package/dist/indicator-fixes.js +57 -95
- package/dist/indicator-fixes.js.map +7 -1
- package/dist/indicator-fixes.test.js +42 -0
- package/dist/indicator-fixes.test.js.map +7 -0
- package/dist/isbn-issn.js +66 -126
- package/dist/isbn-issn.js.map +7 -1
- package/dist/isbn-issn.test.js +398 -0
- package/dist/isbn-issn.test.js.map +7 -0
- package/dist/item-language.js +32 -65
- package/dist/item-language.js.map +7 -1
- package/dist/item-language.test.js +322 -0
- package/dist/item-language.test.js.map +7 -0
- package/dist/melindaCustomMergeFields.js +5182 -11233
- package/dist/melindaCustomMergeFields.js.map +7 -1
- package/dist/merge-fields/controlSubfields.js +75 -142
- package/dist/merge-fields/controlSubfields.js.map +7 -1
- package/dist/merge-fields/counterpartField.js +182 -379
- package/dist/merge-fields/counterpartField.js.map +7 -1
- package/dist/merge-fields/index.js +15 -49
- package/dist/merge-fields/index.js.map +7 -1
- package/dist/merge-fields/mergableIndicator.js +18 -51
- package/dist/merge-fields/mergableIndicator.js.map +7 -1
- package/dist/merge-fields/mergableTag.js +78 -30
- package/dist/merge-fields/mergableTag.js.map +7 -1
- package/dist/merge-fields/mergeConfig.js +66 -171
- package/dist/merge-fields/mergeConfig.js.map +7 -1
- package/dist/merge-fields/mergeConstraints.js +323 -1214
- package/dist/merge-fields/mergeConstraints.js.map +7 -1
- package/dist/merge-fields/mergeField.js +47 -111
- package/dist/merge-fields/mergeField.js.map +7 -1
- package/dist/merge-fields/mergeIndicator.js +64 -118
- package/dist/merge-fields/mergeIndicator.js.map +7 -1
- package/dist/merge-fields/mergeOrAddPostprocess.js +14 -38
- package/dist/merge-fields/mergeOrAddPostprocess.js.map +7 -1
- package/dist/merge-fields/mergeOrAddSubfield.js +62 -104
- package/dist/merge-fields/mergeOrAddSubfield.js.map +7 -1
- package/dist/merge-fields/mergeSubfield.js +47 -95
- package/dist/merge-fields/mergeSubfield.js.map +7 -1
- package/dist/merge-fields/removeDuplicateSubfields.js +18 -31
- package/dist/merge-fields/removeDuplicateSubfields.js.map +7 -1
- package/dist/merge-fields/worldKnowledge.js +15 -40
- package/dist/merge-fields/worldKnowledge.js.map +7 -1
- package/dist/merge-fields.test.js +44 -0
- package/dist/merge-fields.test.js.map +7 -0
- package/dist/mergeField500Lisapainokset.js +28 -57
- package/dist/mergeField500Lisapainokset.js.map +7 -1
- package/dist/mergeField500Lisapainokset.test.js +44 -0
- package/dist/mergeField500Lisapainokset.test.js.map +7 -0
- package/dist/mergeRelatorTermFields.js +33 -69
- package/dist/mergeRelatorTermFields.js.map +7 -1
- package/dist/mergeRelatorTermFields.test.js +44 -0
- package/dist/mergeRelatorTermFields.test.js.map +7 -0
- package/dist/modernize-502.js +23 -55
- package/dist/modernize-502.js.map +7 -1
- package/dist/modernize-502.test.js +38 -0
- package/dist/modernize-502.test.js.map +7 -0
- package/dist/multiple-subfield-0.js +23 -48
- package/dist/multiple-subfield-0.js.map +7 -1
- package/dist/multiple-subfield-0.test.js +44 -0
- package/dist/multiple-subfield-0.test.js.map +7 -0
- package/dist/non-breaking-space.js +11 -32
- package/dist/non-breaking-space.js.map +7 -1
- package/dist/non-breaking-space.test.js +38 -0
- package/dist/non-breaking-space.test.js.map +7 -0
- package/dist/normalize-dashes.js +18 -37
- package/dist/normalize-dashes.js.map +7 -1
- package/dist/normalize-dashes.test.js +44 -0
- package/dist/normalize-dashes.test.js.map +7 -0
- package/dist/normalize-identifiers.js +54 -140
- package/dist/normalize-identifiers.js.map +7 -1
- package/dist/normalize-identifiers.test.js +44 -0
- package/dist/normalize-identifiers.test.js.map +7 -0
- package/dist/normalize-qualifying-information.js +23 -48
- package/dist/normalize-qualifying-information.js.map +7 -1
- package/dist/normalize-qualifying-information.test.js +44 -0
- package/dist/normalize-qualifying-information.test.js.map +7 -0
- package/dist/normalize-utf8-diacritics.js +19 -105
- package/dist/normalize-utf8-diacritics.js.map +7 -1
- package/dist/normalize-utf8-diacritics.test.js +44 -0
- package/dist/normalize-utf8-diacritics.test.js.map +7 -0
- package/dist/normalizeFieldForComparison.js +67 -158
- package/dist/normalizeFieldForComparison.js.map +7 -1
- package/dist/normalizeSubfieldValueForComparison.js +37 -77
- package/dist/normalizeSubfieldValueForComparison.js.map +7 -1
- package/dist/prepublicationUtils.js +58 -111
- package/dist/prepublicationUtils.js.map +7 -1
- package/dist/punctuation/index.js +56 -72
- package/dist/punctuation/index.js.map +7 -1
- package/dist/punctuation/rules/aut.js +372 -331
- package/dist/punctuation/rules/aut.js.map +7 -1
- package/dist/punctuation/rules/bib.js +420 -373
- package/dist/punctuation/rules/bib.js.map +7 -1
- package/dist/punctuation/rules/index.js +7 -21
- package/dist/punctuation/rules/index.js.map +7 -1
- package/dist/punctuation.test.js +44 -0
- package/dist/punctuation.test.js.map +7 -0
- package/dist/punctuation2.js +251 -800
- package/dist/punctuation2.js.map +7 -1
- package/dist/punctuation2.test.js +44 -0
- package/dist/punctuation2.test.js.map +7 -0
- package/dist/reindexSubfield6OccurenceNumbers.js +61 -96
- package/dist/reindexSubfield6OccurenceNumbers.js.map +7 -1
- package/dist/reindexSubfield6OccurenceNumbers.test.js +44 -0
- package/dist/reindexSubfield6OccurenceNumbers.test.js.map +7 -0
- package/dist/removeDuplicateDataFields.js +102 -202
- package/dist/removeDuplicateDataFields.js.map +7 -1
- package/dist/removeDuplicateDataFields.test.js +44 -0
- package/dist/removeDuplicateDataFields.test.js.map +7 -0
- package/dist/removeInferiorDataFields.js +103 -227
- package/dist/removeInferiorDataFields.js.map +7 -1
- package/dist/removeInferiorDataFields.test.js +44 -0
- package/dist/removeInferiorDataFields.test.js.map +7 -0
- package/dist/resolvable-ext-references-melinda.js +25 -60
- package/dist/resolvable-ext-references-melinda.js.map +7 -1
- package/dist/resolvable-ext-references-melinda.test.js +160 -0
- package/dist/resolvable-ext-references-melinda.test.js.map +7 -0
- package/dist/resolveOrphanedSubfield6s.js +33 -64
- package/dist/resolveOrphanedSubfield6s.js.map +7 -1
- package/dist/resolveOrphanedSubfield6s.test.js +44 -0
- package/dist/resolveOrphanedSubfield6s.test.js.map +7 -0
- package/dist/sanitize-vocabulary-source-codes.js +27 -55
- package/dist/sanitize-vocabulary-source-codes.js.map +7 -1
- package/dist/sanitize-vocabulary-source-codes.test.js +45 -0
- package/dist/sanitize-vocabulary-source-codes.test.js.map +7 -0
- package/dist/sort-tags.js +13 -25
- package/dist/sort-tags.js.map +7 -1
- package/dist/sort-tags.test.js +261 -0
- package/dist/sort-tags.test.js.map +7 -0
- package/dist/sortFields.js +152 -222
- package/dist/sortFields.js.map +7 -1
- package/dist/sortFields.test.js +44 -0
- package/dist/sortFields.test.js.map +7 -0
- package/dist/sortRelatorTerms.js +30 -68
- package/dist/sortRelatorTerms.js.map +7 -1
- package/dist/sortRelatorTerms.test.js +44 -0
- package/dist/sortRelatorTerms.test.js.map +7 -0
- package/dist/sortSubfields.js +102 -255
- package/dist/sortSubfields.js.map +7 -1
- package/dist/sortSubfields.test.js +44 -0
- package/dist/sortSubfields.test.js.map +7 -0
- package/dist/stripPunctuation.js +13 -36
- package/dist/stripPunctuation.js.map +7 -1
- package/dist/stripPunctuation.test.js +44 -0
- package/dist/stripPunctuation.test.js.map +7 -0
- package/dist/subfield-exclusion.js +28 -75
- package/dist/subfield-exclusion.js.map +7 -1
- package/dist/subfield-exclusion.test.js +471 -0
- package/dist/subfield-exclusion.test.js.map +7 -0
- package/dist/subfield6Utils.js +107 -269
- package/dist/subfield6Utils.js.map +7 -1
- package/dist/subfield8Utils.js +26 -50
- package/dist/subfield8Utils.js.map +7 -1
- package/dist/subfieldValueNormalizations.js +40 -74
- package/dist/subfieldValueNormalizations.js.map +7 -1
- package/dist/subfieldValueNormalizations.test.js +45 -0
- package/dist/subfieldValueNormalizations.test.js.map +7 -0
- package/dist/sync-007-and-300.js +22 -53
- package/dist/sync-007-and-300.js.map +7 -1
- package/dist/sync-007-and-300.test.js +44 -0
- package/dist/sync-007-and-300.test.js.map +7 -0
- package/dist/translate-terms.js +67 -155
- package/dist/translate-terms.js.map +7 -1
- package/dist/translate-terms.test.js +44 -0
- package/dist/translate-terms.test.js.map +7 -0
- package/dist/typeOfDate-008.js +10 -25
- package/dist/typeOfDate-008.js.map +7 -1
- package/dist/typeOfDate-008.test.js +40 -0
- package/dist/typeOfDate-008.test.js.map +7 -0
- package/dist/unicode-decomposition.js +94 -107
- package/dist/unicode-decomposition.js.map +7 -1
- package/dist/unicode-decomposition.test.js +94 -0
- package/dist/unicode-decomposition.test.js.map +7 -0
- package/dist/update-field-540.js +30 -75
- package/dist/update-field-540.js.map +7 -1
- package/dist/update-field-540.test.js +44 -0
- package/dist/update-field-540.test.js.map +7 -0
- package/dist/urn.js +55 -128
- package/dist/urn.js.map +7 -1
- package/dist/urn.test.js +44 -0
- package/dist/urn.test.js.map +7 -0
- package/dist/utils.js +72 -126
- package/dist/utils.js.map +7 -1
- package/eslint.config.mjs +1 -2
- package/package.json +21 -93
- package/src/access-rights.js +1 -1
- package/src/{access-rights.spec.js → access-rights.test.js} +9 -10
- package/src/addMissingField041.js +1 -1
- package/src/{addMissingField336.spec.js → addMissingField041.test.js} +13 -14
- package/src/addMissingField336.js +3 -3
- package/src/{addMissingField041.spec.js → addMissingField336.test.js} +13 -14
- package/src/addMissingField337.js +2 -2
- package/src/{addMissingField337.spec.js → addMissingField337.test.js} +13 -14
- package/src/addMissingField338.js +2 -2
- package/src/{addMissingField338.spec.js → addMissingField338.test.js} +13 -14
- package/src/cyrillux-usemarcon-replacement.js +18 -18
- package/src/cyrillux-usemarcon-replacement.test.js +55 -0
- package/src/cyrillux.js +19 -12
- package/src/{cyrillux.spec.js → cyrillux.test.js} +13 -14
- package/src/disambiguateSeriesStatements.js +2 -2
- package/src/{disambiguateSeriesStatements.spec.js → disambiguateSeriesStatements.test.js} +12 -13
- package/src/double-commas.js +1 -1
- package/src/{double-commas.spec.js → double-commas.test.js} +9 -11
- package/src/duplicates-ind1.js +1 -1
- package/src/{duplicates-ind1.spec.js → duplicates-ind1.test.js} +12 -13
- package/src/{empty-fields.spec.js → empty-fields.test.js} +11 -13
- package/src/ending-punctuation.js +1 -1
- package/src/{ending-punctuation.spec.js → ending-punctuation.test.js} +172 -173
- package/src/{ending-whitespace.spec.js → ending-whitespace.test.js} +12 -13
- package/src/field-008-18-34-character-groups.js +2 -2
- package/src/{field-008-18-34-character-groups.spec.js → field-008-18-34-character-groups.test.js} +13 -13
- package/src/field-505-separators.js +3 -3
- package/src/{field-505-separators.spec.js → field-505-separators.test.js} +16 -14
- package/src/field-521-fix.js +2 -2
- package/src/{field-521-fix.spec.js → field-521-fix.test.js} +12 -13
- package/src/field-exclusion.js +1 -1
- package/src/{field-exclusion.spec.js → field-exclusion.test.js} +60 -57
- package/src/{field-structure.spec.js → field-structure.test.js} +29 -29
- package/src/{fields-present.spec.js → fields-present.test.js} +12 -15
- package/src/fix-33X.js +4 -4
- package/src/{fix-33X.spec.js → fix-33X.test.js} +13 -14
- package/src/fix-country-codes.js +1 -1
- package/src/{fix-country-codes.spec.js → fix-country-codes.test.js} +12 -13
- package/src/fix-language-codes.js +5 -5
- package/src/{fix-language-codes.spec.js → fix-language-codes.test.js} +12 -13
- package/src/fixRelatorTerms.js +5 -5
- package/src/{fixRelatorTerms.spec.js → fixRelatorTerms.test.js} +13 -13
- package/src/{fixed-fields.spec.js → fixed-fields.test.js} +11 -14
- package/src/identical-fields.js +1 -1
- package/src/{identical-fields.spec.js → identical-fields.test.js} +9 -11
- package/src/indicator-fixes.js +3 -3
- package/src/{indicator-fixes.spec.js → indicator-fixes.test.js} +9 -12
- package/src/isbn-issn.js +1 -1
- package/src/{isbn-issn.spec.js → isbn-issn.test.js} +20 -22
- package/src/{item-language.spec.js → item-language.test.js} +21 -22
- package/src/merge-fields/controlSubfields.js +1 -1
- package/src/merge-fields/counterpartField.js +8 -9
- package/src/merge-fields/index.js +1 -1
- package/src/merge-fields/mergableIndicator.js +1 -1
- package/src/merge-fields/mergeField.js +6 -6
- package/src/merge-fields/mergeIndicator.js +1 -1
- package/src/merge-fields/mergeOrAddPostprocess.js +4 -4
- package/src/merge-fields/mergeOrAddSubfield.js +2 -2
- package/src/merge-fields/mergeSubfield.js +4 -4
- package/src/merge-fields/removeDuplicateSubfields.js +2 -2
- package/src/{merge-fields.spec.js → merge-fields.test.js} +12 -13
- package/src/{mergeField500Lisapainokset.spec.js → mergeField500Lisapainokset.test.js} +12 -13
- package/src/mergeRelatorTermFields.js +5 -7
- package/src/{mergeRelatorTermFields.spec.js → mergeRelatorTermFields.test.js} +12 -13
- package/src/modernize-502.js +1 -1
- package/src/{modernize-502.spec.js → modernize-502.test.js} +12 -13
- package/src/multiple-subfield-0.js +3 -3
- package/src/{multiple-subfield-0.spec.js → multiple-subfield-0.test.js} +13 -13
- package/src/{non-breaking-space.spec.js → non-breaking-space.test.js} +12 -13
- package/src/normalize-dashes.js +2 -2
- package/src/{normalize-dashes.spec.js → normalize-dashes.test.js} +12 -13
- package/src/normalize-identifiers.js +1 -1
- package/src/{normalize-identifiers.spec.js → normalize-identifiers.test.js} +12 -13
- package/src/normalize-qualifying-information.js +2 -2
- package/src/{normalize-qualifying-information.spec.js → normalize-qualifying-information.test.js} +12 -13
- package/src/normalize-utf8-diacritics.js +2 -2
- package/src/{normalize-utf8-diacritics.spec.js → normalize-utf8-diacritics.test.js} +13 -13
- package/src/normalizeFieldForComparison.js +6 -6
- package/src/normalizeSubfieldValueForComparison.js +1 -1
- package/src/prepublicationUtils.js +4 -4
- package/src/punctuation/index.js +1 -1
- package/src/punctuation/rules/index.js +2 -2
- package/src/{punctuation.spec.js → punctuation.test.js} +12 -13
- package/src/punctuation2.js +4 -4
- package/src/{punctuation2.spec.js → punctuation2.test.js} +12 -13
- package/src/reindexSubfield6OccurenceNumbers.js +5 -7
- package/src/{reindexSubfield6OccurenceNumbers.spec.js → reindexSubfield6OccurenceNumbers.test.js} +12 -13
- package/src/removeDuplicateDataFields.js +11 -19
- package/src/{removeDuplicateDataFields.spec.js → removeDuplicateDataFields.test.js} +12 -13
- package/src/removeInferiorDataFields.js +11 -11
- package/src/{removeInferiorDataFields.spec.js → removeInferiorDataFields.test.js} +13 -13
- package/src/resolvable-ext-references-melinda.js +1 -1
- package/src/{resolvable-ext-references-melinda.spec.js → resolvable-ext-references-melinda.test.js} +42 -27
- package/src/resolveOrphanedSubfield6s.js +5 -5
- package/src/{resolveOrphanedSubfield6s.spec.js → resolveOrphanedSubfield6s.test.js} +13 -13
- package/src/sanitize-vocabulary-source-codes.js +4 -4
- package/src/{sanitize-vocabulary-source-codes.spec.js → sanitize-vocabulary-source-codes.test.js} +16 -14
- package/src/{sort-tags.spec.js → sort-tags.test.js} +9 -11
- package/src/sortFields.js +4 -4
- package/src/{sortFields.spec.js → sortFields.test.js} +12 -13
- package/src/sortRelatorTerms.js +3 -3
- package/src/{sortRelatorTerms.spec.js → sortRelatorTerms.test.js} +13 -13
- package/src/sortSubfields.js +1 -1
- package/src/{sortSubfields.spec.js → sortSubfields.test.js} +13 -13
- package/src/stripPunctuation.js +3 -3
- package/src/{stripPunctuation.spec.js → stripPunctuation.test.js} +13 -13
- package/src/subfield-exclusion.js +1 -1
- package/src/{subfield-exclusion.spec.js → subfield-exclusion.test.js} +45 -36
- package/src/subfield6Utils.js +6 -10
- package/src/subfield8Utils.js +4 -4
- package/src/subfieldValueNormalizations.js +3 -3
- package/src/{subfieldValueNormalizations.spec.js → subfieldValueNormalizations.test.js} +18 -14
- package/src/sync-007-and-300.js +2 -2
- package/src/{sync-007-and-300.spec.js → sync-007-and-300.test.js} +13 -13
- package/src/translate-terms.js +3 -3
- package/src/{translate-terms.spec.js → translate-terms.test.js} +13 -13
- package/src/{typeOfDate-008.spec.js → typeOfDate-008.test.js} +12 -13
- package/src/{unicode-decomposition.spec.js → unicode-decomposition.test.js} +10 -16
- package/src/update-field-540.js +2 -2
- package/src/{update-field-540.spec.js → update-field-540.test.js} +13 -10
- package/src/urn.js +2 -2
- package/src/{urn.spec.js → urn.test.js} +12 -13
- package/src/utils.js +3 -3
- package/test-fixtures/field-505-separators/03/expectedResult.json +3 -1
- package/test-fixtures/field-505-separators/03/record.json +3 -0
- package/test-fixtures/normalize-subfield-value/01/metadata.json +4 -1
- package/test-fixtures/normalize-subfield-value/01/record.json +3 -0
- package/test-fixtures/normalize-subfield-value/02/expectedResult.json +3 -1
- package/test-fixtures/normalize-subfield-value/02/metadata.json +2 -1
- package/test-fixtures/normalize-subfield-value/02/record.json +3 -0
- package/test-fixtures/sanitize-vocabulary-source-codes/f03/expectedResult.json +3 -1
- package/test-fixtures/sanitize-vocabulary-source-codes/f04/expectedResult.json +3 -1
- package/test-fixtures/sanitize-vocabulary-source-codes/v04/metadata.json +1 -4
- package/test-fixtures/sanitize-vocabulary-source-codes/v04/record.json +1 -1
- package/dist/access-rights.spec.js +0 -195
- package/dist/access-rights.spec.js.map +0 -1
- package/dist/addMissingField041.spec.js +0 -45
- package/dist/addMissingField041.spec.js.map +0 -1
- package/dist/addMissingField336.spec.js +0 -45
- package/dist/addMissingField336.spec.js.map +0 -1
- package/dist/addMissingField337.spec.js +0 -43
- package/dist/addMissingField337.spec.js.map +0 -1
- package/dist/addMissingField338.spec.js +0 -45
- package/dist/addMissingField338.spec.js.map +0 -1
- package/dist/cyrillux-usemarcon-replacement.spec.js +0 -45
- package/dist/cyrillux-usemarcon-replacement.spec.js.map +0 -1
- package/dist/cyrillux.spec.js +0 -46
- package/dist/cyrillux.spec.js.map +0 -1
- package/dist/disambiguateSeriesStatements.spec.js +0 -51
- package/dist/disambiguateSeriesStatements.spec.js.map +0 -1
- package/dist/double-commas.spec.js +0 -73
- package/dist/double-commas.spec.js.map +0 -1
- package/dist/duplicates-ind1.spec.js +0 -45
- package/dist/duplicates-ind1.spec.js.map +0 -1
- package/dist/empty-fields.spec.js +0 -118
- package/dist/empty-fields.spec.js.map +0 -1
- package/dist/ending-punctuation.spec.js +0 -2654
- package/dist/ending-punctuation.spec.js.map +0 -1
- package/dist/ending-whitespace.spec.js +0 -42
- package/dist/ending-whitespace.spec.js.map +0 -1
- package/dist/field-008-18-34-character-groups.spec.js +0 -51
- package/dist/field-008-18-34-character-groups.spec.js.map +0 -1
- package/dist/field-505-separators.spec.js +0 -51
- package/dist/field-505-separators.spec.js.map +0 -1
- package/dist/field-521-fix.spec.js +0 -51
- package/dist/field-521-fix.spec.js.map +0 -1
- package/dist/field-exclusion.spec.js +0 -1054
- package/dist/field-exclusion.spec.js.map +0 -1
- package/dist/field-structure.spec.js +0 -535
- package/dist/field-structure.spec.js.map +0 -1
- package/dist/fields-present.spec.js +0 -121
- package/dist/fields-present.spec.js.map +0 -1
- package/dist/fix-33X.spec.js +0 -45
- package/dist/fix-33X.spec.js.map +0 -1
- package/dist/fix-country-codes.spec.js +0 -51
- package/dist/fix-country-codes.spec.js.map +0 -1
- package/dist/fix-language-codes.spec.js +0 -44
- package/dist/fix-language-codes.spec.js.map +0 -1
- package/dist/fixRelatorTerms.spec.js +0 -51
- package/dist/fixRelatorTerms.spec.js.map +0 -1
- package/dist/fixed-fields.spec.js +0 -140
- package/dist/fixed-fields.spec.js.map +0 -1
- package/dist/identical-fields.spec.js +0 -99
- package/dist/identical-fields.spec.js.map +0 -1
- package/dist/indicator-fixes.spec.js +0 -51
- package/dist/indicator-fixes.spec.js.map +0 -1
- package/dist/isbn-issn.spec.js +0 -595
- package/dist/isbn-issn.spec.js.map +0 -1
- package/dist/item-language.spec.js +0 -306
- package/dist/item-language.spec.js.map +0 -1
- package/dist/melindaCustomMergeFields.json +0 -5120
- package/dist/merge-fields.spec.js +0 -51
- package/dist/merge-fields.spec.js.map +0 -1
- package/dist/mergeField500Lisapainokset.spec.js +0 -51
- package/dist/mergeField500Lisapainokset.spec.js.map +0 -1
- package/dist/mergeRelatorTermFields.spec.js +0 -51
- package/dist/mergeRelatorTermFields.spec.js.map +0 -1
- package/dist/modernize-502.spec.js +0 -49
- package/dist/modernize-502.spec.js.map +0 -1
- package/dist/multiple-subfield-0.spec.js +0 -51
- package/dist/multiple-subfield-0.spec.js.map +0 -1
- package/dist/non-breaking-space.spec.js +0 -42
- package/dist/non-breaking-space.spec.js.map +0 -1
- package/dist/normalize-dashes.spec.js +0 -51
- package/dist/normalize-dashes.spec.js.map +0 -1
- package/dist/normalize-identifiers.spec.js +0 -51
- package/dist/normalize-identifiers.spec.js.map +0 -1
- package/dist/normalize-qualifying-information.spec.js +0 -51
- package/dist/normalize-qualifying-information.spec.js.map +0 -1
- package/dist/normalize-utf8-diacritics.spec.js +0 -51
- package/dist/normalize-utf8-diacritics.spec.js.map +0 -1
- package/dist/punctuation.spec.js +0 -51
- package/dist/punctuation.spec.js.map +0 -1
- package/dist/punctuation2.spec.js +0 -51
- package/dist/punctuation2.spec.js.map +0 -1
- package/dist/reindexSubfield6OccurenceNumbers.spec.js +0 -51
- package/dist/reindexSubfield6OccurenceNumbers.spec.js.map +0 -1
- package/dist/removeDuplicateDataFields.spec.js +0 -51
- package/dist/removeDuplicateDataFields.spec.js.map +0 -1
- package/dist/removeInferiorDataFields.spec.js +0 -51
- package/dist/removeInferiorDataFields.spec.js.map +0 -1
- package/dist/resolvable-ext-references-melinda.spec.js +0 -166
- package/dist/resolvable-ext-references-melinda.spec.js.map +0 -1
- package/dist/resolveOrphanedSubfield6s.spec.js +0 -51
- package/dist/resolveOrphanedSubfield6s.spec.js.map +0 -1
- package/dist/sanitize-vocabulary-source-codes.spec.js +0 -51
- package/dist/sanitize-vocabulary-source-codes.spec.js.map +0 -1
- package/dist/sort-tags.spec.js +0 -207
- package/dist/sort-tags.spec.js.map +0 -1
- package/dist/sortFields.spec.js +0 -51
- package/dist/sortFields.spec.js.map +0 -1
- package/dist/sortRelatorTerms.spec.js +0 -51
- package/dist/sortRelatorTerms.spec.js.map +0 -1
- package/dist/sortSubfields.spec.js +0 -52
- package/dist/sortSubfields.spec.js.map +0 -1
- package/dist/stripPunctuation.spec.js +0 -51
- package/dist/stripPunctuation.spec.js.map +0 -1
- package/dist/subfield-exclusion.spec.js +0 -523
- package/dist/subfield-exclusion.spec.js.map +0 -1
- package/dist/subfieldValueNormalizations.spec.js +0 -51
- package/dist/subfieldValueNormalizations.spec.js.map +0 -1
- package/dist/sync-007-and-300.spec.js +0 -51
- package/dist/sync-007-and-300.spec.js.map +0 -1
- package/dist/translate-terms.spec.js +0 -51
- package/dist/translate-terms.spec.js.map +0 -1
- package/dist/typeOfDate-008.spec.js +0 -47
- package/dist/typeOfDate-008.spec.js.map +0 -1
- package/dist/unicode-decomposition.spec.js +0 -91
- package/dist/unicode-decomposition.spec.js.map +0 -1
- package/dist/update-field-540.spec.js +0 -51
- package/dist/update-field-540.spec.js.map +0 -1
- package/dist/urn.spec.js +0 -52
- package/dist/urn.spec.js.map +0 -1
- package/src/cyrillux-usemarcon-replacement.spec.js +0 -47
package/dist/sortFields.js
CHANGED
|
@@ -1,48 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}
|
|
6
|
-
exports.default = _default;
|
|
7
|
-
exports.fieldOrderComparator = fieldOrderComparator;
|
|
8
|
-
exports.scoreRelatorTerm = scoreRelatorTerm;
|
|
9
|
-
var _clone = _interopRequireDefault(require("clone"));
|
|
10
|
-
var _utils = require("./utils");
|
|
11
|
-
var _marcFieldSort = require("@natlibfi/marc-record/dist/marcFieldSort");
|
|
12
|
-
var _subfield8Utils = require("./subfield8Utils");
|
|
13
|
-
var _subfield6Utils = require("./subfield6Utils");
|
|
14
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
15
|
-
// Taken from project marc-record-js, file marcSortFields.js as this contains more and more Melinda-specific rules.
|
|
16
|
-
|
|
17
|
-
//import createDebugLogger from 'debug';
|
|
18
|
-
|
|
19
|
-
//const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:sortFields');
|
|
20
|
-
//const debugData = debug.extend('data');
|
|
21
|
-
//const debugDev = debug.extend('dev');
|
|
22
|
-
|
|
1
|
+
import clone from "clone";
|
|
2
|
+
import { fieldHasSubfield, fieldToString } from "./utils.js";
|
|
3
|
+
import { sortByTag, sortAlphabetically, fieldOrderComparator as globalFieldOrderComparator } from "@natlibfi/marc-record/dist/marcFieldSort.js";
|
|
4
|
+
import { isValidSubfield8 } from "./subfield8Utils.js";
|
|
5
|
+
import { fieldGetUnambiguousOccurrenceNumber, fieldGetUnambiguousTag } from "./subfield6Utils.js";
|
|
23
6
|
const BIG_BAD_NUMBER = 999999999;
|
|
24
|
-
function
|
|
7
|
+
export default function() {
|
|
25
8
|
return {
|
|
26
|
-
description:
|
|
9
|
+
description: "Sort fields using both generic and Melinda specific rules",
|
|
27
10
|
validate,
|
|
28
11
|
fix
|
|
29
12
|
};
|
|
30
13
|
function fix(record) {
|
|
31
|
-
const res = {
|
|
32
|
-
message: [],
|
|
33
|
-
fix: [],
|
|
34
|
-
valid: true
|
|
35
|
-
};
|
|
14
|
+
const res = { message: [], fix: [], valid: true };
|
|
36
15
|
record.fields.sort(fieldOrderComparator);
|
|
37
16
|
return res;
|
|
38
17
|
}
|
|
39
18
|
function validate(record) {
|
|
40
|
-
const res = {
|
|
41
|
-
|
|
42
|
-
};
|
|
43
|
-
const fields = record.fields.map(f => (0, _clone.default)(f));
|
|
19
|
+
const res = { message: [] };
|
|
20
|
+
const fields = record.fields.map((f) => clone(f));
|
|
44
21
|
fields.sort(fieldOrderComparator);
|
|
45
|
-
const relocatedFields = fields.filter((f, i) =>
|
|
22
|
+
const relocatedFields = fields.filter((f, i) => fieldToString(f) !== fieldToString(record.fields[i]));
|
|
46
23
|
if (relocatedFields.length > 0) {
|
|
47
24
|
res.message.push(`${relocatedFields.length} field(s) in new places`);
|
|
48
25
|
}
|
|
@@ -58,136 +35,132 @@ const relatorTermScore = {
|
|
|
58
35
|
// We should 1) check the order of these, and 2) add translations (support Swedish at the very least)
|
|
59
36
|
// work/teos > expression/ekspressio > manifestation/manifestaatin,
|
|
60
37
|
// Work https://finto.fi/mts/fi/page/m1298
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
38
|
+
"s\xE4velt\xE4j\xE4": 100,
|
|
39
|
+
"composer": 100,
|
|
40
|
+
"kirjoittaja": 100,
|
|
41
|
+
"author": 100,
|
|
42
|
+
"libretisti": 100,
|
|
43
|
+
"sarjakuvantekij\xE4": 100,
|
|
44
|
+
"soitonoppaan tekij\xE4": 100,
|
|
45
|
+
"kartantekij\xE4": 99,
|
|
46
|
+
"taiteilija": 98,
|
|
47
|
+
"designer": 90,
|
|
48
|
+
"sanoittaja": 90,
|
|
49
|
+
"k\xE4sikirjoittaja": 90,
|
|
50
|
+
"kuvaaja": 89,
|
|
51
|
+
"valokuvaaja": 89,
|
|
52
|
+
"kokoaja": 86,
|
|
53
|
+
"alkuper\xE4isidean luoja": 85,
|
|
54
|
+
"teoksella kunnioitettu": 84,
|
|
55
|
+
"gratulaation kohde": 84,
|
|
56
|
+
"julkaisija": 82,
|
|
57
|
+
"tuottaja": 81,
|
|
81
58
|
// expression: https://finto.fi/mts/fi/page/m153
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
59
|
+
"sovittaja": 79,
|
|
60
|
+
"arranger": 79,
|
|
61
|
+
"toimittaja": 78,
|
|
62
|
+
"editor": 78,
|
|
63
|
+
"kuvittaja": 77,
|
|
64
|
+
"esipuheen kirjoittaja": 76,
|
|
65
|
+
"alkusanojen kirjoittaja": 75,
|
|
66
|
+
"loppusanojen kirjoittaja": 75,
|
|
67
|
+
"esitt\xE4j\xE4": 74,
|
|
68
|
+
"johtaja": 73,
|
|
92
69
|
// orkesterinjohtaja
|
|
93
|
-
|
|
70
|
+
"editointi": 71,
|
|
94
71
|
// for music, editor/toimittaja is another thing
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
72
|
+
"k\xE4\xE4nt\xE4j\xE4": 70,
|
|
73
|
+
"lukija": 61,
|
|
74
|
+
"kertoja": 61,
|
|
98
75
|
// Manifestation level: https://finto.fi/mts/fi/page/m491
|
|
99
|
-
|
|
100
|
-
|
|
76
|
+
"graafinen suunnittelija": 50,
|
|
77
|
+
"kustantaja": 41
|
|
101
78
|
// Item level: https://finto.fi/mts/fi/page/m1157
|
|
102
79
|
};
|
|
103
80
|
const relatorTermScoreBk = {
|
|
104
81
|
// https://finto.fi/mts/fi/page/m34 100-81
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
82
|
+
"libretisti": 100,
|
|
83
|
+
"sarjakuvantekij\xE4": 100,
|
|
84
|
+
"kirjoittaja": 99,
|
|
85
|
+
"author": 99,
|
|
86
|
+
"soitonoppaan tekij\xE4": 99,
|
|
87
|
+
"kuvaaja": 98,
|
|
88
|
+
"valokuvaaja": 98,
|
|
89
|
+
"kokoaja": 86,
|
|
90
|
+
"designer": 86,
|
|
91
|
+
"alkuper\xE4isidean luoja": 85,
|
|
92
|
+
"teoksella kunnioitettu": 84,
|
|
93
|
+
"gratulaation kohde": 84,
|
|
94
|
+
"s\xE4velt\xE4j\xE4": 83,
|
|
118
95
|
// if 300$e has CD etc
|
|
119
|
-
|
|
120
|
-
|
|
96
|
+
"sanoittaja": 82,
|
|
97
|
+
"julkaisija": 81,
|
|
121
98
|
// expression: https://finto.fi/mts/fi/page/m153
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
99
|
+
"toimittaja": 78,
|
|
100
|
+
"kuvittaja": 77,
|
|
101
|
+
"esipuheen kirjoittaja": 76,
|
|
102
|
+
"alkusanojen kirjoittaja": 75,
|
|
103
|
+
"loppusanojen kirjoittaja": 75,
|
|
104
|
+
"k\xE4\xE4nt\xE4j\xE4": 70,
|
|
105
|
+
"sovittaja": 50,
|
|
129
106
|
// manifestaatio
|
|
130
|
-
|
|
107
|
+
"graafinen suunnittelija": 40,
|
|
131
108
|
// kappale/item
|
|
132
|
-
|
|
133
|
-
|
|
109
|
+
"sitoja": 25,
|
|
110
|
+
"gratulaation kirjoittaja": 24
|
|
134
111
|
};
|
|
135
112
|
const relatorTermScoreMu = {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
113
|
+
"s\xE4velt\xE4j\xE4": 100,
|
|
114
|
+
"sanoittaja": 99,
|
|
115
|
+
"soitonoppaan tekij\xE4": 98,
|
|
116
|
+
"alkuper\xE4isidean luoja": 85,
|
|
117
|
+
"teoksella kunnioitettu": 81,
|
|
141
118
|
// expression: https://finto.fi/mts/fi/page/m153
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
119
|
+
"sovittaja": 79,
|
|
120
|
+
"johtaja": 78,
|
|
121
|
+
"esitt\xE4j\xE4": 77,
|
|
122
|
+
"lukija": 76,
|
|
123
|
+
"miksaaja": 75,
|
|
147
124
|
// manifestaatio
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
125
|
+
"esitt\xE4j\xE4 (manifestaatio)": 69,
|
|
126
|
+
"graafinen suunnittelija": 50,
|
|
127
|
+
"valmistaja": 41,
|
|
128
|
+
"jakaja": 40
|
|
152
129
|
// kappale/item
|
|
153
130
|
};
|
|
154
131
|
const relatorTermScoreVm = {
|
|
155
132
|
// Visual Material
|
|
156
133
|
// Work
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
134
|
+
"ohjaaja": 100,
|
|
135
|
+
"kirjoittaja": 99,
|
|
136
|
+
"author": 99,
|
|
160
137
|
// Here we assume that film/whatever is based on author's book
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
138
|
+
"k\xE4sikirjoittaja": 98,
|
|
139
|
+
"designer": 98,
|
|
140
|
+
"kuvaaja": 89,
|
|
141
|
+
"s\xE4velt\xE4j\xE4": 86,
|
|
165
142
|
// Volatile. John Williams?
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
143
|
+
"alkuper\xE4isidean luoja": 85,
|
|
144
|
+
"julkaisija": 82,
|
|
145
|
+
"tuottaja": 81,
|
|
169
146
|
// Expression
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
147
|
+
"leikkaaja": 80,
|
|
148
|
+
"sovittaja": 79,
|
|
149
|
+
"johtaja": 78,
|
|
150
|
+
"esitt\xE4j\xE4": 77,
|
|
151
|
+
"lukija": 76,
|
|
152
|
+
"miksaaja": 75,
|
|
153
|
+
"k\xE4\xE4nt\xE4j\xE4": 70,
|
|
177
154
|
// Manifestation
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
155
|
+
"kaivertaja": 60,
|
|
156
|
+
"graafinen suunnittelija": 59,
|
|
157
|
+
"kustantaja": 42,
|
|
158
|
+
"elokuvan jakelija": 41,
|
|
159
|
+
"jakaja": 41
|
|
184
160
|
// Item
|
|
185
161
|
};
|
|
186
162
|
function normalizeValue(value) {
|
|
187
|
-
|
|
188
|
-
// We don't handle abbreviations here etc.
|
|
189
|
-
// Brackets should not happen either, should they?
|
|
190
|
-
return value.replace(/[.,]$/u, '');
|
|
163
|
+
return value.replace(/[.,]$/u, "");
|
|
191
164
|
}
|
|
192
165
|
function scoreRelatorTermBk(normalizedValue) {
|
|
193
166
|
if (normalizedValue in relatorTermScoreBk) {
|
|
@@ -207,19 +180,15 @@ function scoreRelatorTermVm(normalizedValue) {
|
|
|
207
180
|
}
|
|
208
181
|
return 0;
|
|
209
182
|
}
|
|
210
|
-
function scoreRelatorTerm(value, typeOfMaterial =
|
|
211
|
-
// NB! We are currently using type of material only for sorting relator terms, not 7XX fields!!!
|
|
183
|
+
export function scoreRelatorTerm(value, typeOfMaterial = void 0) {
|
|
212
184
|
const normalizedValue = normalizeValue(value);
|
|
213
|
-
if (typeOfMaterial ===
|
|
214
|
-
// Books
|
|
185
|
+
if (typeOfMaterial === "BK") {
|
|
215
186
|
return scoreRelatorTermBk(normalizedValue);
|
|
216
187
|
}
|
|
217
|
-
if (typeOfMaterial ===
|
|
218
|
-
// Music (NB: audio books should be BK in this context!)
|
|
188
|
+
if (typeOfMaterial === "MU") {
|
|
219
189
|
return scoreRelatorTermMu(normalizedValue);
|
|
220
190
|
}
|
|
221
|
-
if (typeOfMaterial ===
|
|
222
|
-
// video material
|
|
191
|
+
if (typeOfMaterial === "VM") {
|
|
223
192
|
return scoreRelatorTermVm(normalizedValue);
|
|
224
193
|
}
|
|
225
194
|
if (normalizedValue in relatorTermScore) {
|
|
@@ -227,44 +196,25 @@ function scoreRelatorTerm(value, typeOfMaterial = undefined) {
|
|
|
227
196
|
}
|
|
228
197
|
return 0;
|
|
229
198
|
}
|
|
230
|
-
function fieldOrderComparator(fieldA, fieldB) {
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
const sorterFunctions = [_marcFieldSort.sortByTag, sortByIndexTerms, _marcFieldSort.sortAlphabetically, sortByRelatorTerm, sortBySubfield6, preferFenniKeep, sortByFieldLinkAndSequenceNumber];
|
|
234
|
-
//const sorterFunctions = [sortByIndexTerms, sortByRelatorTerm, sortByOccurrenceNumber, preferFenniKeep, sortByFieldLinkAndSequenceNumber];
|
|
235
|
-
|
|
236
|
-
return (0, _marcFieldSort.fieldOrderComparator)(fieldA, fieldB, sorterFunctions);
|
|
199
|
+
export function fieldOrderComparator(fieldA, fieldB) {
|
|
200
|
+
const sorterFunctions = [sortByTag, sortByIndexTerms, sortAlphabetically, sortByRelatorTerm, sortBySubfield6, preferFenniKeep, sortByFieldLinkAndSequenceNumber];
|
|
201
|
+
return globalFieldOrderComparator(fieldA, fieldB, sorterFunctions);
|
|
237
202
|
}
|
|
238
203
|
function sortByIndexTerms(fieldA, fieldB) {
|
|
239
|
-
const indexTermFields = [
|
|
204
|
+
const indexTermFields = ["600", "610", "611", "630", "648", "650", "651", "652", "653", "654", "655", "656", "657", "658", "659", "662"];
|
|
240
205
|
function scoreInd2(val) {
|
|
241
|
-
const ind2Score = {
|
|
242
|
-
'0': 0,
|
|
243
|
-
'1': 1,
|
|
244
|
-
'2': 2,
|
|
245
|
-
'3': 3,
|
|
246
|
-
'4': 8,
|
|
247
|
-
'5': 5,
|
|
248
|
-
'6': 6,
|
|
249
|
-
'7': 7
|
|
250
|
-
};
|
|
206
|
+
const ind2Score = { "0": 0, "1": 1, "2": 2, "3": 3, "4": 8, "5": 5, "6": 6, "7": 7 };
|
|
251
207
|
if (val in ind2Score) {
|
|
252
208
|
return ind2Score[val];
|
|
253
209
|
}
|
|
254
210
|
return 9;
|
|
255
211
|
}
|
|
256
|
-
|
|
257
|
-
// ATM this is not needed.
|
|
258
|
-
// You may need this, if you change compare function order in sorterFunctions
|
|
259
|
-
// istanbul ignore next
|
|
260
212
|
if (fieldA.tag !== fieldB.tag) {
|
|
261
213
|
return 0;
|
|
262
214
|
}
|
|
263
215
|
if (!indexTermFields.includes(fieldA.tag)) {
|
|
264
216
|
return 0;
|
|
265
217
|
}
|
|
266
|
-
|
|
267
|
-
// Puts ind2=4 last
|
|
268
218
|
if (scoreInd2(fieldA.ind2) > scoreInd2(fieldB.ind2)) {
|
|
269
219
|
return 1;
|
|
270
220
|
}
|
|
@@ -273,46 +223,42 @@ function sortByIndexTerms(fieldA, fieldB) {
|
|
|
273
223
|
}
|
|
274
224
|
function scoreDictionary(dictionary) {
|
|
275
225
|
const dictionarySortIndex = {
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
226
|
+
"yso/fin": 0,
|
|
227
|
+
"yso/swe": 1,
|
|
228
|
+
"yso/eng": 2,
|
|
229
|
+
"slm/fin": 0.1,
|
|
230
|
+
"slm/swe": 1.1,
|
|
231
|
+
"kauno/fin": 2.1,
|
|
232
|
+
"kauno/swe": 2.2,
|
|
233
|
+
"kaunokki": 4,
|
|
234
|
+
"bella": 5
|
|
285
235
|
};
|
|
286
236
|
if (dictionary in dictionarySortIndex) {
|
|
287
237
|
return dictionarySortIndex[dictionary];
|
|
288
238
|
}
|
|
289
239
|
return BIG_BAD_NUMBER;
|
|
290
240
|
}
|
|
291
|
-
const dictionaryA = selectFirstValue(fieldA,
|
|
292
|
-
const dictionaryB = selectFirstValue(fieldB,
|
|
241
|
+
const dictionaryA = selectFirstValue(fieldA, "2");
|
|
242
|
+
const dictionaryB = selectFirstValue(fieldB, "2");
|
|
293
243
|
const dictScoreA = scoreDictionary(dictionaryA);
|
|
294
244
|
const dictScoreB = scoreDictionary(dictionaryB);
|
|
295
|
-
// Use priority order for listed dictionaries:
|
|
296
245
|
if (dictScoreA > dictScoreB) {
|
|
297
246
|
return 1;
|
|
298
247
|
}
|
|
299
248
|
if (dictScoreA < dictScoreB) {
|
|
300
249
|
return -1;
|
|
301
250
|
}
|
|
302
|
-
// Unlisted dictionaries: sort $2 value alphabetically:
|
|
303
|
-
//if (dictScoreA === BIG_BAD_NUMBER) {
|
|
304
251
|
if (dictionaryA > dictionaryB) {
|
|
305
252
|
return 1;
|
|
306
253
|
}
|
|
307
254
|
if (dictionaryA < dictionaryB) {
|
|
308
255
|
return -1;
|
|
309
256
|
}
|
|
310
|
-
//}
|
|
311
257
|
return 0;
|
|
312
258
|
}
|
|
313
|
-
function preferKeep(fieldA, fieldB, keepOwner =
|
|
314
|
-
const hasKeepA =
|
|
315
|
-
const hasKeepB =
|
|
259
|
+
function preferKeep(fieldA, fieldB, keepOwner = "FENNI") {
|
|
260
|
+
const hasKeepA = fieldHasSubfield(fieldA, "9", `${keepOwner}<KEEP>`);
|
|
261
|
+
const hasKeepB = fieldHasSubfield(fieldB, "9", `${keepOwner}<KEEP>`);
|
|
316
262
|
if (hasKeepA && !hasKeepB) {
|
|
317
263
|
return -1;
|
|
318
264
|
}
|
|
@@ -322,37 +268,33 @@ function preferKeep(fieldA, fieldB, keepOwner = 'FENNI') {
|
|
|
322
268
|
return 0;
|
|
323
269
|
}
|
|
324
270
|
function preferFenniKeep(fieldA, fieldB) {
|
|
325
|
-
const fenniPreference = preferKeep(fieldA, fieldB,
|
|
271
|
+
const fenniPreference = preferKeep(fieldA, fieldB, "FENNI");
|
|
326
272
|
if (fenniPreference !== 0) {
|
|
327
273
|
return fenniPreference;
|
|
328
274
|
}
|
|
329
|
-
const violaPreference = preferKeep(fieldA, fieldB,
|
|
275
|
+
const violaPreference = preferKeep(fieldA, fieldB, "VIOLA");
|
|
330
276
|
if (violaPreference !== 0) {
|
|
331
277
|
return violaPreference;
|
|
332
278
|
}
|
|
333
|
-
return preferKeep(fieldA, fieldB,
|
|
279
|
+
return preferKeep(fieldA, fieldB, "FIKKA");
|
|
334
280
|
}
|
|
335
281
|
function sortByRelatorTerm(fieldA, fieldB) {
|
|
336
|
-
|
|
337
|
-
if (!['700', '710', '711', '730'].includes(fieldA.tag)) {
|
|
282
|
+
if (!["700", "710", "711", "730"].includes(fieldA.tag)) {
|
|
338
283
|
return 0;
|
|
339
284
|
}
|
|
340
285
|
function fieldGetMaxRelatorTermScore(field) {
|
|
341
286
|
if (!field.subfields) {
|
|
342
287
|
return -2;
|
|
343
288
|
}
|
|
344
|
-
|
|
345
|
-
if ((0, _utils.fieldHasSubfield)(field, 't')) {
|
|
289
|
+
if (fieldHasSubfield(field, "t")) {
|
|
346
290
|
return -2;
|
|
347
291
|
}
|
|
348
|
-
const relatorSubfieldCode = [
|
|
349
|
-
const e = field.subfields.filter(sf => sf.code === relatorSubfieldCode);
|
|
292
|
+
const relatorSubfieldCode = ["611", "711", "811"].includes(field.tag) ? "j" : "e";
|
|
293
|
+
const e = field.subfields.filter((sf) => sf.code === relatorSubfieldCode);
|
|
350
294
|
if (e.length === 0) {
|
|
351
|
-
// No $e is still better than having a $t
|
|
352
295
|
return -1;
|
|
353
296
|
}
|
|
354
|
-
const scores = e.map(sf => scoreRelatorTerm(sf.value));
|
|
355
|
-
//debugDev(`RELATOR SCORE FOR '${fieldToString(field)}': ${scores.join(', ')}`);
|
|
297
|
+
const scores = e.map((sf) => scoreRelatorTerm(sf.value));
|
|
356
298
|
return Math.max(...scores);
|
|
357
299
|
}
|
|
358
300
|
const scoreA = fieldGetMaxRelatorTermScore(fieldA);
|
|
@@ -369,20 +311,16 @@ function fieldGetMinLinkAndSequenceNumber(field) {
|
|
|
369
311
|
if (!field.subfields) {
|
|
370
312
|
return BIG_BAD_NUMBER;
|
|
371
313
|
}
|
|
372
|
-
const relevantSubfields = field.subfields.filter(sf =>
|
|
373
|
-
|
|
374
|
-
const scores = relevantSubfields.map(sf => parseFloat(sf.value.replace(/\\.*$/u, '')));
|
|
314
|
+
const relevantSubfields = field.subfields.filter((sf) => isValidSubfield8(sf));
|
|
315
|
+
const scores = relevantSubfields.map((sf) => parseFloat(sf.value.replace(/\\.*$/u, "")));
|
|
375
316
|
if (scores.length === 0) {
|
|
376
317
|
return BIG_BAD_NUMBER;
|
|
377
318
|
}
|
|
378
319
|
return Math.min(...scores);
|
|
379
320
|
}
|
|
380
321
|
function sortByFieldLinkAndSequenceNumber(fieldA, fieldB) {
|
|
381
|
-
// Sort by subfield $8 that is...
|
|
382
322
|
const scoreA = fieldGetMinLinkAndSequenceNumber(fieldA);
|
|
383
323
|
const scoreB = fieldGetMinLinkAndSequenceNumber(fieldB);
|
|
384
|
-
//debugDev(` sf-8-A-score for '${fieldToString(fieldA)}: ${scoreA}`);
|
|
385
|
-
//debugDev(` sf-8-B-score for '${fieldToString(fieldB)}: ${scoreB}`);
|
|
386
324
|
if (scoreA === scoreB) {
|
|
387
325
|
return 0;
|
|
388
326
|
}
|
|
@@ -393,19 +331,17 @@ function sortByFieldLinkAndSequenceNumber(fieldA, fieldB) {
|
|
|
393
331
|
return -1;
|
|
394
332
|
}
|
|
395
333
|
if (scoreA > scoreB) {
|
|
396
|
-
// smaller is better
|
|
397
334
|
return 1;
|
|
398
335
|
}
|
|
399
336
|
return -1;
|
|
400
337
|
}
|
|
401
338
|
function sortBySubfield6(fieldA, fieldB) {
|
|
402
|
-
|
|
403
|
-
if (fieldA.tag !== '880' || fieldB.tag !== '880') {
|
|
339
|
+
if (fieldA.tag !== "880" || fieldB.tag !== "880") {
|
|
404
340
|
return 0;
|
|
405
341
|
}
|
|
406
342
|
function compareLinkingTags() {
|
|
407
|
-
const tagStringA =
|
|
408
|
-
const tagStringB =
|
|
343
|
+
const tagStringA = fieldGetUnambiguousTag(fieldA);
|
|
344
|
+
const tagStringB = fieldGetUnambiguousTag(fieldB);
|
|
409
345
|
if (tagStringA === tagStringB || !tagStringA || !tagStringB) {
|
|
410
346
|
return 0;
|
|
411
347
|
}
|
|
@@ -415,29 +351,23 @@ function sortBySubfield6(fieldA, fieldB) {
|
|
|
415
351
|
return -1;
|
|
416
352
|
}
|
|
417
353
|
function compareOccurrenceNumbers() {
|
|
418
|
-
const stringA =
|
|
419
|
-
const stringB =
|
|
354
|
+
const stringA = fieldGetUnambiguousOccurrenceNumber(fieldA);
|
|
355
|
+
const stringB = fieldGetUnambiguousOccurrenceNumber(fieldB);
|
|
420
356
|
if (stringA === stringB) {
|
|
421
|
-
// No action required here
|
|
422
357
|
return 0;
|
|
423
358
|
}
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
if (!stringB || stringB === '00') {
|
|
427
|
-
if (!stringA || stringA === '00') {
|
|
359
|
+
if (!stringB || stringB === "00") {
|
|
360
|
+
if (!stringA || stringA === "00") {
|
|
428
361
|
return 0;
|
|
429
362
|
}
|
|
430
363
|
return -1;
|
|
431
364
|
}
|
|
432
|
-
if (!stringA || stringA ===
|
|
365
|
+
if (!stringA || stringA === "00") {
|
|
433
366
|
return 1;
|
|
434
367
|
}
|
|
435
|
-
|
|
436
|
-
// NB! We need compare ints as occurrence number can exceed 99 and be a three-digit value!
|
|
437
368
|
const scoreA = parseInt(stringA, 10);
|
|
438
369
|
const scoreB = parseInt(stringB, 10);
|
|
439
370
|
if (scoreA > scoreB) {
|
|
440
|
-
// smaller is better, thus '00' is the best
|
|
441
371
|
return 1;
|
|
442
372
|
}
|
|
443
373
|
return -1;
|
|
@@ -449,6 +379,6 @@ function sortBySubfield6(fieldA, fieldB) {
|
|
|
449
379
|
return compareOccurrenceNumbers();
|
|
450
380
|
}
|
|
451
381
|
function selectFirstValue(field, subcode) {
|
|
452
|
-
return field.subfields.filter(subfield => subcode === subfield.code).map(subfield => subfield.value).slice(0, 1);
|
|
382
|
+
return field.subfields.filter((subfield) => subcode === subfield.code).map((subfield) => subfield.value).slice(0, 1);
|
|
453
383
|
}
|
|
454
|
-
//# sourceMappingURL=sortFields.js.map
|
|
384
|
+
//# sourceMappingURL=sortFields.js.map
|