@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
|
@@ -1,29 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
});
|
|
6
|
-
exports.default = _default;
|
|
7
|
-
var _utils = require("./utils");
|
|
8
|
-
var _field33XUtils = require("./field33XUtils");
|
|
9
|
-
//import createDebugLogger from 'debug';
|
|
10
|
-
|
|
11
|
-
// Based mostly on USEMARCON-RDA. However, many things have been rethought, modernized etc.
|
|
12
|
-
const description = 'Add missing 338 field(s)';
|
|
13
|
-
function _default() {
|
|
1
|
+
import { fieldHasSubfield, fieldToString, getCatalogingLanguage, nvdebug } from "./utils.js";
|
|
2
|
+
import { getFormOfItem, map338CodeToTerm } from "./field33XUtils.js";
|
|
3
|
+
const description = "Add missing 338 field(s)";
|
|
4
|
+
export default function() {
|
|
14
5
|
return {
|
|
15
6
|
description,
|
|
16
7
|
validate,
|
|
17
8
|
fix
|
|
18
9
|
};
|
|
19
10
|
function fix(record) {
|
|
20
|
-
|
|
11
|
+
nvdebug(`FIX ${description}...`);
|
|
21
12
|
const newField = getMissing338(record);
|
|
22
|
-
const res = {
|
|
23
|
-
message: [],
|
|
24
|
-
fix: [],
|
|
25
|
-
valid: true
|
|
26
|
-
};
|
|
13
|
+
const res = { message: [], fix: [], valid: true };
|
|
27
14
|
if (newField) {
|
|
28
15
|
record.insertField(newField);
|
|
29
16
|
return res;
|
|
@@ -31,394 +18,301 @@ function _default() {
|
|
|
31
18
|
return res;
|
|
32
19
|
}
|
|
33
20
|
function validate(record) {
|
|
34
|
-
|
|
21
|
+
nvdebug(`VALIDATE ${description}...`);
|
|
35
22
|
const newField = getMissing338(record);
|
|
36
23
|
if (!newField) {
|
|
37
|
-
return {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
-
const msg = `${description}: '${(0, _utils.fieldToString)(newField)}'`;
|
|
43
|
-
return {
|
|
44
|
-
message: [msg],
|
|
45
|
-
valid: false
|
|
46
|
-
};
|
|
24
|
+
return { message: [], valid: true };
|
|
25
|
+
}
|
|
26
|
+
const msg = `${description}: '${fieldToString(newField)}'`;
|
|
27
|
+
return { message: [msg], valid: false };
|
|
47
28
|
}
|
|
48
29
|
function trimExtent(value) {
|
|
49
|
-
return value.replace(/\([^)]*\)/gu,
|
|
30
|
+
return value.replace(/\([^)]*\)/gu, "").replace(/\[[^\]*]\]/gu, "").replace(/[0-9]/gu, "").replace(/^ +/gu, "").replace(/[ :;+]+$/gu, "").replace(/ +/gu, " ");
|
|
50
31
|
}
|
|
51
32
|
function extractExtent(record) {
|
|
52
|
-
const [f300] = record.get(
|
|
33
|
+
const [f300] = record.get("300");
|
|
53
34
|
if (!f300) {
|
|
54
|
-
return
|
|
35
|
+
return void 0;
|
|
55
36
|
}
|
|
56
|
-
const [a] = f300.subfields.filter(sf => sf.code ===
|
|
37
|
+
const [a] = f300.subfields.filter((sf) => sf.code === "a");
|
|
57
38
|
if (!a) {
|
|
58
|
-
return
|
|
39
|
+
return void 0;
|
|
59
40
|
}
|
|
60
41
|
return trimExtent(a.value);
|
|
61
42
|
}
|
|
62
43
|
function extentToAudioCarrierType(record) {
|
|
63
|
-
const extent = extractExtent(record);
|
|
44
|
+
const extent = extractExtent(record);
|
|
64
45
|
if (!extent) {
|
|
65
|
-
return
|
|
46
|
+
return void 0;
|
|
66
47
|
}
|
|
67
|
-
|
|
48
|
+
nvdebug(`AUDIO EXTENT: '${extent}`);
|
|
68
49
|
if (extent.match(/^(?:audio discs?|[^ ]*ljudskiva|[^ ]*ljudskivor|LP-levy|LP-levyä|LP-skiva|LP-skivor|[^ ]*äänilevy)$/iu)) {
|
|
69
|
-
return
|
|
50
|
+
return "sd";
|
|
70
51
|
}
|
|
71
|
-
// Boldly assuming here that any cassette is audio
|
|
72
52
|
if (extent.match(/^(?:audiocasettes?|C-kas[^ ]*|DAT-as[^ ]*|kasettia?|kassett|kassetter|ljudkassett|ljudkassetter|äänikasettia?)$/ui)) {
|
|
73
|
-
return
|
|
53
|
+
return "ss";
|
|
74
54
|
}
|
|
75
55
|
const typeOfRecord = record.getTypeOfRecord();
|
|
76
|
-
if ([
|
|
56
|
+
if (["i", "j"].includes(typeOfRecord) || record.fields.some((f) => f.tag === "007" && f.value[0] === "s")) {
|
|
77
57
|
if (extent.match(/^[^ ]*(?:levyä?|skiva|skivor)$/ui)) {
|
|
78
|
-
return
|
|
58
|
+
return "sd";
|
|
79
59
|
}
|
|
80
60
|
if (extent.match(/^[^ ]*(?:cassettes?|kasettia?|kassett|kassetter)$/ui)) {
|
|
81
|
-
return
|
|
61
|
+
return "ss";
|
|
82
62
|
}
|
|
83
63
|
}
|
|
84
|
-
return
|
|
64
|
+
return void 0;
|
|
85
65
|
}
|
|
86
|
-
function extentToComputerCarrierType(record, formOfItem =
|
|
87
|
-
const extent = extractExtent(record);
|
|
66
|
+
function extentToComputerCarrierType(record, formOfItem = "?") {
|
|
67
|
+
const extent = extractExtent(record);
|
|
88
68
|
if (extent) {
|
|
89
|
-
// What about USB etc?!?
|
|
90
69
|
if (extent.match(/^(?:computer chip cartridge|datorminnesmodul|piirikotelo)$/ui)) {
|
|
91
|
-
return
|
|
70
|
+
return "cb";
|
|
92
71
|
}
|
|
93
72
|
if (extent.match(/^(?:CD-ROM[^ ]*|levyke|levykettä)$/ui)) {
|
|
94
|
-
return
|
|
73
|
+
return "cd";
|
|
95
74
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
return 'cd';
|
|
75
|
+
if (["q", "s"].includes(formOfItem) && extent.match(/^(?:CD-levy|optinen levy|optisk skiva|optiska skivor|optista levyä)$/ui)) {
|
|
76
|
+
return "cd";
|
|
99
77
|
}
|
|
100
78
|
if (extent.match(/^(?:computer card|datorkort|minneskort|muistikortti)[^ ]*$/u)) {
|
|
101
|
-
|
|
102
|
-
return 'ck';
|
|
79
|
+
return "ck";
|
|
103
80
|
}
|
|
104
81
|
if (extent.match(/^(?:online resource|onlineresurs|verkkoaineisto)$/ui)) {
|
|
105
|
-
return
|
|
82
|
+
return "cr";
|
|
106
83
|
}
|
|
107
84
|
}
|
|
108
|
-
return
|
|
85
|
+
return void 0;
|
|
109
86
|
}
|
|
110
87
|
function extentToMicroformCarrierType(record) {
|
|
111
|
-
const extent = extractExtent(record);
|
|
88
|
+
const extent = extractExtent(record);
|
|
112
89
|
if (!extent) {
|
|
113
|
-
return
|
|
90
|
+
return void 0;
|
|
114
91
|
}
|
|
115
|
-
// No instances in Melinda map to 'ha', 'hb', 'hc'
|
|
116
|
-
|
|
117
92
|
if (extent.match(/^(?:filmikorttia?|microfiches?|mikrokorttia?)$/ui)) {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
return 'hg'; // Mikrokortti (läpinäkymätön)
|
|
93
|
+
if (getFormOfItem(record) === "c") {
|
|
94
|
+
return "hg";
|
|
121
95
|
}
|
|
122
|
-
return
|
|
96
|
+
return "he";
|
|
123
97
|
}
|
|
124
98
|
if (extent.match(/^(?:microfilm rolls?|mikrofilmirullaa?(?: kelalla)?|mikrofilmsrullar|mikrofilmsrulle)$/ui)) {
|
|
125
|
-
return
|
|
99
|
+
return "hj";
|
|
126
100
|
}
|
|
127
|
-
return
|
|
101
|
+
return void 0;
|
|
128
102
|
}
|
|
129
|
-
|
|
130
|
-
// extentToMicroscopicCarrierType not really needed
|
|
131
|
-
|
|
132
103
|
function extentToProjectedImageCarrierType(record) {
|
|
133
|
-
const extent = extractExtent(record);
|
|
104
|
+
const extent = extractExtent(record);
|
|
134
105
|
if (!extent) {
|
|
135
|
-
return
|
|
106
|
+
return void 0;
|
|
136
107
|
}
|
|
137
108
|
if (extent.match(/^(?:diaa?|diabild|diabilder|slides?)$/ui)) {
|
|
138
|
-
return
|
|
109
|
+
return "gs";
|
|
139
110
|
}
|
|
140
111
|
if (extent.match(/^(?:overhead transparencies|overhead transparency|piirtoheitinkalvoa?|transparang|transparanger)$/ui)) {
|
|
141
|
-
return
|
|
112
|
+
return "gt";
|
|
142
113
|
}
|
|
143
114
|
if (extent.match(/^(?:film rolls?|filmirullaa?|filmrullar|filmrulle)$/ui)) {
|
|
144
|
-
return
|
|
115
|
+
return "mo";
|
|
145
116
|
}
|
|
146
|
-
return
|
|
117
|
+
return void 0;
|
|
147
118
|
}
|
|
148
|
-
|
|
149
|
-
// StereographicCarrierType not needed
|
|
150
|
-
|
|
151
119
|
function extentToUnmediatedCarrierType(record) {
|
|
152
|
-
const extent = extractExtent(record);
|
|
120
|
+
const extent = extractExtent(record);
|
|
153
121
|
if (!extent) {
|
|
154
|
-
return
|
|
122
|
+
return void 0;
|
|
155
123
|
}
|
|
156
|
-
return
|
|
124
|
+
return void 0;
|
|
157
125
|
}
|
|
158
126
|
function extentToVideoCarrierType(record) {
|
|
159
|
-
const extent = extractExtent(record);
|
|
127
|
+
const extent = extractExtent(record);
|
|
160
128
|
if (!extent) {
|
|
161
|
-
return
|
|
129
|
+
return void 0;
|
|
162
130
|
}
|
|
163
|
-
// DVD-videoskivor etc
|
|
164
131
|
if (extent.match(/^[^ ]*(?:videodiscs?|videolevyä?|videoskiva|videoskivor)$/ui)) {
|
|
165
|
-
return
|
|
132
|
+
return "vd";
|
|
166
133
|
}
|
|
167
134
|
if (extent.match(/^(?:videocassettes?|videokassett|videokassetter|videokasettia?)$/ui) || extent.match(/^(?:VHS)/ui)) {
|
|
168
|
-
return
|
|
135
|
+
return "vf";
|
|
169
136
|
}
|
|
170
|
-
return
|
|
137
|
+
return void 0;
|
|
171
138
|
}
|
|
172
139
|
function extentToCarrierType(record) {
|
|
173
|
-
|
|
174
|
-
return extentToAudioCarrierType(record) || extentToComputerCarrierType(record) || extentToMicroformCarrierType(record) ||
|
|
175
|
-
//
|
|
176
|
-
extentToProjectedImageCarrierType(record) ||
|
|
177
|
-
// Stereographic carriers don't really exist in our data
|
|
140
|
+
nvdebug(`EXTENT2CARRIERTYPE`);
|
|
141
|
+
return extentToAudioCarrierType(record) || extentToComputerCarrierType(record) || extentToMicroformCarrierType(record) || // Microscopic carriers don't really exist in our data
|
|
142
|
+
extentToProjectedImageCarrierType(record) || // Stereographic carriers don't really exist in our data
|
|
178
143
|
extentToUnmediatedCarrierType(record) || extentToVideoCarrierType(record);
|
|
179
144
|
}
|
|
180
145
|
function getComputerCarrierType(record) {
|
|
181
|
-
const formOfItem =
|
|
182
|
-
if (formOfItem ===
|
|
183
|
-
|
|
184
|
-
return 'cr';
|
|
146
|
+
const formOfItem = getFormOfItem(record);
|
|
147
|
+
if (formOfItem === "o") {
|
|
148
|
+
return "cr";
|
|
185
149
|
}
|
|
186
150
|
const typeOfRecord = record.getTypeOfRecord();
|
|
187
|
-
if (typeOfRecord !==
|
|
188
|
-
if (![
|
|
189
|
-
|
|
190
|
-
return undefined;
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
/* After re-reading, this seems illegal
|
|
195
|
-
if (typeOfRecord === 'm') {
|
|
196
|
-
const f007 = record.get('007');
|
|
197
|
-
if (f007.length === 1) {
|
|
198
|
-
// ca: none, cb: 10 or so, probably errors (typically USB)
|
|
199
|
-
if (f007[0].value[0] === 'c' && f007[0].value[1] === 'o') {
|
|
200
|
-
return 'cd';
|
|
201
|
-
}
|
|
151
|
+
if (typeOfRecord !== "m") {
|
|
152
|
+
if (!["o", "q", "s"].includes(formOfItem)) {
|
|
153
|
+
return void 0;
|
|
202
154
|
}
|
|
203
155
|
}
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
// Check fields 300$a (extent), 256$a (computer file characteristics), 516$a (type of computer file or data note), and possible 245$h (medium)
|
|
207
|
-
const formOfItem2 = typeOfRecord === 'm' && formOfItem === '|' ? 's' : formOfItem; // handle '|'
|
|
156
|
+
const formOfItem2 = typeOfRecord === "m" && formOfItem === "|" ? "s" : formOfItem;
|
|
208
157
|
const cand = extentToComputerCarrierType(record, formOfItem2);
|
|
209
158
|
if (cand) {
|
|
210
159
|
return cand;
|
|
211
160
|
}
|
|
212
|
-
return
|
|
161
|
+
return void 0;
|
|
213
162
|
}
|
|
214
163
|
function getMicroformCarrierType(record) {
|
|
215
|
-
const f007 = record.get(
|
|
216
|
-
if (f007.length === 1 && f007[0].value[0] ===
|
|
164
|
+
const f007 = record.get("007");
|
|
165
|
+
if (f007.length === 1 && f007[0].value[0] === "h") {
|
|
217
166
|
const materialDesignation = f007[0].value.charAt(1);
|
|
218
|
-
|
|
219
|
-
if (['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j'].includes(materialDesignation)) {
|
|
167
|
+
if (["a", "b", "c", "d", "e", "f", "g", "h", "j"].includes(materialDesignation)) {
|
|
220
168
|
return `h${materialDesignation}`;
|
|
221
169
|
}
|
|
222
170
|
}
|
|
223
|
-
const formOfItem =
|
|
171
|
+
const formOfItem = getFormOfItem(record);
|
|
224
172
|
const cand = extentToMicroformCarrierType(record, formOfItem);
|
|
225
173
|
if (cand) {
|
|
226
174
|
return cand;
|
|
227
175
|
}
|
|
228
|
-
return
|
|
176
|
+
return void 0;
|
|
229
177
|
}
|
|
230
178
|
function isUnmediatedVolume(record) {
|
|
231
|
-
// Volume/Nide
|
|
232
179
|
const typeOfRecord = record.getTypeOfRecord();
|
|
233
|
-
if (![
|
|
180
|
+
if (!["a", "c", "e", "t"].includes(typeOfRecord)) {
|
|
234
181
|
return false;
|
|
235
182
|
}
|
|
236
|
-
const fields337 = record.get(
|
|
237
|
-
if (!fields337 || !fields337.some(f =>
|
|
183
|
+
const fields337 = record.get("337");
|
|
184
|
+
if (!fields337 || !fields337.some((f) => fieldHasSubfield(f, "b", "n"))) {
|
|
238
185
|
return false;
|
|
239
186
|
}
|
|
240
|
-
const fields336 = record.get(
|
|
241
|
-
if (fields336 && fields336.some(f => f.subfields.some(sf => sf.code ===
|
|
242
|
-
return
|
|
187
|
+
const fields336 = record.get("336");
|
|
188
|
+
if (fields336 && fields336.some((f) => f.subfields.some((sf) => sf.code === "b" && ["txt", "cri"].includes(sf.value)))) {
|
|
189
|
+
return "nc";
|
|
243
190
|
}
|
|
244
|
-
// Add 300$a value-based guesses?
|
|
245
191
|
return false;
|
|
246
192
|
}
|
|
247
193
|
function formOfItemToField338(record) {
|
|
248
|
-
const formOfItem =
|
|
249
|
-
if (formOfItem ===
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
return 'hd';
|
|
194
|
+
const formOfItem = getFormOfItem(record);
|
|
195
|
+
if (formOfItem === "a") {
|
|
196
|
+
if (record.get("300").some((f) => f.subfields.some((sf) => sf.code === "a" && sf.value.match(/mikrofilmikela/iu)))) {
|
|
197
|
+
return "hd";
|
|
253
198
|
}
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
return
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
// 'e' sanomalehti (for CR only)
|
|
267
|
-
// 'f' pistekirjoitus
|
|
268
|
-
if (formOfItem === 'o') {
|
|
269
|
-
// online resource
|
|
270
|
-
return 'cr'; // already handled elsewhere, but keep this here as well
|
|
271
|
-
}
|
|
272
|
-
// 'q' local electronic stuff, use 300 et al to guess. Implemented elsewhere.
|
|
273
|
-
// 'r' painojäljenne, arkki vs nide?
|
|
274
|
-
// 's' electronic (might be local or online). Implemented elsewhere.
|
|
275
|
-
return undefined;
|
|
199
|
+
return "hj";
|
|
200
|
+
}
|
|
201
|
+
if (formOfItem === "b") {
|
|
202
|
+
return "he";
|
|
203
|
+
}
|
|
204
|
+
if (formOfItem === "c") {
|
|
205
|
+
return "hg";
|
|
206
|
+
}
|
|
207
|
+
if (formOfItem === "o") {
|
|
208
|
+
return "cr";
|
|
209
|
+
}
|
|
210
|
+
return void 0;
|
|
276
211
|
}
|
|
277
212
|
function audioToField338(record) {
|
|
278
|
-
|
|
213
|
+
nvdebug("AUDIO-TO-338");
|
|
279
214
|
const typeOfRecord = record.getTypeOfRecord(record);
|
|
280
|
-
if (typeOfRecord !==
|
|
281
|
-
return
|
|
215
|
+
if (typeOfRecord !== "i" && typeOfRecord !== "j") {
|
|
216
|
+
return void 0;
|
|
282
217
|
}
|
|
283
|
-
const f007 = record.get(
|
|
284
|
-
if (f007.length === 1 && f007[0].value[0] ===
|
|
218
|
+
const f007 = record.get("007");
|
|
219
|
+
if (f007.length === 1 && f007[0].value[0] === "s") {
|
|
285
220
|
const materialDesignation = f007[0].value.charAt(1);
|
|
286
|
-
if ([
|
|
221
|
+
if (["d", "e", "s", "t"].includes(materialDesignation)) {
|
|
287
222
|
return `s${materialDesignation}`;
|
|
288
223
|
}
|
|
289
|
-
// 007/00-01 sr implies online resource, but we'll probably figure it out anyways
|
|
290
224
|
}
|
|
291
|
-
const extentToCode = extentToAudioCarrierType(record);
|
|
225
|
+
const extentToCode = extentToAudioCarrierType(record);
|
|
292
226
|
if (extentToCode) {
|
|
293
227
|
return extentToCode;
|
|
294
228
|
}
|
|
295
|
-
return
|
|
229
|
+
return void 0;
|
|
296
230
|
}
|
|
297
231
|
function projectedToField338(record) {
|
|
298
232
|
const typeOfRecord = record.getTypeOfRecord(record);
|
|
299
|
-
if (typeOfRecord !==
|
|
300
|
-
|
|
301
|
-
return undefined;
|
|
233
|
+
if (typeOfRecord !== "g") {
|
|
234
|
+
return void 0;
|
|
302
235
|
}
|
|
303
|
-
const f007 = record.get(
|
|
236
|
+
const f007 = record.get("007");
|
|
304
237
|
if (f007.length === 1) {
|
|
305
|
-
if (f007[0].value[0] ===
|
|
238
|
+
if (f007[0].value[0] === "g") {
|
|
306
239
|
const materialDesignation = f007[0].value.charAt(1);
|
|
307
|
-
if ([
|
|
240
|
+
if (["c", "d", "f", "s", "t"].includes(materialDesignation)) {
|
|
308
241
|
return `g${materialDesignation}`;
|
|
309
242
|
}
|
|
310
|
-
if (materialDesignation ===
|
|
311
|
-
return
|
|
243
|
+
if (materialDesignation === "o") {
|
|
244
|
+
return "gf";
|
|
312
245
|
}
|
|
313
246
|
}
|
|
314
|
-
if (f007[0].value[0] ===
|
|
247
|
+
if (f007[0].value[0] === "v") {
|
|
315
248
|
const materialDesignation = f007[0].value.charAt(1);
|
|
316
|
-
if ([
|
|
249
|
+
if (["c", "d", "f", "r"].includes(materialDesignation)) {
|
|
317
250
|
return `v${materialDesignation}`;
|
|
318
251
|
}
|
|
319
252
|
}
|
|
320
253
|
}
|
|
321
|
-
const extentToCode = extentToVideoCarrierType(record) || extentToProjectedImageCarrierType(record);
|
|
254
|
+
const extentToCode = extentToVideoCarrierType(record) || extentToProjectedImageCarrierType(record);
|
|
322
255
|
if (extentToCode) {
|
|
323
256
|
return extentToCode;
|
|
324
257
|
}
|
|
325
|
-
return
|
|
258
|
+
return void 0;
|
|
326
259
|
}
|
|
327
260
|
function objectToField338(record) {
|
|
328
261
|
const typeOfRecord = record.getTypeOfRecord(record);
|
|
329
|
-
if (typeOfRecord ===
|
|
330
|
-
|
|
331
|
-
return 'nr';
|
|
262
|
+
if (typeOfRecord === "r") {
|
|
263
|
+
return "nr";
|
|
332
264
|
}
|
|
333
|
-
return
|
|
265
|
+
return void 0;
|
|
334
266
|
}
|
|
335
267
|
function educatedGuessIsOnlineResource(record) {
|
|
336
|
-
const fields856 = record.get(
|
|
337
|
-
if (fields856.some(f => f.ind1 ===
|
|
338
|
-
return
|
|
268
|
+
const fields856 = record.get("856");
|
|
269
|
+
if (fields856.some((f) => f.ind1 === "4" && f.ind2 === "0")) {
|
|
270
|
+
return "cr";
|
|
339
271
|
}
|
|
340
|
-
return
|
|
272
|
+
return void 0;
|
|
341
273
|
}
|
|
342
274
|
function checkQualifyingInformation(record) {
|
|
343
|
-
const identifierFields = record.get(
|
|
344
|
-
if (identifierFields.some(f => f.subfields.some(sf => sf.code ===
|
|
345
|
-
return
|
|
275
|
+
const identifierFields = record.get("(?:015|020|024|028)").filter((f) => f.subfields.some((sf) => sf.code === "q"));
|
|
276
|
+
if (identifierFields.some((f) => f.subfields.some((sf) => sf.code === "q" && sf.value.match(/\b(?:hard-?cover|kierre|nid|sid|kovakant|pehmeäkant|pärmar)/iu)))) {
|
|
277
|
+
return "nc";
|
|
346
278
|
}
|
|
347
|
-
return
|
|
279
|
+
return void 0;
|
|
348
280
|
}
|
|
349
281
|
function educatedGuessToCarrierType(record) {
|
|
350
282
|
return checkQualifyingInformation(record) || educatedGuessIsOnlineResource(record) || finalFallback();
|
|
351
283
|
function finalFallback() {
|
|
352
|
-
const [f337] = record.get(
|
|
284
|
+
const [f337] = record.get("337");
|
|
353
285
|
if (f337) {
|
|
354
|
-
if (f337.subfields.some(sf => sf.code ===
|
|
355
|
-
|
|
356
|
-
// As we are a library, most of the stuff are books
|
|
357
|
-
return 'nc';
|
|
286
|
+
if (f337.subfields.some((sf) => sf.code === "b" && sf.value === "n")) {
|
|
287
|
+
return "nc";
|
|
358
288
|
}
|
|
359
289
|
}
|
|
360
|
-
return
|
|
290
|
+
return void 0;
|
|
361
291
|
}
|
|
362
292
|
}
|
|
363
293
|
function guessMissing338B(record) {
|
|
364
|
-
//
|
|
365
|
-
// LDR/06
|
|
366
|
-
// 007
|
|
367
|
-
|
|
368
|
-
//
|
|
369
|
-
//
|
|
370
|
-
|
|
371
|
-
// 245$h...
|
|
372
|
-
// First use form of item?
|
|
373
|
-
return getComputerCarrierType(record) ||
|
|
374
|
-
// LDR/06=m (and 007 and 300)
|
|
375
|
-
objectToField338(record) ||
|
|
376
|
-
// LDR/06=r
|
|
377
|
-
audioToField338(record) ||
|
|
378
|
-
// LDR/06=i/j (and 007 and 300)
|
|
379
|
-
projectedToField338(record) ||
|
|
380
|
-
// ...
|
|
381
|
-
formOfItemToField338(record) ||
|
|
382
|
-
// 'a' 'b', 'c', 'o'
|
|
383
|
-
getMicroformCarrierType(record) || isUnmediatedVolume(record) || extentToCarrierType(record) ||
|
|
384
|
-
// fallback: field 300-based guess
|
|
385
|
-
educatedGuessToCarrierType(record); // 337$b='n' (käytettävissä ilman laitetta) -> nc
|
|
386
|
-
|
|
387
|
-
/*
|
|
388
|
-
const firstFunction = guessFunctions.find(f => f(record));
|
|
389
|
-
if (firstFunction) {
|
|
390
|
-
return firstFunction(record);
|
|
391
|
-
}
|
|
392
|
-
return undefined;
|
|
393
|
-
*/
|
|
294
|
+
return getComputerCarrierType(record) || // LDR/06=m (and 007 and 300)
|
|
295
|
+
objectToField338(record) || // LDR/06=r
|
|
296
|
+
audioToField338(record) || // LDR/06=i/j (and 007 and 300)
|
|
297
|
+
projectedToField338(record) || // ...
|
|
298
|
+
formOfItemToField338(record) || // 'a' 'b', 'c', 'o'
|
|
299
|
+
getMicroformCarrierType(record) || isUnmediatedVolume(record) || extentToCarrierType(record) || // fallback: field 300-based guess
|
|
300
|
+
educatedGuessToCarrierType(record);
|
|
394
301
|
}
|
|
395
302
|
function getMissing338(record) {
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
const
|
|
402
|
-
const
|
|
403
|
-
const
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
ind1: ' ',
|
|
409
|
-
ind2: ' ',
|
|
410
|
-
subfields: [{
|
|
411
|
-
code: 'a',
|
|
412
|
-
value: a2
|
|
413
|
-
}, {
|
|
414
|
-
code: 'b',
|
|
415
|
-
value: b
|
|
416
|
-
}, {
|
|
417
|
-
code: '2',
|
|
418
|
-
value: 'rdacarrier'
|
|
419
|
-
}]
|
|
420
|
-
};
|
|
303
|
+
if (record.fields.some((f) => ["338", "773", "973"].includes(f.tag))) {
|
|
304
|
+
return void 0;
|
|
305
|
+
}
|
|
306
|
+
const b = guessMissing338B(record) || "zu";
|
|
307
|
+
const catLang = getCatalogingLanguage(record) || "fin";
|
|
308
|
+
const a = map338CodeToTerm(b, catLang);
|
|
309
|
+
const a2 = a ? a : "z";
|
|
310
|
+
const data = { tag: "338", ind1: " ", ind2: " ", subfields: [
|
|
311
|
+
{ code: "a", value: a2 },
|
|
312
|
+
{ code: "b", value: b },
|
|
313
|
+
{ code: "2", value: "rdacarrier" }
|
|
314
|
+
] };
|
|
421
315
|
return data;
|
|
422
316
|
}
|
|
423
317
|
}
|
|
424
|
-
//# sourceMappingURL=addMissingField338.js.map
|
|
318
|
+
//# sourceMappingURL=addMissingField338.js.map
|