@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/cyrillux.js
CHANGED
|
@@ -1,38 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
var _punctuation = require("./punctuation2");
|
|
16
|
-
var _addMissingField = require("./addMissingField041");
|
|
17
|
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
18
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
19
|
-
//import createDebugLogger from 'debug';
|
|
20
|
-
|
|
21
|
-
const iso9Trans = 'ISO9 <TRANS>';
|
|
22
|
-
const cyrillicTrans = 'CYRILLIC <TRANS>';
|
|
23
|
-
const sfs4900Trans = 'SFS4900 <TRANS>';
|
|
24
|
-
function _default(config = {}) {
|
|
25
|
-
// console.log(`CONFIG=${JSON.stringify(config)}`); // eslint-disable-line no-console
|
|
26
|
-
|
|
1
|
+
import clone from "clone";
|
|
2
|
+
import XRegExp from "xregexp";
|
|
3
|
+
import * as iso9 from "@natlibfi/iso9-1995";
|
|
4
|
+
import * as sfs4900 from "@natlibfi/sfs-4900";
|
|
5
|
+
import { fieldHasSubfield, fieldToString, fieldsToString, isControlSubfieldCode, nvdebug } from "./utils.js";
|
|
6
|
+
import { fieldGetMaxSubfield6OccurrenceNumberAsInteger, fieldGetOccurrenceNumberPairs, fieldGetUnambiguousOccurrenceNumber, intToOccurrenceNumberString, recordGetMaxSubfield6OccurrenceNumberAsInteger, resetSubfield6Tag } from "./subfield6Utils.js";
|
|
7
|
+
import { default as sortFields } from "./sortFields.js";
|
|
8
|
+
import { default as reindexSubfield6OccurenceNumbers } from "./reindexSubfield6OccurenceNumbers.js";
|
|
9
|
+
import { fieldStripPunctuation } from "./punctuation2.js";
|
|
10
|
+
import { getLanguageCode } from "./addMissingField041.js";
|
|
11
|
+
const iso9Trans = "ISO9 <TRANS>";
|
|
12
|
+
const cyrillicTrans = "CYRILLIC <TRANS>";
|
|
13
|
+
const sfs4900Trans = "SFS4900 <TRANS>";
|
|
14
|
+
export default function(config = {}) {
|
|
27
15
|
return {
|
|
28
|
-
description:
|
|
16
|
+
description: "Cyrillux functionality: convert original field to latinitsa (ISO-9) and add 880s for original cyrillic and latinitsa (SFS-4900)",
|
|
29
17
|
validate,
|
|
30
18
|
fix
|
|
31
19
|
};
|
|
32
20
|
function preprocessConfig() {
|
|
33
|
-
config.retainCyrillic = typeof config.retainCyrillic ===
|
|
34
|
-
config.doISO9Transliteration = typeof config.doISO9Transliteration ===
|
|
35
|
-
config.doSFS4900Transliteration = typeof config.doSFS4900Transliteration ===
|
|
21
|
+
config.retainCyrillic = typeof config.retainCyrillic === "undefined" ? true : config.retainCyrillic;
|
|
22
|
+
config.doISO9Transliteration = typeof config.doISO9Transliteration === "undefined" ? true : config.doISO9Transliteration;
|
|
23
|
+
config.doSFS4900Transliteration = typeof config.doSFS4900Transliteration === "undefined" ? true : config.doSFS4900Transliteration;
|
|
36
24
|
config.preferSFS4900 = setPreference();
|
|
37
25
|
function setPreference() {
|
|
38
26
|
if (!config.doSFS4900Transliteration) {
|
|
@@ -41,352 +29,260 @@ function _default(config = {}) {
|
|
|
41
29
|
if (!config.doISO9Transliteration && config.doSFS4900Transliteration) {
|
|
42
30
|
return true;
|
|
43
31
|
}
|
|
44
|
-
if (typeof config.preferSFS4900 ===
|
|
32
|
+
if (typeof config.preferSFS4900 === "undefined") {
|
|
45
33
|
return false;
|
|
46
34
|
}
|
|
47
35
|
return config.preferSFS4900;
|
|
48
36
|
}
|
|
49
37
|
}
|
|
50
38
|
function fix(record) {
|
|
51
|
-
|
|
52
|
-
// Fix always succeeds
|
|
53
|
-
const res = {
|
|
54
|
-
message: [],
|
|
55
|
-
fix: [],
|
|
56
|
-
valid: true
|
|
57
|
-
};
|
|
39
|
+
const res = { message: [], fix: [], valid: true };
|
|
58
40
|
preprocessConfig();
|
|
59
41
|
const nBefore = record.fields.length;
|
|
60
42
|
record.fields = processFields(record.fields);
|
|
61
43
|
if (nBefore < record.fields.length) {
|
|
62
|
-
(
|
|
63
|
-
(
|
|
44
|
+
reindexSubfield6OccurenceNumbers().fix(record);
|
|
45
|
+
sortFields().fix(record);
|
|
64
46
|
}
|
|
65
47
|
function processFields(input, output = []) {
|
|
66
48
|
const [currField, ...remainingInput] = input;
|
|
67
49
|
if (!currField) {
|
|
68
50
|
return output;
|
|
69
51
|
}
|
|
70
|
-
const fakeRecord = {
|
|
71
|
-
|
|
72
|
-
};
|
|
73
|
-
const createdMax = (0, _subfield6Utils.recordGetMaxSubfield6OccurrenceNumberAsInteger)(fakeRecord);
|
|
52
|
+
const fakeRecord = { fields: output };
|
|
53
|
+
const createdMax = recordGetMaxSubfield6OccurrenceNumberAsInteger(fakeRecord);
|
|
74
54
|
const result = processField(currField, record, createdMax);
|
|
75
55
|
return processFields(remainingInput, [...output, ...result]);
|
|
76
56
|
}
|
|
77
57
|
return res;
|
|
78
58
|
}
|
|
79
59
|
function validate(record) {
|
|
80
|
-
const res = {
|
|
81
|
-
message: [],
|
|
82
|
-
valid: true
|
|
83
|
-
};
|
|
60
|
+
const res = { message: [], valid: true };
|
|
84
61
|
preprocessConfig();
|
|
85
|
-
record.fields?.forEach(field => {
|
|
62
|
+
record.fields?.forEach((field) => {
|
|
86
63
|
validateField(field, res, record);
|
|
87
64
|
});
|
|
88
65
|
res.valid = !(res.message.length >= 1);
|
|
89
66
|
return res;
|
|
90
67
|
}
|
|
91
68
|
function validateField(field, res, record) {
|
|
92
|
-
const orig =
|
|
93
|
-
const normalizedFields = processField((
|
|
94
|
-
const mod =
|
|
69
|
+
const orig = fieldToString(field);
|
|
70
|
+
const normalizedFields = processField(clone(field), record);
|
|
71
|
+
const mod = fieldsToString(normalizedFields).replace(/\t__SEPARATOR__\t/ug, ", ").replace(/ (‡6 [0-9][0-9][0-9])-[0-9][0-9]+/gu, " $1-NN");
|
|
95
72
|
if (orig !== mod) {
|
|
96
|
-
// Fail as the input is "broken"/"crap"/sumthing
|
|
97
73
|
res.message.push(`CHANGE: ${orig} => ${mod}`);
|
|
98
74
|
return;
|
|
99
75
|
}
|
|
100
76
|
return;
|
|
101
77
|
}
|
|
102
78
|
function isCyrillicCharacter(char) {
|
|
103
|
-
return (
|
|
79
|
+
return XRegExp("[\\p{Cyrillic}]").test(char);
|
|
104
80
|
}
|
|
105
81
|
function containsCyrillicCharacters(str) {
|
|
106
|
-
// from melinda-ui-cyrillux
|
|
107
82
|
if (!str) {
|
|
108
83
|
return false;
|
|
109
84
|
}
|
|
110
|
-
return str.split(
|
|
85
|
+
return str.split("").some(isCyrillicCharacter);
|
|
111
86
|
}
|
|
112
87
|
function fieldContainsCyrillicCharacters(field) {
|
|
113
|
-
|
|
114
|
-
return field.subfields && field.subfields.some(sf => subfieldRequiresTransliteration(sf));
|
|
88
|
+
return field.subfields && field.subfields.some((sf) => subfieldRequiresTransliteration(sf));
|
|
115
89
|
}
|
|
116
90
|
function subfieldRequiresTransliteration(subfield) {
|
|
117
|
-
if (
|
|
91
|
+
if (isControlSubfieldCode(subfield.code)) {
|
|
118
92
|
return false;
|
|
119
93
|
}
|
|
120
94
|
return containsCyrillicCharacters(subfield.value);
|
|
121
95
|
}
|
|
122
96
|
function tagCanBeTransliterated(tag) {
|
|
123
|
-
return ![
|
|
97
|
+
return !["336", "337", "338", "880"].includes(tag);
|
|
124
98
|
}
|
|
125
99
|
function fieldCanBeTransliterated(field) {
|
|
126
|
-
// Skip certain tags ('880' is the actual skip-me beef here, but we have seen other no-nos as well).
|
|
127
|
-
// Discussion: We should probably also skip others like 05X-08X, 648, 650, 651, and 655, but this needs thinking...
|
|
128
|
-
// Also I'd like to convert do CYRILLIC->ISO-9 in field 300 (and others?) without 880 mappings... (<- not implemented)
|
|
129
|
-
|
|
130
|
-
// nvdebug(`fieldCanBeTransliterated('${fieldToString(field)}') in...`);
|
|
131
100
|
if (!tagCanBeTransliterated(field.tag)) {
|
|
132
101
|
return false;
|
|
133
102
|
}
|
|
134
103
|
if (!config.doISO9Transliteration && !config.doSFS4900Transliteration) {
|
|
135
104
|
return false;
|
|
136
105
|
}
|
|
137
|
-
|
|
138
|
-
// Skip control fields:
|
|
139
106
|
if (!field.subfields) {
|
|
140
107
|
return false;
|
|
141
108
|
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
if (field.subfields.some(sf => sf.code === '9' && sf.value.includes('<TRANS>'))) {
|
|
109
|
+
if (field.subfields.some((sf) => sf.code === "9" && sf.value.includes("<TRANS>"))) {
|
|
145
110
|
return false;
|
|
146
111
|
}
|
|
147
|
-
return fieldContainsCyrillicCharacters(field);
|
|
112
|
+
return fieldContainsCyrillicCharacters(field);
|
|
148
113
|
}
|
|
149
114
|
function mapSubfieldToIso9(subfield) {
|
|
150
115
|
if (!subfieldRequiresTransliteration(subfield)) {
|
|
151
|
-
return {
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
}
|
|
156
|
-
const value = iso9.convertToLatin(subfield.value);
|
|
157
|
-
return {
|
|
158
|
-
code: subfield.code,
|
|
159
|
-
value
|
|
160
|
-
};
|
|
116
|
+
return { code: subfield.code, value: subfield.value };
|
|
117
|
+
}
|
|
118
|
+
const conversionResult = iso9.convertToLatin(subfield.value);
|
|
119
|
+
return { code: subfield.code, value: conversionResult.result };
|
|
161
120
|
}
|
|
162
|
-
function mapSubfieldToSfs4900(subfield, lang =
|
|
163
|
-
const inputLang = lang ===
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
121
|
+
function mapSubfieldToSfs4900(subfield, lang = "rus") {
|
|
122
|
+
const inputLang = lang === "ukr" ? "ukr" : "rus";
|
|
123
|
+
if (!subfieldRequiresTransliteration(subfield)) {
|
|
124
|
+
return { code: subfield.code, value: subfield.value };
|
|
125
|
+
}
|
|
126
|
+
const conversionResult = sfs4900.convertToLatin(subfield.value, inputLang);
|
|
127
|
+
console.log(JSON.stringify(conversionResult));
|
|
128
|
+
const result = conversionResult.result;
|
|
129
|
+
console.log(JSON.stringify(result));
|
|
130
|
+
return { code: subfield.code, value: result };
|
|
170
131
|
}
|
|
171
|
-
function mapField(field, occurrenceNumber,
|
|
172
|
-
const subfield6 = deriveSubfield6(
|
|
173
|
-
const transliterationText =
|
|
174
|
-
const subfield9 =
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
// NB! iso9 won't use lang
|
|
181
|
-
const subfields = field.subfields.filter(sf => sf.code !== '6').map(sf => transliterationFunc(sf, lang));
|
|
182
|
-
const newField = {
|
|
183
|
-
tag: field.tag,
|
|
184
|
-
ind1: field.ind1,
|
|
185
|
-
ind2: field.ind2,
|
|
186
|
-
subfields: [subfield6, ...subfields, ...subfield9]
|
|
187
|
-
};
|
|
188
|
-
|
|
189
|
-
// Transliteration goes to the original field:
|
|
190
|
-
if (!iso9 && config.preferSFS4900) {
|
|
132
|
+
function mapField(field, occurrenceNumber, iso92 = true, lang = "rus") {
|
|
133
|
+
const subfield6 = deriveSubfield6("880", field.subfields, occurrenceNumber);
|
|
134
|
+
const transliterationText = iso92 ? iso9Trans : sfs4900Trans;
|
|
135
|
+
const subfield9 = fieldHasSubfield(field, "9", transliterationText) ? [] : [{ code: "9", value: transliterationText }];
|
|
136
|
+
const transliterationFunc = iso92 ? mapSubfieldToIso9 : mapSubfieldToSfs4900;
|
|
137
|
+
const subfields = field.subfields.filter((sf) => sf.code !== "6").map((sf) => transliterationFunc(sf, lang));
|
|
138
|
+
const newField = { tag: field.tag, ind1: field.ind1, ind2: field.ind2, subfields: [subfield6, ...subfields, ...subfield9] };
|
|
139
|
+
if (!iso92 && config.preferSFS4900) {
|
|
191
140
|
return newField;
|
|
192
141
|
}
|
|
193
|
-
if (
|
|
142
|
+
if (iso92 && !config.preferSFS4900) {
|
|
194
143
|
return newField;
|
|
195
144
|
}
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
//const subfield6 = newField.subfields.find(sf => sf.code === '6');
|
|
199
|
-
newField.tag = '880';
|
|
200
|
-
(0, _subfield6Utils.resetSubfield6Tag)(subfield6, field.tag);
|
|
145
|
+
newField.tag = "880";
|
|
146
|
+
resetSubfield6Tag(subfield6, field.tag);
|
|
201
147
|
return newField;
|
|
202
148
|
}
|
|
203
149
|
function mapFieldToIso9(field, occurrenceNumber) {
|
|
204
150
|
if (!config.doISO9Transliteration) {
|
|
205
|
-
return
|
|
151
|
+
return void 0;
|
|
206
152
|
}
|
|
207
|
-
// Just converts the field to ISO-9 latinitsa, does not create any field-880s, so don't bother with $6 or $9 either
|
|
208
153
|
if (!config.retainCyrillic && !config.preferSFS4900) {
|
|
209
|
-
const subfields = field.subfields.map(sf => mapSubfieldToIso9(sf));
|
|
210
|
-
return {
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
ind2: field.ind2,
|
|
214
|
-
subfields
|
|
215
|
-
};
|
|
216
|
-
}
|
|
217
|
-
return mapField(field, occurrenceNumber, true, 'rus');
|
|
154
|
+
const subfields = field.subfields.map((sf) => mapSubfieldToIso9(sf));
|
|
155
|
+
return { tag: field.tag, ind1: field.ind1, ind2: field.ind2, subfields };
|
|
156
|
+
}
|
|
157
|
+
return mapField(field, occurrenceNumber, true, "rus");
|
|
218
158
|
}
|
|
219
|
-
function mapFieldToSfs4900(field, occurrenceNumber, lang =
|
|
159
|
+
function mapFieldToSfs4900(field, occurrenceNumber, lang = "rus") {
|
|
220
160
|
if (!config.doSFS4900Transliteration) {
|
|
221
|
-
return
|
|
161
|
+
return void 0;
|
|
222
162
|
}
|
|
223
|
-
// Just converts the field to SFS-4900 latinitsa, does not create any field-880s, so don't bother with $6 or $9 either
|
|
224
163
|
if (!config.retainCyrillic && config.preferSFS4900) {
|
|
225
|
-
const subfields = field.subfields.map(sf => mapSubfieldToSfs4900(sf, lang));
|
|
226
|
-
return {
|
|
227
|
-
tag: field.tag,
|
|
228
|
-
ind1: field.ind1,
|
|
229
|
-
ind2: field.ind2,
|
|
230
|
-
subfields
|
|
231
|
-
};
|
|
164
|
+
const subfields = field.subfields.map((sf) => mapSubfieldToSfs4900(sf, lang));
|
|
165
|
+
return { tag: field.tag, ind1: field.ind1, ind2: field.ind2, subfields };
|
|
232
166
|
}
|
|
233
167
|
return mapField(field, occurrenceNumber, false, lang);
|
|
234
168
|
}
|
|
235
169
|
function deriveSubfield6(tag, subfields, occurrenceNumber) {
|
|
236
|
-
const initialSubfield = {
|
|
237
|
-
|
|
238
|
-
value: `${tag}-${occurrenceNumber}`
|
|
239
|
-
};
|
|
240
|
-
if (tag === '880') {
|
|
241
|
-
// If *tag in subfield $6* is 880, field is not 880 :D
|
|
170
|
+
const initialSubfield = { code: "6", value: `${tag}-${occurrenceNumber}` };
|
|
171
|
+
if (tag === "880") {
|
|
242
172
|
return initialSubfield;
|
|
243
173
|
}
|
|
244
|
-
|
|
245
|
-
const [subfield6] = subfields.filter(sf => sf.code === '6').map(sf => (0, _clone.default)(sf));
|
|
174
|
+
const [subfield6] = subfields.filter((sf) => sf.code === "6").map((sf) => clone(sf));
|
|
246
175
|
if (subfield6) {
|
|
247
|
-
|
|
176
|
+
resetSubfield6Tag(subfield6, tag);
|
|
248
177
|
return subfield6;
|
|
249
178
|
}
|
|
250
179
|
return initialSubfield;
|
|
251
180
|
}
|
|
252
181
|
function mapFieldToCyrillicField880(field, occurrenceNumber) {
|
|
253
182
|
if (!config.retainCyrillic) {
|
|
254
|
-
return
|
|
183
|
+
return void 0;
|
|
255
184
|
}
|
|
256
|
-
|
|
185
|
+
nvdebug(`Derive CYR 880 from ${fieldToString(field)}`);
|
|
257
186
|
const newSubfield6 = deriveSubfield6(field.tag, field.subfields, occurrenceNumber);
|
|
258
|
-
const newSubfield9 =
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
ind2: field.ind2,
|
|
267
|
-
subfields
|
|
268
|
-
};
|
|
269
|
-
(0, _utils.nvdebug)(` New CYR 880 ${(0, _utils.fieldToString)(newField)}`);
|
|
187
|
+
const newSubfield9 = fieldHasSubfield(field, "9", cyrillicTrans) ? [] : [{ code: "9", value: cyrillicTrans }];
|
|
188
|
+
const subfields = [
|
|
189
|
+
newSubfield6,
|
|
190
|
+
...field.subfields.filter((sf) => sf.code !== "6").map((sf) => clone(sf)),
|
|
191
|
+
...newSubfield9
|
|
192
|
+
];
|
|
193
|
+
const newField = { tag: "880", ind1: field.ind1, ind2: field.ind2, subfields };
|
|
194
|
+
nvdebug(` New CYR 880 ${fieldToString(newField)}`);
|
|
270
195
|
return newField;
|
|
271
196
|
}
|
|
272
197
|
function getNewOccurrenceNumber(originalField, record, maxCreatedOccurrenceNumber = 0) {
|
|
273
|
-
const occurrenceNumber =
|
|
274
|
-
// Return existing occurrence number:
|
|
198
|
+
const occurrenceNumber = fieldGetMaxSubfield6OccurrenceNumberAsInteger(originalField);
|
|
275
199
|
if (occurrenceNumber > 0) {
|
|
276
200
|
return occurrenceNumber;
|
|
277
201
|
}
|
|
278
202
|
if (maxCreatedOccurrenceNumber) {
|
|
279
203
|
return maxCreatedOccurrenceNumber + 1;
|
|
280
204
|
}
|
|
281
|
-
return
|
|
205
|
+
return recordGetMaxSubfield6OccurrenceNumberAsInteger(record) + 1;
|
|
282
206
|
}
|
|
283
207
|
function retainCyrillic(existingPairedFields) {
|
|
284
|
-
// Should we move cyrillic content from a normali field to a 880?
|
|
285
208
|
if (!config.retainCyrillic) {
|
|
286
209
|
return false;
|
|
287
210
|
}
|
|
288
|
-
|
|
289
|
-
return !existingPairedFields.some(f => (0, _utils.fieldHasSubfield)(f, '9', cyrillicTrans));
|
|
211
|
+
return !existingPairedFields.some((f) => fieldHasSubfield(f, "9", cyrillicTrans));
|
|
290
212
|
}
|
|
291
213
|
function needsSfs4900Transliteration(existingPairedFields) {
|
|
292
214
|
if (!config.doSFS4900Transliteration) {
|
|
293
215
|
return false;
|
|
294
216
|
}
|
|
295
|
-
return !existingPairedFields.some(f =>
|
|
217
|
+
return !existingPairedFields.some((f) => fieldHasSubfield(f, "9", sfs4900Trans));
|
|
296
218
|
}
|
|
297
219
|
function sfs4900PairCanBeTransliterated(field, record) {
|
|
298
|
-
// MELINDA-10330: we already have public library data: (unmarked) SFS-4900 in FIELD and (unmarked) Cyrillic in 880
|
|
299
220
|
if (!field.subfields || !tagCanBeTransliterated(field.tag) || !config.doISO9Transliteration || !config.retainCyrillic || !config.doSFS4900Transliteration) {
|
|
300
221
|
return false;
|
|
301
222
|
}
|
|
302
|
-
|
|
303
|
-
// Original field: $9 ISO9 <TRANS> is the only legal <TRANS>
|
|
304
|
-
if (fieldContainsCyrillicCharacters(field) || field.subfields.some(sf => sf.code === '9' && sf.value.includes('<TRANS>') && sf.value !== iso9Trans)) {
|
|
223
|
+
if (fieldContainsCyrillicCharacters(field) || field.subfields.some((sf) => sf.code === "9" && sf.value.includes("<TRANS>") && sf.value !== iso9Trans)) {
|
|
305
224
|
return false;
|
|
306
225
|
}
|
|
307
|
-
const existingPairedFields =
|
|
226
|
+
const existingPairedFields = fieldGetOccurrenceNumberPairs(field, record.get("880"));
|
|
308
227
|
if (existingPairedFields.length !== 1) {
|
|
309
228
|
return false;
|
|
310
229
|
}
|
|
311
|
-
|
|
312
|
-
// Paired field: $9 CYRILLIC <TRANS> is the only legal <TRANS>
|
|
313
230
|
const [pairedField] = existingPairedFields;
|
|
314
|
-
|
|
315
|
-
|
|
231
|
+
nvdebug(`LOOKING FOR SFS4900 PAIR: ${fieldToString(field)}`);
|
|
232
|
+
nvdebug(` HAVING PAIRED FIELD: ${fieldToString(pairedField)}`);
|
|
316
233
|
if (!fieldContainsCyrillicCharacters(pairedField)) {
|
|
317
234
|
return false;
|
|
318
235
|
}
|
|
319
|
-
if (pairedField.subfields.some(sf => sf.code ===
|
|
236
|
+
if (pairedField.subfields.some((sf) => sf.code === "9" && sf.value.includes("<TRANS>") && sf.value !== cyrillicTrans)) {
|
|
320
237
|
return false;
|
|
321
238
|
}
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
const
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
(0, _utils.nvdebug)(`COMPARE CONTENTS:\n '${field1}' vs\n '${field2}': ${field1 === field2 ? 'OK' : 'FAIL'}`);
|
|
239
|
+
const occurrenceNumberAsString = fieldGetUnambiguousOccurrenceNumber(field);
|
|
240
|
+
const languageCode = getLanguageCode(record);
|
|
241
|
+
const field2 = fieldToString(createFieldForSfs4900Comparison(mapFieldToSfs4900(pairedField, occurrenceNumberAsString, languageCode), field.tag));
|
|
242
|
+
const field1 = fieldToString(createFieldForSfs4900Comparison(field, field.tag));
|
|
243
|
+
nvdebug(`COMPARE CONTENTS:
|
|
244
|
+
'${field1}' vs
|
|
245
|
+
'${field2}': ${field1 === field2 ? "OK" : "FAIL"}`);
|
|
330
246
|
return field1 === field2;
|
|
331
247
|
}
|
|
332
248
|
function createFieldForSfs4900Comparison(field, tag) {
|
|
333
|
-
const clonedField = (
|
|
249
|
+
const clonedField = clone(field);
|
|
334
250
|
clonedField.tag = tag;
|
|
335
|
-
clonedField.subfields = clonedField.subfields.filter(sf => sf.code !==
|
|
336
|
-
return
|
|
251
|
+
clonedField.subfields = clonedField.subfields.filter((sf) => sf.code !== "9" || sf.value !== sfs4900Trans);
|
|
252
|
+
return fieldStripPunctuation(clonedField);
|
|
337
253
|
}
|
|
338
254
|
function transliterateSfs4900Pair(field, record) {
|
|
339
|
-
// Handle MELINDA-10330: Field is already in SFS-4900 and the only paired field is in Cyrillic!
|
|
340
255
|
if (!config.doISO9Transliteration) {
|
|
341
256
|
return [];
|
|
342
257
|
}
|
|
343
|
-
const [pairedField] =
|
|
344
|
-
const occurrenceNumberAsString =
|
|
345
|
-
const languageCode =
|
|
346
|
-
const tmpField = {
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
'subfields': pairedField.subfields
|
|
351
|
-
};
|
|
352
|
-
const newMainField = config.doISO9Transliteration ? mapFieldToIso9(tmpField, occurrenceNumberAsString) : undefined; // Cyrillic => ISO-9
|
|
353
|
-
const newCyrillicField = config.retainCyrillic ? mapFieldToCyrillicField880(tmpField, occurrenceNumberAsString) : undefined; // CYRILLIC
|
|
354
|
-
const newSFS4900Field = config.doSFS4900Transliteration ? mapFieldToSfs4900(field, occurrenceNumberAsString, languageCode) : undefined; // SFS-4900
|
|
355
|
-
|
|
356
|
-
// Trigger the drop of original counterpart $6 :
|
|
258
|
+
const [pairedField] = fieldGetOccurrenceNumberPairs(field, record.get("880"));
|
|
259
|
+
const occurrenceNumberAsString = fieldGetUnambiguousOccurrenceNumber(field);
|
|
260
|
+
const languageCode = getLanguageCode(record);
|
|
261
|
+
const tmpField = { "tag": field.tag, "ind1": field.ind1, "ind2": field.ind2, "subfields": pairedField.subfields };
|
|
262
|
+
const newMainField = config.doISO9Transliteration ? mapFieldToIso9(tmpField, occurrenceNumberAsString) : void 0;
|
|
263
|
+
const newCyrillicField = config.retainCyrillic ? mapFieldToCyrillicField880(tmpField, occurrenceNumberAsString) : void 0;
|
|
264
|
+
const newSFS4900Field = config.doSFS4900Transliteration ? mapFieldToSfs4900(field, occurrenceNumberAsString, languageCode) : void 0;
|
|
357
265
|
pairedField.cyrilluxSkip = 1;
|
|
358
|
-
return [newMainField, newCyrillicField, newSFS4900Field].filter(f => f);
|
|
266
|
+
return [newMainField, newCyrillicField, newSFS4900Field].filter((f) => f);
|
|
359
267
|
}
|
|
360
268
|
function processField(originalField, record, maxCreatedOccurrenceNumber = 0) {
|
|
361
269
|
if (!fieldCanBeTransliterated(originalField)) {
|
|
362
270
|
if (sfs4900PairCanBeTransliterated(originalField, record)) {
|
|
363
|
-
// MELINDA-10330
|
|
364
271
|
return transliterateSfs4900Pair(originalField, record);
|
|
365
272
|
}
|
|
366
273
|
if (originalField.cyrilluxSkip) {
|
|
367
|
-
// MELINDA-10330 hack to remove 880 fields that were replaced/sort-of processed with their counterpair.
|
|
368
274
|
return [];
|
|
369
275
|
}
|
|
370
276
|
return [originalField];
|
|
371
277
|
}
|
|
372
|
-
|
|
373
|
-
// nvdebug(`PROCESSING: ${fieldToString(originalField)}`);
|
|
374
|
-
|
|
375
278
|
const newOccurrenceNumberAsInt = getNewOccurrenceNumber(originalField, record, maxCreatedOccurrenceNumber);
|
|
376
|
-
const newOccurrenceNumberAsString =
|
|
377
|
-
const languageCode =
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
const
|
|
382
|
-
|
|
383
|
-
// nvdebug(`NUMBER OF PAIRED 880 FIELDS: ${existingPairedFields.length}`);
|
|
384
|
-
|
|
385
|
-
const newMainField = mapFieldToIso9(originalField, newOccurrenceNumberAsString); // ISO-9
|
|
386
|
-
const newCyrillicField = retainCyrillic(existingPairedFields) ? mapFieldToCyrillicField880(originalField, newOccurrenceNumberAsString) : undefined; // CYRILLIC
|
|
387
|
-
const newSFS4900Field = needsSfs4900Transliteration(existingPairedFields) ? mapFieldToSfs4900(originalField, newOccurrenceNumberAsString, languageCode) : undefined; /// SFS-4900
|
|
388
|
-
|
|
389
|
-
return [newMainField, newCyrillicField, newSFS4900Field].filter(f => f);
|
|
279
|
+
const newOccurrenceNumberAsString = intToOccurrenceNumberString(newOccurrenceNumberAsInt);
|
|
280
|
+
const languageCode = getLanguageCode(record);
|
|
281
|
+
const existingPairedFields = fieldGetOccurrenceNumberPairs(originalField, record.get("880"));
|
|
282
|
+
const newMainField = mapFieldToIso9(originalField, newOccurrenceNumberAsString);
|
|
283
|
+
const newCyrillicField = retainCyrillic(existingPairedFields) ? mapFieldToCyrillicField880(originalField, newOccurrenceNumberAsString) : void 0;
|
|
284
|
+
const newSFS4900Field = needsSfs4900Transliteration(existingPairedFields) ? mapFieldToSfs4900(originalField, newOccurrenceNumberAsString, languageCode) : void 0;
|
|
285
|
+
return [newMainField, newCyrillicField, newSFS4900Field].filter((f) => f);
|
|
390
286
|
}
|
|
391
287
|
}
|
|
392
|
-
//# sourceMappingURL=cyrillux.js.map
|
|
288
|
+
//# sourceMappingURL=cyrillux.js.map
|