@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,32 +1,31 @@
|
|
|
1
|
-
import
|
|
1
|
+
import assert from 'node:assert';
|
|
2
2
|
import {MarcRecord} from '@natlibfi/marc-record';
|
|
3
|
-
import validatorFactory from './fix-33X';
|
|
3
|
+
import validatorFactory from './fix-33X.js';
|
|
4
4
|
import {READERS} from '@natlibfi/fixura';
|
|
5
5
|
import generateTests from '@natlibfi/fixugen';
|
|
6
6
|
|
|
7
7
|
generateTests({
|
|
8
8
|
callback,
|
|
9
|
-
path: [
|
|
9
|
+
path: [import.meta.dirname, '..', 'test-fixtures', 'fix-33X'],
|
|
10
10
|
useMetadataFile: true,
|
|
11
11
|
recurse: false,
|
|
12
12
|
fixura: {
|
|
13
13
|
reader: READERS.JSON
|
|
14
14
|
},
|
|
15
|
-
|
|
16
|
-
before: () =>
|
|
15
|
+
hooks: {
|
|
16
|
+
before: async () => {
|
|
17
|
+
testValidatorFactory();
|
|
18
|
+
}
|
|
17
19
|
}
|
|
18
20
|
});
|
|
19
21
|
|
|
20
22
|
async function testValidatorFactory() {
|
|
21
23
|
const validator = await validatorFactory();
|
|
22
24
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
expect(validator.description).to.be.a('string');
|
|
28
|
-
expect(validator.validate).to.be.a('function');
|
|
29
|
-
expect(validator.fix).to.be.a('function');
|
|
25
|
+
assert.equal(typeof validator, 'objecr');
|
|
26
|
+
assert.equal(typeof validator.description, 'string');
|
|
27
|
+
assert.equal(typeof validator.validate, 'function');
|
|
28
|
+
assert.equal(typeof validator.fix, 'function');
|
|
30
29
|
}
|
|
31
30
|
|
|
32
31
|
async function callback({getFixture, fix = false}) {
|
|
@@ -37,10 +36,10 @@ async function callback({getFixture, fix = false}) {
|
|
|
37
36
|
|
|
38
37
|
if (!fix) {
|
|
39
38
|
const result = await validator.validate(record);
|
|
40
|
-
|
|
39
|
+
assert.deepEqual(result, expectedResult);
|
|
41
40
|
return;
|
|
42
41
|
}
|
|
43
42
|
|
|
44
43
|
await validator.fix(record);
|
|
45
|
-
|
|
44
|
+
assert.deepEqual(record, expectedResult);
|
|
46
45
|
}
|
package/src/fix-country-codes.js
CHANGED
|
@@ -1,20 +1,22 @@
|
|
|
1
|
-
import
|
|
1
|
+
import assert from 'node:assert';
|
|
2
2
|
import {MarcRecord} from '@natlibfi/marc-record';
|
|
3
|
-
import validatorFactory from './fix-country-codes';
|
|
3
|
+
import validatorFactory from './fix-country-codes.js';
|
|
4
4
|
import {READERS} from '@natlibfi/fixura';
|
|
5
5
|
import generateTests from '@natlibfi/fixugen';
|
|
6
6
|
import createDebugLogger from 'debug';
|
|
7
7
|
|
|
8
8
|
generateTests({
|
|
9
9
|
callback,
|
|
10
|
-
path: [
|
|
10
|
+
path: [import.meta.dirname, '..', 'test-fixtures', 'fix-country-codes'],
|
|
11
11
|
useMetadataFile: true,
|
|
12
12
|
recurse: false,
|
|
13
13
|
fixura: {
|
|
14
14
|
reader: READERS.JSON
|
|
15
15
|
},
|
|
16
|
-
|
|
17
|
-
before: () =>
|
|
16
|
+
hooks: {
|
|
17
|
+
before: async () => {
|
|
18
|
+
testValidatorFactory();
|
|
19
|
+
}
|
|
18
20
|
}
|
|
19
21
|
});
|
|
20
22
|
const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/fix-country-codes:test');
|
|
@@ -22,12 +24,9 @@ const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/fix-co
|
|
|
22
24
|
async function testValidatorFactory() {
|
|
23
25
|
const validator = await validatorFactory();
|
|
24
26
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
expect(validator.description).to.be.a('string');
|
|
30
|
-
expect(validator.validate).to.be.a('function');
|
|
27
|
+
assert.equal(typeof validator, 'object');
|
|
28
|
+
assert.equal(typeof validator.description, 'string');
|
|
29
|
+
assert.equal(typeof validator.validate, 'function');
|
|
31
30
|
}
|
|
32
31
|
|
|
33
32
|
async function callback({getFixture, enabled = true, fix = false}) {
|
|
@@ -43,10 +42,10 @@ async function callback({getFixture, enabled = true, fix = false}) {
|
|
|
43
42
|
|
|
44
43
|
if (!fix) {
|
|
45
44
|
const result = await validator.validate(record);
|
|
46
|
-
|
|
45
|
+
assert.deepEqual(result, expectedResult);
|
|
47
46
|
return;
|
|
48
47
|
}
|
|
49
48
|
|
|
50
49
|
await validator.fix(record);
|
|
51
|
-
|
|
50
|
+
assert.deepEqual(record, expectedResult);
|
|
52
51
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import clone from 'clone';
|
|
2
|
-
import {fieldToString} from './utils';
|
|
2
|
+
import {fieldToString} from './utils.js';
|
|
3
3
|
// Fix language codes in 008/35-37 and 041 (does not sync them)
|
|
4
4
|
//
|
|
5
5
|
// Author(s): Nicholas Volk
|
|
6
6
|
|
|
7
7
|
//import createDebugLogger from 'debug';
|
|
8
|
-
//import {fieldToString, nvdebug} from './utils';
|
|
8
|
+
//import {fieldToString, nvdebug} from './utils.js';
|
|
9
9
|
|
|
10
10
|
const description = 'Fix language codes';
|
|
11
11
|
|
|
@@ -25,7 +25,7 @@ export default function () {
|
|
|
25
25
|
fixLanguageField008(field008);
|
|
26
26
|
|
|
27
27
|
const f041 = record.get('041');
|
|
28
|
-
f041.forEach(f => fixField041(f));
|
|
28
|
+
f041.forEach(f => fixField041(f));
|
|
29
29
|
|
|
30
30
|
return res;
|
|
31
31
|
}
|
|
@@ -38,7 +38,7 @@ export default function () {
|
|
|
38
38
|
|
|
39
39
|
const f041 = record.get('041');
|
|
40
40
|
|
|
41
|
-
f041.forEach(f => validateField041(f, res));
|
|
41
|
+
f041.forEach(f => validateField041(f, res));
|
|
42
42
|
|
|
43
43
|
res.valid = !(res.message.length >= 1);
|
|
44
44
|
return res;
|
|
@@ -98,7 +98,7 @@ export default function () {
|
|
|
98
98
|
return;
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
-
field.subfields.forEach(sf => fixField041Subfield(sf));
|
|
101
|
+
field.subfields.forEach(sf => fixField041Subfield(sf));
|
|
102
102
|
|
|
103
103
|
function fixField041Subfield(subfield) {
|
|
104
104
|
if (!isRelevantField041SubfieldCode(subfield)) {
|
|
@@ -1,31 +1,30 @@
|
|
|
1
|
-
import
|
|
1
|
+
import assert from 'node:assert';
|
|
2
2
|
import {MarcRecord} from '@natlibfi/marc-record';
|
|
3
|
-
import validatorFactory from './fix-language-codes';
|
|
3
|
+
import validatorFactory from './fix-language-codes.js';
|
|
4
4
|
import {READERS} from '@natlibfi/fixura';
|
|
5
5
|
import generateTests from '@natlibfi/fixugen';
|
|
6
6
|
|
|
7
7
|
generateTests({
|
|
8
8
|
callback,
|
|
9
|
-
path: [
|
|
9
|
+
path: [import.meta.dirname, '..', 'test-fixtures', 'fix-language-codes'],
|
|
10
10
|
useMetadataFile: true,
|
|
11
11
|
recurse: false,
|
|
12
12
|
fixura: {
|
|
13
13
|
reader: READERS.JSON
|
|
14
14
|
},
|
|
15
|
-
|
|
16
|
-
before: () =>
|
|
15
|
+
hooks: {
|
|
16
|
+
before: async () => {
|
|
17
|
+
testValidatorFactory();
|
|
18
|
+
}
|
|
17
19
|
}
|
|
18
20
|
});
|
|
19
21
|
|
|
20
22
|
async function testValidatorFactory() {
|
|
21
23
|
const validator = await validatorFactory();
|
|
22
24
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
expect(validator.description).to.be.a('string');
|
|
28
|
-
expect(validator.validate).to.be.a('function');
|
|
25
|
+
assert.equal(typeof validator, 'object');
|
|
26
|
+
assert.equal(typeof validator.description, 'string');
|
|
27
|
+
assert.equal(typeof validator.validate, 'function');
|
|
29
28
|
}
|
|
30
29
|
|
|
31
30
|
async function callback({getFixture, fix = false}) {
|
|
@@ -36,10 +35,10 @@ async function callback({getFixture, fix = false}) {
|
|
|
36
35
|
|
|
37
36
|
if (!fix) {
|
|
38
37
|
const result = await validator.validate(record);
|
|
39
|
-
|
|
38
|
+
assert.deepEqual(result, expectedResult);
|
|
40
39
|
return;
|
|
41
40
|
}
|
|
42
41
|
|
|
43
42
|
await validator.fix(record);
|
|
44
|
-
|
|
43
|
+
assert.deepEqual(record, expectedResult);
|
|
45
44
|
}
|
package/src/fixRelatorTerms.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import clone from 'clone';
|
|
2
|
-
import {fieldFixPunctuation} from './punctuation2';
|
|
3
|
-
import {fieldToString, getCatalogingLanguage, nvdebug, subfieldToString} from './utils';
|
|
2
|
+
import {fieldFixPunctuation} from './punctuation2.js';
|
|
3
|
+
import {fieldToString, getCatalogingLanguage, nvdebug, subfieldToString} from './utils.js';
|
|
4
4
|
import createDebugLogger from 'debug';
|
|
5
5
|
|
|
6
6
|
// Currently mainly translates X00$e values, so that we don't have "$a Name, $e kirjoittaja, $e författare.".
|
|
@@ -157,7 +157,7 @@ function fieldHandleRelatorTermAbbreviations(field, language) {
|
|
|
157
157
|
}
|
|
158
158
|
|
|
159
159
|
const originalValue = fieldToString(field);
|
|
160
|
-
field.subfields.forEach(sf => subfieldHandleRelatorTermAbbreviation(sf, language));
|
|
160
|
+
field.subfields.forEach(sf => subfieldHandleRelatorTermAbbreviation(sf, language));
|
|
161
161
|
const modifiedValue = fieldToString(field);
|
|
162
162
|
if (modifiedValue === originalValue) {
|
|
163
163
|
return;
|
|
@@ -222,7 +222,7 @@ export function fieldFixRelatorTerms(field, fromLanguage, toLanguage) {
|
|
|
222
222
|
}
|
|
223
223
|
fieldHandleRelatorTermAbbreviations(field, fromLanguage);
|
|
224
224
|
|
|
225
|
-
field.subfields.forEach(sf => subfieldTranslateRelatorTerm(sf, fromLanguage, toLanguage));
|
|
225
|
+
field.subfields.forEach(sf => subfieldTranslateRelatorTerm(sf, fromLanguage, toLanguage));
|
|
226
226
|
}
|
|
227
227
|
|
|
228
228
|
|
|
@@ -230,7 +230,7 @@ export function recordFixRelatorTerms(record, defaultToLanguage = null, defaultF
|
|
|
230
230
|
const fromLanguage = defaultFromLanguage ? defaultFromLanguage : getCatalogingLanguage(record);
|
|
231
231
|
const toLanguage = defaultToLanguage ? defaultToLanguage : getCatalogingLanguage(record);
|
|
232
232
|
|
|
233
|
-
record.fields.forEach(field => translateField(field, fromLanguage, toLanguage));
|
|
233
|
+
record.fields.forEach(field => translateField(field, fromLanguage, toLanguage));
|
|
234
234
|
|
|
235
235
|
function translateField(field, from, to) {
|
|
236
236
|
fieldFixRelatorTerms(field, from, to);
|
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
import
|
|
1
|
+
import assert from 'node:assert';
|
|
2
2
|
import {MarcRecord} from '@natlibfi/marc-record';
|
|
3
|
-
import validatorFactory from '
|
|
3
|
+
import validatorFactory from '../src/fixRelatorTerms.js';
|
|
4
4
|
import {READERS} from '@natlibfi/fixura';
|
|
5
5
|
import generateTests from '@natlibfi/fixugen';
|
|
6
6
|
import createDebugLogger from 'debug';
|
|
7
7
|
|
|
8
8
|
generateTests({
|
|
9
9
|
callback,
|
|
10
|
-
path: [
|
|
10
|
+
path: [import.meta.dirname, '..', 'test-fixtures', 'fix-relator-terms'],
|
|
11
11
|
useMetadataFile: true,
|
|
12
12
|
recurse: false,
|
|
13
13
|
fixura: {
|
|
14
14
|
reader: READERS.JSON
|
|
15
15
|
},
|
|
16
|
-
|
|
17
|
-
before: () =>
|
|
16
|
+
hooks: {
|
|
17
|
+
before: async () => {
|
|
18
|
+
testValidatorFactory();
|
|
19
|
+
}
|
|
18
20
|
}
|
|
19
21
|
});
|
|
22
|
+
|
|
20
23
|
const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/fixRelatorTerms:test');
|
|
21
24
|
|
|
22
25
|
async function testValidatorFactory() {
|
|
23
26
|
const validator = await validatorFactory();
|
|
24
27
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
expect(validator.description).to.be.a('string');
|
|
30
|
-
expect(validator.validate).to.be.a('function');
|
|
28
|
+
assert.equal(typeof validator, 'object');
|
|
29
|
+
assert.equal(typeof validator.description, 'string');
|
|
30
|
+
assert.equal(typeof validator.validate, 'function');
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
async function callback({getFixture, enabled = true, fix = false}) {
|
|
@@ -43,10 +43,10 @@ async function callback({getFixture, enabled = true, fix = false}) {
|
|
|
43
43
|
|
|
44
44
|
if (!fix) {
|
|
45
45
|
const result = await validator.validate(record);
|
|
46
|
-
|
|
46
|
+
assert.deepEqual(result, expectedResult);
|
|
47
47
|
return;
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
await validator.fix(record);
|
|
51
|
-
|
|
51
|
+
assert.deepEqual(record, expectedResult);
|
|
52
52
|
}
|
|
@@ -1,28 +1,24 @@
|
|
|
1
|
-
import
|
|
2
|
-
import chaiAsPromised from 'chai-as-promised';
|
|
1
|
+
import assert from 'node:assert';
|
|
3
2
|
import {MarcRecord} from '@natlibfi/marc-record';
|
|
4
|
-
import validatorFactory from '../src/fixed-fields';
|
|
3
|
+
import validatorFactory from '../src/fixed-fields.js';
|
|
4
|
+
import {describe, it} from 'node:test';
|
|
5
5
|
|
|
6
|
-
const {expect} = chai;
|
|
7
|
-
chai.use(chaiAsPromised);
|
|
8
6
|
|
|
9
7
|
describe('fixed-fields: language', () => {
|
|
10
8
|
it('Creates a validator', async () => {
|
|
11
9
|
const validator = await validatorFactory([]);
|
|
12
10
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
expect(validator.description).to.be.a('string');
|
|
18
|
-
expect(validator.validate).to.be.a('function');
|
|
11
|
+
assert.equal(typeof validator, 'object');
|
|
12
|
+
assert.equal(typeof validator.description, 'string');
|
|
13
|
+
assert.equal(typeof validator.validate, 'function');
|
|
19
14
|
});
|
|
20
15
|
|
|
21
16
|
it('Throws an error when configuration is not provided', () => {
|
|
22
17
|
try {
|
|
23
18
|
validatorFactory();
|
|
24
19
|
} catch (error) {
|
|
25
|
-
|
|
20
|
+
assert.equal(error instanceof Error, true);
|
|
21
|
+
assert.equal(error.message, 'No configuration provided');
|
|
26
22
|
}
|
|
27
23
|
});
|
|
28
24
|
|
|
@@ -52,7 +48,8 @@ describe('fixed-fields: language', () => {
|
|
|
52
48
|
});
|
|
53
49
|
const result = await validator.validate(record);
|
|
54
50
|
|
|
55
|
-
|
|
51
|
+
assert.equal(typeof result, 'object');
|
|
52
|
+
assert.partialDeepStrictEqual(result, {valid: true});
|
|
56
53
|
});
|
|
57
54
|
|
|
58
55
|
it('Finds the record invalid', async () => {
|
|
@@ -86,7 +83,7 @@ describe('fixed-fields: language', () => {
|
|
|
86
83
|
|
|
87
84
|
const result = await validator.validate(record);
|
|
88
85
|
|
|
89
|
-
|
|
86
|
+
assert.deepEqual(result, {valid: false, messages: [
|
|
90
87
|
'Leader has invalid values at positions: 3 (Rule index 0)',
|
|
91
88
|
'Field FOO has invalid values at positions: 0 (Rule index 0)',
|
|
92
89
|
'Field BAR has invalid values at positions: 1 (Rule index 1)',
|
package/src/identical-fields.js
CHANGED
|
@@ -23,7 +23,7 @@ export default function () {
|
|
|
23
23
|
function fix(record) {
|
|
24
24
|
record.fields
|
|
25
25
|
.filter(tag => !uniqWith(record.fields).includes(tag))
|
|
26
|
-
.forEach(tag => record.removeField(tag));
|
|
26
|
+
.forEach(tag => record.removeField(tag));
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
function uniqWith(fields) {
|
|
@@ -1,17 +1,15 @@
|
|
|
1
|
-
import
|
|
1
|
+
import assert from 'node:assert';
|
|
2
2
|
import {MarcRecord} from '@natlibfi/marc-record';
|
|
3
|
-
import validatorFactory from '../src/identical-fields';
|
|
3
|
+
import validatorFactory from '../src/identical-fields.js';
|
|
4
|
+
import {describe, it} from 'node:test';
|
|
4
5
|
|
|
5
6
|
describe('identical-fields', () => {
|
|
6
7
|
it('Creates a validator', async () => {
|
|
7
8
|
const validator = await validatorFactory();
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
expect(validator.description).to.be.a('string');
|
|
14
|
-
expect(validator.validate).to.be.a('function');
|
|
10
|
+
assert.equal(typeof validator, 'object');
|
|
11
|
+
assert.equal(typeof validator.description, 'string');
|
|
12
|
+
assert.equal(typeof validator.validate, 'function');
|
|
15
13
|
});
|
|
16
14
|
|
|
17
15
|
describe('#validate', () => {
|
|
@@ -32,7 +30,7 @@ describe('identical-fields', () => {
|
|
|
32
30
|
});
|
|
33
31
|
const result = await validator.validate(record);
|
|
34
32
|
|
|
35
|
-
|
|
33
|
+
assert.deepEqual(result, {valid: true, messages: []});
|
|
36
34
|
});
|
|
37
35
|
it('Finds the record invalid', async () => {
|
|
38
36
|
const validator = await validatorFactory();
|
|
@@ -80,7 +78,7 @@ describe('identical-fields', () => {
|
|
|
80
78
|
|
|
81
79
|
const result = await validator.validate(record);
|
|
82
80
|
|
|
83
|
-
|
|
81
|
+
assert.deepEqual(result, {valid: false, messages: ['Field 800 has duplicates', 'Field 700 has duplicates']});
|
|
84
82
|
});
|
|
85
83
|
});
|
|
86
84
|
|
|
@@ -111,7 +109,7 @@ describe('identical-fields', () => {
|
|
|
111
109
|
});
|
|
112
110
|
await validator.fix(record);
|
|
113
111
|
|
|
114
|
-
|
|
112
|
+
assert.deepEqual(record.fields, [
|
|
115
113
|
{
|
|
116
114
|
tag: '700',
|
|
117
115
|
ind1: ' ',
|
package/src/index.js
CHANGED
|
@@ -1,62 +1,85 @@
|
|
|
1
|
-
import AccessRights from './access-rights';
|
|
2
|
-
import AddMissingField041 from './addMissingField041';
|
|
3
|
-
import AddMissingField336 from './addMissingField336';
|
|
4
|
-
import AddMissingField337 from './addMissingField337';
|
|
5
|
-
import AddMissingField338 from './addMissingField338';
|
|
6
|
-
import Cyrillux from './cyrillux';
|
|
7
|
-
import CyrilluxUsemarconReplacement from './cyrillux-usemarcon-replacement';
|
|
8
|
-
import DisambiguateSeriesStatements from './disambiguateSeriesStatements';
|
|
9
|
-
import DoubleCommas from './double-commas';
|
|
10
|
-
import DuplicatesInd1 from './duplicates-ind1';
|
|
11
|
-
import EmptyFields from './empty-fields';
|
|
12
|
-
import EndingPunctuation from './ending-punctuation';
|
|
13
|
-
import EndingWhitespace from './ending-whitespace';
|
|
14
|
-
import Field008CharacterGroups from './field-008-18-34-character-groups';
|
|
15
|
-
import Field505Separators from './field-505-separators';
|
|
16
|
-
import Field521Fix from './field-521-fix';
|
|
17
|
-
import FieldExclusion from './field-exclusion';
|
|
18
|
-
import FieldStructure from './field-structure';
|
|
19
|
-
import FieldsPresent from './fields-present';
|
|
20
|
-
import Fix33X from './fix-33X';
|
|
21
|
-
import FixCountryCodes from './fix-country-codes';
|
|
22
|
-
import FixLanguageCodes from './fix-language-codes';
|
|
23
|
-
import FixRelatorTerms from './fixRelatorTerms';
|
|
24
|
-
import FixedFields from './fixed-fields';
|
|
25
|
-
import IdenticalFields from './identical-fields';
|
|
26
|
-
import IndicatorFixes from './indicator-fixes';
|
|
27
|
-
import IsbnIssn from './isbn-issn';
|
|
28
|
-
import ItemLanguage from './item-language';
|
|
29
|
-
import MergeField500Lisapainokset from './mergeField500Lisapainokset';
|
|
30
|
-
import MergeFields from './merge-fields/';
|
|
31
|
-
import MergeRelatorTermFields from './mergeRelatorTermFields';
|
|
32
|
-
import Modernize502 from './modernize-502';
|
|
33
|
-
import MultipleSubfield0s from './multiple-subfield-0';
|
|
34
|
-
import NonBreakingSpace from './non-breaking-space';
|
|
35
|
-
import NormalizeDashes from './normalize-dashes';
|
|
36
|
-
import NormalizeIdentifiers from './normalize-identifiers';
|
|
37
|
-
import NormalizeQualifyingInformation from './normalize-qualifying-information';
|
|
38
|
-
import NormalizeUTF8Diacritics from './normalize-utf8-diacritics';
|
|
39
|
-
import Punctuation from './punctuation/';
|
|
40
|
-
import Punctuation2 from './punctuation2';
|
|
41
|
-
import ReindexSubfield6OccurenceNumbers from './reindexSubfield6OccurenceNumbers';
|
|
42
|
-
import RemoveDuplicateDataFields from './removeDuplicateDataFields';
|
|
43
|
-
import RemoveInferiorDataFields from './removeInferiorDataFields';
|
|
44
|
-
import ResolvableExtReferences from './resolvable-ext-references-melinda';
|
|
45
|
-
import ResolveOrphanedSubfield6s from './resolveOrphanedSubfield6s';
|
|
46
|
-
import SanitizeVocabularySourceCodes from './sanitize-vocabulary-source-codes';
|
|
47
|
-
import SortFields from './sortFields';
|
|
48
|
-
import SortRelatorTerms from './sortRelatorTerms';
|
|
49
|
-
import SortSubfields from './sortSubfields';
|
|
50
|
-
import SortTags from './sort-tags';
|
|
1
|
+
import AccessRights from './access-rights.js';
|
|
2
|
+
import AddMissingField041 from './addMissingField041.js';
|
|
3
|
+
import AddMissingField336 from './addMissingField336.js';
|
|
4
|
+
import AddMissingField337 from './addMissingField337.js';
|
|
5
|
+
import AddMissingField338 from './addMissingField338.js';
|
|
6
|
+
import Cyrillux from './cyrillux.js';
|
|
7
|
+
import CyrilluxUsemarconReplacement from './cyrillux-usemarcon-replacement.js';
|
|
8
|
+
import DisambiguateSeriesStatements from './disambiguateSeriesStatements.js';
|
|
9
|
+
import DoubleCommas from './double-commas.js';
|
|
10
|
+
import DuplicatesInd1 from './duplicates-ind1.js';
|
|
11
|
+
import EmptyFields from './empty-fields.js';
|
|
12
|
+
import EndingPunctuation from './ending-punctuation.js';
|
|
13
|
+
import EndingWhitespace from './ending-whitespace.js';
|
|
14
|
+
import Field008CharacterGroups from './field-008-18-34-character-groups.js';
|
|
15
|
+
import Field505Separators from './field-505-separators.js';
|
|
16
|
+
import Field521Fix from './field-521-fix.js';
|
|
17
|
+
import FieldExclusion from './field-exclusion.js';
|
|
18
|
+
import FieldStructure from './field-structure.js';
|
|
19
|
+
import FieldsPresent from './fields-present.js';
|
|
20
|
+
import Fix33X from './fix-33X.js';
|
|
21
|
+
import FixCountryCodes from './fix-country-codes.js';
|
|
22
|
+
import FixLanguageCodes from './fix-language-codes.js';
|
|
23
|
+
import FixRelatorTerms from './fixRelatorTerms.js';
|
|
24
|
+
import FixedFields from './fixed-fields.js';
|
|
25
|
+
import IdenticalFields from './identical-fields.js';
|
|
26
|
+
import IndicatorFixes from './indicator-fixes.js';
|
|
27
|
+
import IsbnIssn from './isbn-issn.js';
|
|
28
|
+
import ItemLanguage from './item-language.js';
|
|
29
|
+
import MergeField500Lisapainokset from './mergeField500Lisapainokset.js';
|
|
30
|
+
import MergeFields from './merge-fields/index.js';
|
|
31
|
+
import MergeRelatorTermFields from './mergeRelatorTermFields.js';
|
|
32
|
+
import Modernize502 from './modernize-502.js';
|
|
33
|
+
import MultipleSubfield0s from './multiple-subfield-0.js';
|
|
34
|
+
import NonBreakingSpace from './non-breaking-space.js';
|
|
35
|
+
import NormalizeDashes from './normalize-dashes.js';
|
|
36
|
+
import NormalizeIdentifiers from './normalize-identifiers.js';
|
|
37
|
+
import NormalizeQualifyingInformation from './normalize-qualifying-information.js';
|
|
38
|
+
import NormalizeUTF8Diacritics from './normalize-utf8-diacritics.js';
|
|
39
|
+
import Punctuation from './punctuation/index.js';
|
|
40
|
+
import Punctuation2 from './punctuation2.js';
|
|
41
|
+
import ReindexSubfield6OccurenceNumbers from './reindexSubfield6OccurenceNumbers.js';
|
|
42
|
+
import RemoveDuplicateDataFields from './removeDuplicateDataFields.js';
|
|
43
|
+
import RemoveInferiorDataFields from './removeInferiorDataFields.js';
|
|
44
|
+
import ResolvableExtReferences from './resolvable-ext-references-melinda.js';
|
|
45
|
+
import ResolveOrphanedSubfield6s from './resolveOrphanedSubfield6s.js';
|
|
46
|
+
import SanitizeVocabularySourceCodes from './sanitize-vocabulary-source-codes.js';
|
|
47
|
+
import SortFields from './sortFields.js';
|
|
48
|
+
import SortRelatorTerms from './sortRelatorTerms.js';
|
|
49
|
+
import SortSubfields from './sortSubfields.js';
|
|
50
|
+
import SortTags from './sort-tags.js';
|
|
51
51
|
// import StripPunctuation from './stripPunctuation'; // Can we add this here? Should be used very cautiosly!
|
|
52
|
-
import SubfieldValueNormalizations from './subfieldValueNormalizations';
|
|
53
|
-
import SubfieldExclusion from './subfield-exclusion';
|
|
54
|
-
import Sync007And300 from './sync-007-and-300';
|
|
55
|
-
import TranslateTerms from './translate-terms';
|
|
56
|
-
import TypeOfDateF008 from './typeOfDate-008';
|
|
57
|
-
import UnicodeDecomposition from './unicode-decomposition';
|
|
58
|
-
import UpdateField540 from './update-field-540';
|
|
59
|
-
import Urn from './urn';
|
|
52
|
+
import SubfieldValueNormalizations from './subfieldValueNormalizations.js';
|
|
53
|
+
import SubfieldExclusion from './subfield-exclusion.js';
|
|
54
|
+
import Sync007And300 from './sync-007-and-300.js';
|
|
55
|
+
import TranslateTerms from './translate-terms.js';
|
|
56
|
+
import TypeOfDateF008 from './typeOfDate-008.js';
|
|
57
|
+
import UnicodeDecomposition from './unicode-decomposition.js';
|
|
58
|
+
import UpdateField540 from './update-field-540.js';
|
|
59
|
+
import Urn from './urn.js';
|
|
60
|
+
|
|
61
|
+
import {getCounterpart} from './merge-fields/counterpartField.js';
|
|
62
|
+
|
|
63
|
+
import {postprocessRecords} from './merge-fields/mergeOrAddPostprocess.js';
|
|
64
|
+
import {mergeField} from './merge-fields/mergeField.js';
|
|
65
|
+
import {fieldGetOccurrenceNumberPairs, fieldGetUnambiguousOccurrenceNumber, fieldToNormalizedString, fieldsToNormalizedString, get6s,
|
|
66
|
+
isValidSubfield6, recordGetMaxSubfield6OccurrenceNumberAsInteger,
|
|
67
|
+
intToOccurrenceNumberString, resetSubfield6Tag, subfield6ResetOccurrenceNumber, subfield6GetOccurrenceNumber,
|
|
68
|
+
subfield6GetOccurrenceNumberAsInteger} from './subfield6Utils.js';
|
|
69
|
+
|
|
70
|
+
import {getSubfield8LinkingNumber, isValidSubfield8, recordGetAllSubfield8LinkingNumbers, recordGetFieldsWithSubfield8LinkingNumber} from './subfield8Utils.js';
|
|
71
|
+
|
|
72
|
+
import {recordFixRelatorTerms} from './fixRelatorTerms.js';
|
|
73
|
+
import {fieldTrimSubfieldValues} from './normalizeFieldForComparison.js';
|
|
74
|
+
import {baseHasEqualOrHigherEncodingLevel, deleteAllPrepublicationNotesFromField500InNonPubRecord, encodingLevelIsBetterThanPrepublication, getEncodingLevel, isEnnakkotietoField, isEnnakkotietoSubfield} from './prepublicationUtils.js';
|
|
75
|
+
import {melindaFieldSpecs} from '@natlibfi/marc-record-validators-melinda/dist/melindaCustomMergeFields.js';
|
|
76
|
+
|
|
77
|
+
import {cloneAndRemovePunctuation} from './normalizeFieldForComparison.js';
|
|
78
|
+
import {removeWorsePrepubField500s, removeWorsePrepubField594s} from './prepublicationUtils.js';
|
|
79
|
+
import {fieldFixPunctuation} from './punctuation2.js';
|
|
80
|
+
import {recordResetSubfield6OccurrenceNumbers} from './reindexSubfield6OccurenceNumbers.js';
|
|
81
|
+
import {sortAdjacentSubfields} from './sortSubfields.js';
|
|
82
|
+
import {fieldsToString} from './utils.js';
|
|
60
83
|
|
|
61
84
|
export {
|
|
62
85
|
AccessRights,
|
|
@@ -116,5 +139,55 @@ export {
|
|
|
116
139
|
UpdateField540,
|
|
117
140
|
Urn,
|
|
118
141
|
SortFields, // Keep this penultimate
|
|
119
|
-
MergeFields // Run this last *iff* you want to use this at all
|
|
142
|
+
MergeFields, // Run this last *iff* you want to use this at all
|
|
143
|
+
|
|
144
|
+
// Functions for processing record... These should probably go to some other project.
|
|
145
|
+
// Too specific for marc-record-js though...
|
|
146
|
+
// 1. generic low level stuff
|
|
147
|
+
getEncodingLevel,
|
|
148
|
+
|
|
149
|
+
// 2. text normalizations (eg. for similarity comparisons, field merge)
|
|
150
|
+
cloneAndRemovePunctuation,
|
|
151
|
+
fieldFixPunctuation,
|
|
152
|
+
fieldToNormalizedString,
|
|
153
|
+
fieldTrimSubfieldValues,
|
|
154
|
+
fieldsToNormalizedString,
|
|
155
|
+
fieldsToString,
|
|
156
|
+
recordFixRelatorTerms,
|
|
157
|
+
sortAdjacentSubfields,
|
|
158
|
+
|
|
159
|
+
// 3. prepublication stuff
|
|
160
|
+
baseHasEqualOrHigherEncodingLevel,
|
|
161
|
+
deleteAllPrepublicationNotesFromField500InNonPubRecord,
|
|
162
|
+
encodingLevelIsBetterThanPrepublication,
|
|
163
|
+
isEnnakkotietoField,
|
|
164
|
+
isEnnakkotietoSubfield,
|
|
165
|
+
removeWorsePrepubField500s,
|
|
166
|
+
removeWorsePrepubField594s,
|
|
167
|
+
|
|
168
|
+
// 4. subfield $6 related functions
|
|
169
|
+
fieldGetOccurrenceNumberPairs,
|
|
170
|
+
get6s,
|
|
171
|
+
fieldGetUnambiguousOccurrenceNumber,
|
|
172
|
+
intToOccurrenceNumberString,
|
|
173
|
+
isValidSubfield6,
|
|
174
|
+
recordGetMaxSubfield6OccurrenceNumberAsInteger,
|
|
175
|
+
recordResetSubfield6OccurrenceNumbers,
|
|
176
|
+
resetSubfield6Tag,
|
|
177
|
+
subfield6ResetOccurrenceNumber,
|
|
178
|
+
subfield6GetOccurrenceNumber,
|
|
179
|
+
subfield6GetOccurrenceNumberAsInteger,
|
|
180
|
+
|
|
181
|
+
// 5. subfield $8 related functions
|
|
182
|
+
getSubfield8LinkingNumber,
|
|
183
|
+
isValidSubfield8,
|
|
184
|
+
recordGetAllSubfield8LinkingNumbers,
|
|
185
|
+
recordGetFieldsWithSubfield8LinkingNumber,
|
|
186
|
+
|
|
187
|
+
// 6. merge, other
|
|
188
|
+
getCounterpart, // field merge: finds a similar field with which a field can merge
|
|
189
|
+
melindaFieldSpecs, // contains information about the legal fields and subfields, and their repeatability
|
|
190
|
+
mergeField,
|
|
191
|
+
postprocessRecords // clean-up function that cleans up both base and source record (which may be the same)
|
|
192
|
+
|
|
120
193
|
};
|