@natlibfi/marc-record-validators-melinda 11.6.7 → 12.0.0-alpha.12
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 → melinda-node-tests-and-publish.yml} +37 -12
- 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 +43 -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 +873 -769
- package/dist/ending-punctuation-conf.js.map +7 -1
- package/dist/ending-punctuation.js +156 -169
- package/dist/ending-punctuation.js.map +7 -1
- package/dist/ending-punctuation.test.js +2385 -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 +182 -413
- package/dist/index.js.map +7 -1
- package/dist/indicator-fixes.js +66 -94
- 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 +71 -128
- 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 +187 -379
- package/dist/merge-fields/counterpartField.js.map +7 -1
- package/dist/merge-fields/dataProvenance.js +29 -0
- package/dist/merge-fields/dataProvenance.js.map +7 -0
- package/dist/merge-fields/index.js +25 -50
- 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 +46 -0
- package/dist/merge-fields.test.js.map +7 -0
- package/dist/mergeField500Lisapainokset.js +27 -56
- 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 +91 -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 +259 -802
- 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 +104 -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 +32 -63
- 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 +54 -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 +78 -126
- package/dist/utils.js.map +7 -1
- package/eslint.config.mjs +1 -2
- package/package.json +28 -101
- 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.spec.js → cyrillux-usemarcon-replacement.test.js} +17 -14
- 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-conf.js +6 -5
- package/src/ending-punctuation.js +115 -24
- package/src/{ending-punctuation.spec.js → ending-punctuation.test.js} +357 -275
- 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/index.js +132 -59
- package/src/indicator-fixes.js +17 -4
- package/src/{indicator-fixes.spec.js → indicator-fixes.test.js} +9 -12
- package/src/isbn-issn.js +12 -7
- 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/melindaCustomMergeFields.js +1 -1
- package/src/merge-fields/controlSubfields.js +1 -1
- package/src/merge-fields/counterpartField.js +14 -9
- package/src/merge-fields/dataProvenance.js +41 -0
- package/src/merge-fields/index.js +12 -3
- package/src/merge-fields/mergableIndicator.js +1 -1
- package/src/merge-fields/mergeField.js +8 -8
- 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} +18 -15
- package/src/mergeField500Lisapainokset.js +1 -1
- 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 +32 -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 +17 -8
- 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 +15 -12
- 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 +6 -6
- 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 +8 -6
- 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.test.js +75 -0
- 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 +21 -5
- 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/indicator-fixes/10/expectedResult.json +11 -0
- package/test-fixtures/indicator-fixes/10/metadata.json +4 -0
- package/test-fixtures/indicator-fixes/10/record.json +11 -0
- package/test-fixtures/merge-fields/f05/expectedResult.json +24 -0
- package/test-fixtures/merge-fields/f05/metadata.json +6 -0
- package/test-fixtures/merge-fields/f05/record.json +30 -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/remove-inferior-datafields/f16/expectedResult.json +12 -0
- package/test-fixtures/remove-inferior-datafields/f16/metadata.json +5 -0
- package/test-fixtures/remove-inferior-datafields/f16/record.json +14 -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/test-fixtures/translate-terms-data.js +42 -0
- 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/melindaCustomMergeFields.json +0 -5120
- package/src/translate-terms.spec.js +0 -52
|
@@ -1,76 +1,44 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
var _removeDuplicateDataFields = require("./removeDuplicateDataFields");
|
|
12
|
-
var _subfield6Utils = require("./subfield6Utils");
|
|
13
|
-
var _utils = require("./utils");
|
|
14
|
-
var _subfield8Utils = require("./subfield8Utils");
|
|
15
|
-
var _prepublicationUtils = require("./prepublicationUtils");
|
|
16
|
-
var _normalizeFieldForComparison = require("./normalizeFieldForComparison");
|
|
17
|
-
var _normalizeUtf8Diacritics = require("./normalize-utf8-diacritics");
|
|
18
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
19
|
-
// Relocated from melinda-marc-record-merge-reducers (and renamed)
|
|
20
|
-
|
|
21
|
-
// NB! This validator handles only full fields, and does not support subfield $8 removal.
|
|
22
|
-
// Also, having multiple $8 subfields in same fields is not supported.
|
|
23
|
-
// If this functionality is needed, see removeDuplicateDatafields.js for examples of subfield-only stuff.
|
|
24
|
-
const debug = (0, _debug.default)('@natlibfi/marc-record-validators-melinda:removeInferiorDataFields');
|
|
25
|
-
function _default() {
|
|
1
|
+
import createDebugLogger from "debug";
|
|
2
|
+
import { fieldToChain, sameField } from "./removeDuplicateDataFields.js";
|
|
3
|
+
import { fieldGetOccurrenceNumberPairs, fieldHasValidSubfield6, fieldSevenToOneOccurrenceNumber, fieldsToNormalizedString } from "./subfield6Utils.js";
|
|
4
|
+
import { fieldHasSubfield, fieldsToString, fieldToString, nvdebug, uniqArray } from "./utils.js";
|
|
5
|
+
import { fieldHasValidSubfield8 } from "./subfield8Utils.js";
|
|
6
|
+
import { encodingLevelIsBetterThanPrepublication, fieldRefersToKoneellisestiTuotettuTietue, getEncodingLevel } from "./prepublicationUtils.js";
|
|
7
|
+
import { cloneAndNormalizeFieldForComparison } from "./normalizeFieldForComparison.js";
|
|
8
|
+
import { fixComposition, precomposeFinnishLetters } from "./normalize-utf8-diacritics.js";
|
|
9
|
+
const debug = createDebugLogger("@natlibfi/marc-record-validators-melinda:removeInferiorDataFields");
|
|
10
|
+
export default function() {
|
|
26
11
|
return {
|
|
27
|
-
description:
|
|
12
|
+
description: "Remove subset data fields. Certain exceptions apply, mainly too complicated for chained fields",
|
|
28
13
|
validate,
|
|
29
14
|
fix
|
|
30
15
|
};
|
|
31
16
|
function fix(record) {
|
|
32
|
-
|
|
33
|
-
const res = {
|
|
34
|
-
message: [],
|
|
35
|
-
fix: [],
|
|
36
|
-
valid: true
|
|
37
|
-
};
|
|
17
|
+
nvdebug("Fix record: remove inferior (eg. subset) data fields", debug);
|
|
18
|
+
const res = { message: [], fix: [], valid: true };
|
|
38
19
|
removeInferiorDatafields(record, true);
|
|
39
|
-
// This can not really fail...
|
|
40
20
|
return res;
|
|
41
21
|
}
|
|
42
22
|
function validate(record) {
|
|
43
|
-
|
|
44
|
-
(0, _utils.nvdebug)('Validate record: remove inferior (eg. subset) data fields', debug);
|
|
23
|
+
nvdebug("Validate record: remove inferior (eg. subset) data fields", debug);
|
|
45
24
|
const duplicates = removeInferiorDatafields(record, false);
|
|
46
|
-
const res = {
|
|
47
|
-
message: duplicates
|
|
48
|
-
};
|
|
25
|
+
const res = { message: duplicates };
|
|
49
26
|
res.valid = res.message.length < 1;
|
|
50
27
|
return res;
|
|
51
28
|
}
|
|
52
29
|
}
|
|
53
30
|
function deriveInferiorChains(fields, record) {
|
|
54
|
-
//nvdebug(`======= GOT ${fields.length} FIELDS TO CHAINIFY`);
|
|
55
31
|
const hash = {};
|
|
56
|
-
fields.forEach(f => fieldToChainToDeletables(f));
|
|
57
|
-
|
|
32
|
+
fields.forEach((f) => fieldToChainToDeletables(f));
|
|
58
33
|
return hash;
|
|
59
|
-
|
|
60
|
-
//nvdebug(`WP1: GOT ${todoList.length} CHAINS`);
|
|
61
|
-
|
|
62
|
-
// here we map deletableStringObject[str] => field. The idea is to help debugging. We don't actually need the field object...
|
|
63
|
-
//return deriveChainDeletables(todoList);
|
|
64
|
-
|
|
65
34
|
function fieldToChainToDeletables(field) {
|
|
66
|
-
const chain =
|
|
35
|
+
const chain = fieldToChain(field, record);
|
|
67
36
|
if (chain.length < 2) {
|
|
68
37
|
return;
|
|
69
38
|
}
|
|
70
|
-
const chainAsString =
|
|
39
|
+
const chainAsString = fieldsToNormalizedString(chain, 0, true, true);
|
|
71
40
|
const arr = deriveChainDeletables([chainAsString]);
|
|
72
|
-
|
|
73
|
-
arr.forEach(val => {
|
|
41
|
+
arr.forEach((val) => {
|
|
74
42
|
if (!(val in hash)) {
|
|
75
43
|
hash[val] = field;
|
|
76
44
|
}
|
|
@@ -78,19 +46,13 @@ function deriveInferiorChains(fields, record) {
|
|
|
78
46
|
}
|
|
79
47
|
function deriveChainDeletables(todoList, deletables = []) {
|
|
80
48
|
const [chainAsString, ...stillToDo] = todoList;
|
|
81
|
-
if (chainAsString ===
|
|
49
|
+
if (chainAsString === void 0) {
|
|
82
50
|
return deletables;
|
|
83
51
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
const
|
|
87
|
-
|
|
88
|
-
// Remove keepless versions:
|
|
89
|
-
const keepless = chainAsString.replace(/ ‡9 [A-Z]+<KEEP>/u, '');
|
|
90
|
-
|
|
91
|
-
// MRA-433: 490 ind1=1 vs ind1=0: remove latter (luckily no 2nd indicator etc)
|
|
92
|
-
const linked490Ind1 = chainAsString.replace(/^490 1/u, '490 0').replace(/\t880 1/ug, '\t880 0');
|
|
93
|
-
const arr = [withoutScriptIdentificationCode, keepless, linked490Ind1].filter(val => val !== chainAsString);
|
|
52
|
+
const withoutScriptIdentificationCode = chainAsString.replace(/( ‡6 [0-9X][0-9][0-9]-(?:XX|[0-9]+))\/[^ ]+/u, "$1");
|
|
53
|
+
const keepless = chainAsString.replace(/ ‡9 [A-Z]+<KEEP>/u, "");
|
|
54
|
+
const linked490Ind1 = chainAsString.replace(/^490 1/u, "490 0").replace(/\t880 1/ug, " 880 0");
|
|
55
|
+
const arr = [withoutScriptIdentificationCode, keepless, linked490Ind1].filter((val) => val !== chainAsString);
|
|
94
56
|
if (arr.length > 0) {
|
|
95
57
|
return deriveChainDeletables([...stillToDo, ...arr], [...deletables, ...arr]);
|
|
96
58
|
}
|
|
@@ -98,147 +60,104 @@ function deriveInferiorChains(fields, record) {
|
|
|
98
60
|
}
|
|
99
61
|
}
|
|
100
62
|
function isRelevantChain6(field, record) {
|
|
101
|
-
|
|
102
|
-
if (!(0, _subfield6Utils.fieldHasValidSubfield6)(field) && !(0, _subfield8Utils.fieldHasValidSubfield8)(field)) {
|
|
63
|
+
if (!fieldHasValidSubfield6(field) && !fieldHasValidSubfield8(field)) {
|
|
103
64
|
return false;
|
|
104
65
|
}
|
|
105
|
-
|
|
106
|
-
const chain = (0, _removeDuplicateDataFields.fieldToChain)(field, record);
|
|
66
|
+
const chain = fieldToChain(field, record);
|
|
107
67
|
if (chain.length < 2) {
|
|
108
68
|
return false;
|
|
109
69
|
}
|
|
110
|
-
|
|
111
|
-
if (chain.some(f => f.subfields.filter(sf => sf.code === '6').length > 1)) {
|
|
70
|
+
if (chain.some((f) => f.subfields.filter((sf) => sf.code === "6").length > 1)) {
|
|
112
71
|
return false;
|
|
113
72
|
}
|
|
114
|
-
|
|
115
|
-
// Check whether our field is the head of a chain:
|
|
116
|
-
return (0, _removeDuplicateDataFields.sameField)(field, chain[0]);
|
|
73
|
+
return sameField(field, chain[0]);
|
|
117
74
|
}
|
|
118
|
-
function removeInferiorChains(record, fix = true) {
|
|
119
|
-
const fields = record.fields.filter(f => isRelevantChain6(f, record));
|
|
120
|
-
//nvdebug(`WP2.0: GOT ${fields.length} chain(s)`);
|
|
121
|
-
|
|
75
|
+
export function removeInferiorChains(record, fix = true) {
|
|
76
|
+
const fields = record.fields.filter((f) => isRelevantChain6(f, record));
|
|
122
77
|
const deletableChainsAsKeys = deriveInferiorChains(fields, record);
|
|
123
78
|
const nChains = Object.keys(deletableChainsAsKeys).length;
|
|
124
|
-
//nvdebug(`WP2: GOT ${nChains} chain(s)`);
|
|
125
79
|
if (nChains === 0) {
|
|
126
80
|
return [];
|
|
127
81
|
}
|
|
128
|
-
|
|
129
|
-
//nvdebug(`removeInferiorChains() has ${fields.length} fields-in-chain(s), and a list of ${nChains} deletable(s)`);
|
|
130
|
-
|
|
131
82
|
return innerRemoveInferiorChains(fields);
|
|
132
|
-
function innerRemoveInferiorChains(
|
|
133
|
-
const [currField, ...remainingFields] =
|
|
134
|
-
if (currField ===
|
|
83
|
+
function innerRemoveInferiorChains(fields2, deletedStringsArray = []) {
|
|
84
|
+
const [currField, ...remainingFields] = fields2;
|
|
85
|
+
if (currField === void 0) {
|
|
135
86
|
return deletedStringsArray;
|
|
136
87
|
}
|
|
137
|
-
const chain =
|
|
138
|
-
if (chain.length === 0 || !
|
|
88
|
+
const chain = fieldToChain(currField, record);
|
|
89
|
+
if (chain.length === 0 || !sameField(currField, chain[0])) {
|
|
139
90
|
return innerRemoveInferiorChains(remainingFields, deletedStringsArray);
|
|
140
91
|
}
|
|
141
|
-
const chainAsString =
|
|
92
|
+
const chainAsString = fieldsToNormalizedString(chain, 0, true, true);
|
|
142
93
|
if (!(chainAsString in deletableChainsAsKeys)) {
|
|
143
94
|
return innerRemoveInferiorChains(remainingFields, deletedStringsArray);
|
|
144
95
|
}
|
|
145
96
|
const triggeringField = deletableChainsAsKeys[chainAsString];
|
|
146
|
-
const triggeringChain =
|
|
147
|
-
|
|
148
|
-
// If the inferior (deletable) chain is 1XX-based, convert the triggering better chain from 7XX to 1XX:
|
|
97
|
+
const triggeringChain = fieldToChain(triggeringField, record);
|
|
149
98
|
if (chainContains1XX(chain)) {
|
|
150
|
-
triggeringChain.forEach(f => sevenToOne(f, triggeringChain));
|
|
99
|
+
triggeringChain.forEach((f) => sevenToOne(f, triggeringChain));
|
|
151
100
|
}
|
|
152
|
-
|
|
153
|
-
const
|
|
154
|
-
const message = `DEL: '${deletedString}' REASON: '${(0, _utils.fieldsToString)(triggeringChain)}'`;
|
|
101
|
+
const deletedString = fieldsToString(chain);
|
|
102
|
+
const message = `DEL: '${deletedString}' REASON: '${fieldsToString(triggeringChain)}'`;
|
|
155
103
|
if (fix) {
|
|
156
|
-
|
|
157
|
-
chain.forEach(field => record.removeField(field)); // eslint-disable-line array-callback-return
|
|
104
|
+
chain.forEach((field) => record.removeField(field));
|
|
158
105
|
}
|
|
159
106
|
return innerRemoveInferiorChains(remainingFields, [...deletedStringsArray, message]);
|
|
160
107
|
}
|
|
161
108
|
function chainContains1XX(chain) {
|
|
162
|
-
return chain.some(f => f.tag.substring(0, 1) ===
|
|
109
|
+
return chain.some((f) => f.tag.substring(0, 1) === "1");
|
|
163
110
|
}
|
|
164
111
|
function sevenToOne(field, chain) {
|
|
165
|
-
|
|
166
|
-
// NB! This function should be called only if the original 1XX gets deleted!
|
|
167
|
-
if (!['700', '710', '711', '730'].includes(field.tag)) {
|
|
112
|
+
if (!["700", "710", "711", "730"].includes(field.tag)) {
|
|
168
113
|
return;
|
|
169
114
|
}
|
|
170
|
-
|
|
171
|
-
const pairs = (0, _subfield6Utils.fieldGetOccurrenceNumberPairs)(field, chain);
|
|
115
|
+
const pairs = fieldGetOccurrenceNumberPairs(field, chain);
|
|
172
116
|
field.tag = `1${field.tag.substring(1)}`;
|
|
173
|
-
|
|
174
|
-
pairs.forEach(pairedField => (0, _subfield6Utils.fieldSevenToOneOccurrenceNumber)(pairedField)); // eslint-disable-line array-callback-return
|
|
117
|
+
pairs.forEach((pairedField) => fieldSevenToOneOccurrenceNumber(pairedField));
|
|
175
118
|
}
|
|
176
119
|
}
|
|
177
120
|
function getIdentifierlessAndKeeplessSubsets(fieldAsString) {
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
const identifierlessString = fieldAsString.replace(/ ‡[01] [^‡]+($| ‡)/u, '$1');
|
|
182
|
-
const keeplessString = fieldAsString.replace(/ ‡9 [A-Z]+<KEEP>/u, '');
|
|
183
|
-
return [identifierlessString, keeplessString].filter(val => val !== fieldAsString);
|
|
121
|
+
const identifierlessString = fieldAsString.replace(/ ‡[01] [^‡]+($| ‡)/u, "$1");
|
|
122
|
+
const keeplessString = fieldAsString.replace(/ ‡9 [A-Z]+<KEEP>/u, "");
|
|
123
|
+
return [identifierlessString, keeplessString].filter((val) => val !== fieldAsString);
|
|
184
124
|
}
|
|
185
125
|
function deriveIndividualDeletables490(todoList, deletables = []) {
|
|
186
126
|
const [fieldAsString, ...stillToDo] = todoList;
|
|
187
|
-
if (fieldAsString ===
|
|
127
|
+
if (fieldAsString === void 0) {
|
|
188
128
|
return deletables;
|
|
189
129
|
}
|
|
190
|
-
//nvdebug(`PROCESS ${fieldAsString}`);
|
|
191
130
|
if (!fieldAsString.match(/^490/u)) {
|
|
192
131
|
return deriveIndividualDeletables490(stillToDo, deletables);
|
|
193
132
|
}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
const
|
|
197
|
-
|
|
198
|
-
// Without final $v or $x:
|
|
199
|
-
const withoutFinalVOrX = fieldAsString.replace(/ *[;,] ‡[vx] [^‡]+$/u, '');
|
|
200
|
-
// Add intermediate $x-less version
|
|
201
|
-
const xless = fieldAsString.replace(/, ‡x [^‡]+(, ‡x| ; ‡v)/u, '$1');
|
|
202
|
-
|
|
203
|
-
// Add $xv-less version (handled by recursion?)
|
|
204
|
-
const xvless = fieldAsString.replace(/, ‡x [^‡]+ ‡v [^‡]+$/u, '');
|
|
205
|
-
|
|
206
|
-
// MRA-433-ish (non-chain): 490 ind1=1 vs ind1=0: remove latter
|
|
133
|
+
const sixless = fieldAsString.replace(/ ‡6 [^‡]+ ‡/u, " \u2021");
|
|
134
|
+
const withoutFinalVOrX = fieldAsString.replace(/ *[;,] ‡[vx] [^‡]+$/u, "");
|
|
135
|
+
const xless = fieldAsString.replace(/, ‡x [^‡]+(, ‡x| ; ‡v)/u, "$1");
|
|
136
|
+
const xvless = fieldAsString.replace(/, ‡x [^‡]+ ‡v [^‡]+$/u, "");
|
|
207
137
|
const modifiedInd2 = fieldAsString.match(/^490 1/u) ? `490 0${fieldAsString.substring(5)}` : fieldAsString;
|
|
208
|
-
const arr = [sixless, withoutFinalVOrX, xless, xvless, modifiedInd2].filter(val => val !== fieldAsString);
|
|
209
|
-
|
|
210
|
-
/*
|
|
211
|
-
if (arr.length) {
|
|
212
|
-
nvdebug(`${arr.length} derivation(s) for ${fieldAsString}`);
|
|
213
|
-
nvdebug(arr.join('\n'));
|
|
214
|
-
}
|
|
215
|
-
*/
|
|
138
|
+
const arr = [sixless, withoutFinalVOrX, xless, xvless, modifiedInd2].filter((val) => val !== fieldAsString);
|
|
216
139
|
return arr;
|
|
217
140
|
}
|
|
218
141
|
function deriveIndividualDeletables(record) {
|
|
219
|
-
const todoList = record.fields.map(f =>
|
|
220
|
-
//const finishedRecord = encodingLevelIsBetterThanPrepublication(getEncodingLevel(record));
|
|
221
|
-
|
|
142
|
+
const todoList = record.fields.map((f) => fieldToString(f));
|
|
222
143
|
const deletableStringsArray = processTodoList(todoList);
|
|
223
144
|
const inferiorTerms = getInferiorTerms(record);
|
|
224
|
-
return
|
|
225
|
-
function getInferiorTerms(
|
|
226
|
-
const inputFields =
|
|
227
|
-
const result = inputFields.flatMap(f => fieldToInferiorFields(f));
|
|
228
|
-
|
|
229
|
-
// console.log(result.join('\n')); // eslint-disable-line no-console
|
|
145
|
+
return uniqArray([...deletableStringsArray, ...inferiorTerms]);
|
|
146
|
+
function getInferiorTerms(record2) {
|
|
147
|
+
const inputFields = record2.fields.filter((f) => ["648", "650", "651"].includes(f.tag) && f.subfields);
|
|
148
|
+
const result = inputFields.flatMap((f) => fieldToInferiorFields(f));
|
|
230
149
|
return result;
|
|
231
150
|
}
|
|
232
151
|
function fieldToInferiorFields(field) {
|
|
233
|
-
const aArray = field.subfields.filter(sf => sf.code ===
|
|
234
|
-
if (field.tag ===
|
|
235
|
-
return aArray.flatMap(sf => [`653 ##
|
|
152
|
+
const aArray = field.subfields.filter((sf) => sf.code === "a");
|
|
153
|
+
if (field.tag === "650") {
|
|
154
|
+
return aArray.flatMap((sf) => [`653 ## \u2021a ${sf.value}`, `653 #0 \u2021a ${sf.value}`]);
|
|
236
155
|
}
|
|
237
|
-
return aArray.map(sf => `653 ##
|
|
156
|
+
return aArray.map((sf) => `653 ## \u2021a ${sf.value}`);
|
|
238
157
|
}
|
|
239
158
|
function processTodoList(thingsToDo, deletables = []) {
|
|
240
159
|
const [currString, ...stillToDo] = thingsToDo;
|
|
241
|
-
if (currString ===
|
|
160
|
+
if (currString === void 0) {
|
|
242
161
|
return deletables;
|
|
243
162
|
}
|
|
244
163
|
const accentless = getAccentlessVersion(currString);
|
|
@@ -246,155 +165,115 @@ function deriveIndividualDeletables(record) {
|
|
|
246
165
|
const subsets = getIdentifierlessAndKeeplessSubsets(currString);
|
|
247
166
|
const moreToDo = [...accentless, ...d490, ...subsets];
|
|
248
167
|
if (currString.match(/^[1678]00/u)) {
|
|
249
|
-
// Proof-of-concept rule. Should be improved eventually...
|
|
250
168
|
if (currString.match(/, ‡e [^‡]+\.$/u)) {
|
|
251
|
-
const tmp = currString.replace(/, ‡e [^‡]+\.$/u,
|
|
169
|
+
const tmp = currString.replace(/, ‡e [^‡]+\.$/u, ".");
|
|
252
170
|
return processTodoList([tmp, ...stillToDo, ...moreToDo], [...deletables, tmp]);
|
|
253
171
|
}
|
|
254
172
|
}
|
|
255
173
|
if (currString.match(/^500 ## ‡a Lisäpainokset: Lisäpainos /u)) {
|
|
256
|
-
|
|
257
|
-
const
|
|
258
|
-
const tmp2 = currString.replace(' Lisäpainos ', ' ');
|
|
174
|
+
const tmp1 = currString.replace(" Lis\xE4painos ", " [Lis\xE4painos] ");
|
|
175
|
+
const tmp2 = currString.replace(" Lis\xE4painos ", " ");
|
|
259
176
|
if (tmp1 !== currString && tmp2 !== currString) {
|
|
260
177
|
return processTodoList([...stillToDo, ...moreToDo], [...deletables, tmp1, tmp2]);
|
|
261
178
|
}
|
|
262
179
|
}
|
|
263
180
|
if (currString.match(/^500 ## ‡a Lisäpainokset: \[Lisäpainos\] /u)) {
|
|
264
|
-
|
|
265
|
-
const tmp = currString.replace(' [Lisäpainos] ', ' ');
|
|
181
|
+
const tmp = currString.replace(" [Lis\xE4painos] ", " ");
|
|
266
182
|
if (tmp !== currString) {
|
|
267
183
|
return processTodoList([...stillToDo, ...moreToDo], [...deletables, tmp]);
|
|
268
184
|
}
|
|
269
185
|
}
|
|
270
186
|
if (currString.match(/^500 ## ‡a Ei vastaanotettu\.$/u)) {
|
|
271
|
-
|
|
272
|
-
return processTodoList([...stillToDo, ...moreToDo], [...deletables, '500 ## ‡a EI VASTAANOTETTU.']);
|
|
187
|
+
return processTodoList([...stillToDo, ...moreToDo], [...deletables, "500 ## \u2021a EI VASTAANOTETTU."]);
|
|
273
188
|
}
|
|
274
189
|
if (currString.match(/^500 ## ‡a Ei ilmesty\.$/u)) {
|
|
275
|
-
|
|
276
|
-
return processTodoList([...stillToDo, ...moreToDo], [...deletables, '500 ## ‡a EI ILMESTY.']);
|
|
190
|
+
return processTodoList([...stillToDo, ...moreToDo], [...deletables, "500 ## \u2021a EI ILMESTY."]);
|
|
277
191
|
}
|
|
278
192
|
if (currString.match(/^505 .0.*-- ‡t/u)) {
|
|
279
|
-
|
|
280
|
-
const tmp = currString.replace(/ -- ‡t /gu, ' -- ').
|
|
281
|
-
// remove non-initial $t subfields
|
|
282
|
-
replace(/ ‡[rg] /gu, ' ').
|
|
283
|
-
// remove $r and $g subfields
|
|
284
|
-
replace(/ ‡t /u, ' ‡a ').
|
|
285
|
-
// change first $t to $a
|
|
286
|
-
// ind2: '1' => '#':
|
|
287
|
-
replace(/^505 (.)0/u, '505 $1#');
|
|
193
|
+
const tmp = currString.replace(/ -- ‡t /gu, " -- ").replace(/ ‡[rg] /gu, " ").replace(/ ‡t /u, " \u2021a ").replace(/^505 (.)0/u, "505 $1#");
|
|
288
194
|
if (tmp !== currString) {
|
|
289
195
|
return processTodoList([tmp, ...stillToDo, ...moreToDo], [...deletables, tmp]);
|
|
290
196
|
}
|
|
291
|
-
//nvdebug(`505 ORIGINAL: '${fieldAsString}'`)
|
|
292
|
-
//nvdebug(`505 DERIVATE: '${tmp}'`)
|
|
293
197
|
}
|
|
294
198
|
if (currString.match(/^594 ## ‡a Ei vastaanotettu ‡5 FENNI$/u)) {
|
|
295
|
-
|
|
296
|
-
return processTodoList([...stillToDo, ...moreToDo], [...deletables, '594 ## ‡a EI VASTAANOTETTU ‡5 FENNI']);
|
|
199
|
+
return processTodoList([...stillToDo, ...moreToDo], [...deletables, "594 ## \u2021a EI VASTAANOTETTU \u20215 FENNI"]);
|
|
297
200
|
}
|
|
298
201
|
if (currString.match(/^594 ## ‡a Ei ilmesty ‡5 FENNI$/u)) {
|
|
299
|
-
|
|
300
|
-
return processTodoList([...stillToDo, ...moreToDo], [...deletables, '594 ## ‡a EI ILMESTY ‡5 FENNI']);
|
|
202
|
+
return processTodoList([...stillToDo, ...moreToDo], [...deletables, "594 ## \u2021a EI ILMESTY \u20215 FENNI"]);
|
|
301
203
|
}
|
|
302
|
-
|
|
303
|
-
// MET-381: remove occurence number TAG-00, if TAG-NN existists
|
|
304
204
|
if (currString.match(/^880.* ‡6 [0-9][0-9][0-9]-(?:[1-9][0-9]|0[1-9])/u)) {
|
|
305
|
-
const tmp = currString.replace(/( ‡6 [0-9][0-9][0-9])-[0-9]+/u,
|
|
306
|
-
//nvdebug(`MET-381: ADD TO DELETABLES: '${tmp}'`);
|
|
307
|
-
//deletableStringsArray.push(tmp);
|
|
205
|
+
const tmp = currString.replace(/( ‡6 [0-9][0-9][0-9])-[0-9]+/u, "$1-00");
|
|
308
206
|
if (tmp.match(/ ‡6 [0-9][0-9][0-9]-00\/[^ ]+ /u)) {
|
|
309
|
-
const tmp2 = tmp.replace(/( ‡6 [0-9][0-9][0-9]-00)[^ ]+/u,
|
|
310
|
-
//nvdebug(`MET-381: ADD TO DELETABLES: '${tmp2}'`);
|
|
207
|
+
const tmp2 = tmp.replace(/( ‡6 [0-9][0-9][0-9]-00)[^ ]+/u, "$1");
|
|
311
208
|
return processTodoList([...stillToDo, ...moreToDo], [...deletables, tmp, tmp2]);
|
|
312
209
|
}
|
|
313
210
|
return processTodoList([...stillToDo, ...moreToDo], [...deletables, tmp]);
|
|
314
211
|
}
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
const
|
|
318
|
-
const newDeletables = [...deletables, ...subsets, ...accentless, ...d490, ...inferiorTerms];
|
|
212
|
+
const inferiorTerms2 = getPrepublicationTerms(currString);
|
|
213
|
+
const aiBased = `${currString} \u20217 (dpenmw)AI`;
|
|
214
|
+
const newDeletables = [...deletables, ...subsets, ...accentless, ...d490, ...inferiorTerms2, aiBased];
|
|
319
215
|
if (subsets.length) {
|
|
320
216
|
return processTodoList([...stillToDo, ...moreToDo], newDeletables);
|
|
321
217
|
}
|
|
322
218
|
return processTodoList([...stillToDo, ...moreToDo], newDeletables);
|
|
323
219
|
}
|
|
324
220
|
function getAccentlessVersion(string) {
|
|
325
|
-
|
|
326
|
-
//nvdebug(`START: '${string}`);
|
|
327
|
-
// This is a sanity check: if precomposition does something, there's something wrong, and we don't want to proceed..
|
|
328
|
-
if (string !== (0, _normalizeUtf8Diacritics.precomposeFinnishLetters)(string)) {
|
|
221
|
+
if (string !== precomposeFinnishLetters(string)) {
|
|
329
222
|
return [];
|
|
330
223
|
}
|
|
331
|
-
const accentless = String(
|
|
332
|
-
//nvdebug(`FROM '${string}'\n TO '${accentless}'`);
|
|
224
|
+
const accentless = String(fixComposition(string)).replace(/\p{Diacritic}/gu, "");
|
|
333
225
|
if (accentless === string) {
|
|
334
|
-
// Don't self-destruct
|
|
335
226
|
return [];
|
|
336
227
|
}
|
|
337
228
|
return [accentless];
|
|
338
229
|
}
|
|
339
230
|
function getPrepublicationTerms(fieldAsString) {
|
|
340
231
|
if (fieldAsString.match(/^653./u)) {
|
|
341
|
-
|
|
342
|
-
return [`${fieldAsString} ‡g ENNAKKOTIETO`, `${fieldAsString} ‡g Ennakkotieto`, `${fieldAsString} ‡g ennakkotieto`, `${fieldAsString} ‡g ENNAKKOTIETO.`, `${fieldAsString} ‡g Ennakkotieto.`, `${fieldAsString} ‡g ennakkotieto.`];
|
|
232
|
+
return [`${fieldAsString} \u2021g ENNAKKOTIETO`, `${fieldAsString} \u2021g Ennakkotieto`, `${fieldAsString} \u2021g ennakkotieto`, `${fieldAsString} \u2021g ENNAKKOTIETO.`, `${fieldAsString} \u2021g Ennakkotieto.`, `${fieldAsString} \u2021g ennakkotieto.`];
|
|
343
233
|
}
|
|
344
234
|
return [];
|
|
345
235
|
}
|
|
346
236
|
}
|
|
347
237
|
function fieldToNormalizedString(field) {
|
|
348
|
-
const normalizedField =
|
|
349
|
-
return
|
|
238
|
+
const normalizedField = cloneAndNormalizeFieldForComparison(field);
|
|
239
|
+
return fieldToString(normalizedField);
|
|
350
240
|
}
|
|
351
241
|
function deriveIndividualNormalizedDeletables(record) {
|
|
352
|
-
|
|
353
|
-
const
|
|
354
|
-
const
|
|
355
|
-
const met495 = encodingLevel === '2' && record.fields.some(f => f.tag === '500' && (0, _prepublicationUtils.fieldRefersToKoneellisestiTuotettuTietue)(f));
|
|
242
|
+
const encodingLevel = getEncodingLevel(record);
|
|
243
|
+
const recordIsFinished = encodingLevelIsBetterThanPrepublication(encodingLevel);
|
|
244
|
+
const met495 = encodingLevel === "2" && record.fields.some((f) => f.tag === "500" && fieldRefersToKoneellisestiTuotettuTietue(f));
|
|
356
245
|
if (!recordIsFinished || met495) {
|
|
357
246
|
return [];
|
|
358
247
|
}
|
|
359
|
-
const relevantFields = record.fields.filter(f => [
|
|
248
|
+
const relevantFields = record.fields.filter((f) => ["245", "246"].includes(f.tag) && fieldHasSubfield(f, "a"));
|
|
360
249
|
return deriveDeletable946s(relevantFields);
|
|
361
250
|
function deriveDeletable946s(fields, results = []) {
|
|
362
251
|
const [currField, ...remainingFields] = fields;
|
|
363
|
-
if (currField ===
|
|
252
|
+
if (currField === void 0) {
|
|
364
253
|
return results;
|
|
365
254
|
}
|
|
366
255
|
const fieldAsNormalizedString = fieldToNormalizedString(currField);
|
|
367
|
-
const tmp = fieldAsNormalizedString.replace(/^(?:...) ../u,
|
|
368
|
-
|
|
369
|
-
replace(' ‡a ', ' ‡i nimeke onixissa ‡a ').
|
|
370
|
-
// Add $i before $a. NB! This is added in the normalized lower-cased form!
|
|
371
|
-
replace(/(?: \/)? ‡c[^‡]+$/u, ''); // Remove $c. (Can $c be non-last?)
|
|
372
|
-
const candArray = [tmp, `${tmp} ‡5 MELINDA`].filter(val => val !== fieldAsNormalizedString);
|
|
256
|
+
const tmp = fieldAsNormalizedString.replace(/^(?:...) ../u, "946 ##").replace(" \u2021a ", " \u2021i nimeke onixissa \u2021a ").replace(/(?: \/)? ‡c[^‡]+$/u, "");
|
|
257
|
+
const candArray = [tmp, `${tmp} \u20215 MELINDA`].filter((val) => val !== fieldAsNormalizedString);
|
|
373
258
|
if (candArray.length) {
|
|
374
259
|
return deriveDeletable946s(remainingFields, [...results, ...candArray]);
|
|
375
260
|
}
|
|
376
261
|
return deriveDeletable946s(remainingFields, results);
|
|
377
262
|
}
|
|
378
263
|
}
|
|
379
|
-
function removeIndividualInferiorDatafields(record, fix = true) {
|
|
380
|
-
// No $6 nor $8 in field
|
|
264
|
+
export function removeIndividualInferiorDatafields(record, fix = true) {
|
|
381
265
|
const deletableFieldsAsStrings = deriveIndividualDeletables(record);
|
|
382
266
|
const deletableFieldsAsNormalizedStrings = deriveIndividualNormalizedDeletables(record);
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
// nvdebug(`Normalized deletables:\n ${deletableFieldsAsNormalizedStrings.join('\n ')}`);
|
|
386
|
-
|
|
387
|
-
const hits = record.fields.filter(field => isDeletableField(field));
|
|
388
|
-
const deletedFieldsAsStrings = hits.map(f => (0, _utils.fieldToString)(f));
|
|
267
|
+
const hits = record.fields.filter((field) => isDeletableField(field));
|
|
268
|
+
const deletedFieldsAsStrings = hits.map((f) => fieldToString(f));
|
|
389
269
|
if (fix) {
|
|
390
|
-
hits.forEach(field => {
|
|
391
|
-
//nvdebug(`Remove inferior field: ${fieldToString(field)}`, debug);
|
|
270
|
+
hits.forEach((field) => {
|
|
392
271
|
record.removeField(field);
|
|
393
272
|
});
|
|
394
273
|
}
|
|
395
274
|
return deletedFieldsAsStrings;
|
|
396
275
|
function isDeletableField(field) {
|
|
397
|
-
const fieldAsString =
|
|
276
|
+
const fieldAsString = fieldToString(field);
|
|
398
277
|
if (deletableFieldsAsStrings.includes(fieldAsString)) {
|
|
399
278
|
return true;
|
|
400
279
|
}
|
|
@@ -405,16 +284,14 @@ function removeIndividualInferiorDatafields(record, fix = true) {
|
|
|
405
284
|
return false;
|
|
406
285
|
}
|
|
407
286
|
}
|
|
408
|
-
function removeInferiorDatafields(record, fix = true) {
|
|
409
|
-
const removables = removeIndividualInferiorDatafields(record, fix);
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
const removablesAll = removables.concat(removables6); //.concat(removables8);
|
|
417
|
-
|
|
287
|
+
export function removeInferiorDatafields(record, fix = true) {
|
|
288
|
+
const removables = removeIndividualInferiorDatafields(record, fix);
|
|
289
|
+
const removables6 = removeInferiorChains(record, fix);
|
|
290
|
+
nvdebug(`REMOVABLES:
|
|
291
|
+
${removables.join("\n ")}`, debug);
|
|
292
|
+
nvdebug(`REMOVABLES 6:
|
|
293
|
+
${removables6.join("\n ")}`, debug);
|
|
294
|
+
const removablesAll = removables.concat(removables6);
|
|
418
295
|
return removablesAll;
|
|
419
296
|
}
|
|
420
|
-
//# sourceMappingURL=removeInferiorDataFields.js.map
|
|
297
|
+
//# sourceMappingURL=removeInferiorDataFields.js.map
|