@natlibfi/marc-record-validators-melinda 11.6.7-alpha.1 → 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
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import assert from "node:assert";
|
|
2
|
+
import { MarcRecord } from "@natlibfi/marc-record";
|
|
3
|
+
import validatorFactory from "../src/unicode-decomposition.js";
|
|
4
|
+
import { describe, it } from "node:test";
|
|
5
|
+
describe("unicode-decomposition", () => {
|
|
6
|
+
it("Creates a validator", async () => {
|
|
7
|
+
const validator = await validatorFactory();
|
|
8
|
+
assert.equal(typeof validator, "object");
|
|
9
|
+
assert.equal(typeof validator.description, "string");
|
|
10
|
+
assert.equal(typeof validator.validate, "function");
|
|
11
|
+
});
|
|
12
|
+
describe("#validate", () => {
|
|
13
|
+
it("Finds the record valid", async () => {
|
|
14
|
+
const validator = await validatorFactory();
|
|
15
|
+
const record = new MarcRecord({
|
|
16
|
+
fields: [
|
|
17
|
+
{
|
|
18
|
+
tag: "245",
|
|
19
|
+
subfields: [
|
|
20
|
+
{
|
|
21
|
+
code: "a",
|
|
22
|
+
value: "F\xF6\xF6, B\xE4r"
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
});
|
|
28
|
+
const result = await validator.validate(record);
|
|
29
|
+
assert.deepEqual(result, { valid: true, messages: [] });
|
|
30
|
+
});
|
|
31
|
+
it("Finds the record invalid", async () => {
|
|
32
|
+
const validator = await validatorFactory();
|
|
33
|
+
const record = new MarcRecord({
|
|
34
|
+
fields: [
|
|
35
|
+
{
|
|
36
|
+
tag: "001",
|
|
37
|
+
ind1: " ",
|
|
38
|
+
ind2: "0",
|
|
39
|
+
subfields: [
|
|
40
|
+
{
|
|
41
|
+
code: "a",
|
|
42
|
+
value: "F\xF6o\u0308, Ba\u0308r"
|
|
43
|
+
}
|
|
44
|
+
]
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
});
|
|
48
|
+
const result = await validator.validate(record);
|
|
49
|
+
assert.deepEqual(result, { valid: false, messages: ["The following subfields are not properly decomposed: a"] });
|
|
50
|
+
});
|
|
51
|
+
describe("#fix", () => {
|
|
52
|
+
it("Should fix the record", async () => {
|
|
53
|
+
const validator = await validatorFactory();
|
|
54
|
+
const record = new MarcRecord({
|
|
55
|
+
fields: [
|
|
56
|
+
{
|
|
57
|
+
tag: "245",
|
|
58
|
+
subfields: [
|
|
59
|
+
{
|
|
60
|
+
code: "a",
|
|
61
|
+
value: "F\xF6o\u0308, Ba\u0308r"
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
code: "b",
|
|
65
|
+
value: "== Fubar"
|
|
66
|
+
}
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
]
|
|
70
|
+
});
|
|
71
|
+
const recordOriginal = record.toObject();
|
|
72
|
+
const fieldModified = {
|
|
73
|
+
tag: "245",
|
|
74
|
+
ind1: " ",
|
|
75
|
+
ind2: " ",
|
|
76
|
+
subfields: [
|
|
77
|
+
{
|
|
78
|
+
code: "a",
|
|
79
|
+
value: "F\xF6\xF6, B\xE4r"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
code: "b",
|
|
83
|
+
value: "== Fubar"
|
|
84
|
+
}
|
|
85
|
+
]
|
|
86
|
+
};
|
|
87
|
+
await validator.fix(record);
|
|
88
|
+
assert.notDeepEqual(recordOriginal, record);
|
|
89
|
+
assert.deepEqual(record.fields, [fieldModified]);
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
//# sourceMappingURL=unicode-decomposition.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/unicode-decomposition.test.js"],
|
|
4
|
+
"sourcesContent": ["import assert from 'node:assert';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/unicode-decomposition.js';\nimport {describe, it} from 'node:test';\n\ndescribe('unicode-decomposition', () => {\n it('Creates a validator', async () => {\n const validator = await validatorFactory();\n\n assert.equal(typeof validator, 'object');\n assert.equal(typeof validator.description, 'string');\n assert.equal(typeof validator.validate, 'function');\n });\n\n describe('#validate', () => {\n it('Finds the record valid', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '245',\n subfields: [\n {\n code: 'a',\n value: 'F\u00F6\u00F6, B\u00E4r'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n assert.deepEqual(result, {valid: true, messages: []});\n });\n\n it('Finds the record invalid', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '001',\n ind1: ' ',\n ind2: '0',\n subfields: [\n {\n code: 'a',\n value: 'F\u00F6o\u0308, Ba\u0308r'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n assert.deepEqual(result, {valid: false, messages: ['The following subfields are not properly decomposed: a']});\n });\n\n describe('#fix', () => {\n it('Should fix the record', async () => {\n const validator = await validatorFactory();\n\n const record = new MarcRecord({\n fields: [\n {\n tag: '245',\n subfields: [\n {\n code: 'a',\n value: 'F\u00F6o\u0308, Ba\u0308r'\n },\n {\n code: 'b',\n value: '== Fubar'\n }\n ]\n }\n ]\n });\n\n const recordOriginal = record.toObject();\n const fieldModified = {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'F\u00F6\u00F6, B\u00E4r'\n },\n {\n code: 'b',\n value: '== Fubar'\n }\n ]\n };\n await validator.fix(record);\n\n assert.notDeepEqual(recordOriginal, record);\n assert.deepEqual(record.fields, [fieldModified]);\n });\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "AAAA,OAAO,YAAY;AACnB,SAAQ,kBAAiB;AACzB,OAAO,sBAAsB;AAC7B,SAAQ,UAAU,UAAS;AAE3B,SAAS,yBAAyB,MAAM;AACtC,KAAG,uBAAuB,YAAY;AACpC,UAAM,YAAY,MAAM,iBAAiB;AAEzC,WAAO,MAAM,OAAO,WAAW,QAAQ;AACvC,WAAO,MAAM,OAAO,UAAU,aAAa,QAAQ;AACnD,WAAO,MAAM,OAAO,UAAU,UAAU,UAAU;AAAA,EACpD,CAAC;AAED,WAAS,aAAa,MAAM;AAC1B,OAAG,0BAA0B,YAAY;AACvC,YAAM,YAAY,MAAM,iBAAiB;AACzC,YAAM,SAAS,IAAI,WAAW;AAAA,QAC5B,QAAQ;AAAA,UACN;AAAA,YACE,KAAK;AAAA,YACL,WAAW;AAAA,cACT;AAAA,gBACE,MAAM;AAAA,gBACN,OAAO;AAAA,cACT;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AACD,YAAM,SAAS,MAAM,UAAU,SAAS,MAAM;AAC9C,aAAO,UAAU,QAAQ,EAAC,OAAO,MAAM,UAAU,CAAC,EAAC,CAAC;AAAA,IACtD,CAAC;AAED,OAAG,4BAA4B,YAAY;AACzC,YAAM,YAAY,MAAM,iBAAiB;AACzC,YAAM,SAAS,IAAI,WAAW;AAAA,QAC5B,QAAQ;AAAA,UACN;AAAA,YACE,KAAK;AAAA,YACL,MAAM;AAAA,YACN,MAAM;AAAA,YACN,WAAW;AAAA,cACT;AAAA,gBACE,MAAM;AAAA,gBACN,OAAO;AAAA,cACT;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AACD,YAAM,SAAS,MAAM,UAAU,SAAS,MAAM;AAE9C,aAAO,UAAU,QAAQ,EAAC,OAAO,OAAO,UAAU,CAAC,wDAAwD,EAAC,CAAC;AAAA,IAC/G,CAAC;AAED,aAAS,QAAQ,MAAM;AACrB,SAAG,yBAAyB,YAAY;AACtC,cAAM,YAAY,MAAM,iBAAiB;AAEzC,cAAM,SAAS,IAAI,WAAW;AAAA,UAC5B,QAAQ;AAAA,YACN;AAAA,cACE,KAAK;AAAA,cACL,WAAW;AAAA,gBACT;AAAA,kBACE,MAAM;AAAA,kBACN,OAAO;AAAA,gBACT;AAAA,gBACA;AAAA,kBACE,MAAM;AAAA,kBACN,OAAO;AAAA,gBACT;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAC;AAED,cAAM,iBAAiB,OAAO,SAAS;AACvC,cAAM,gBAAgB;AAAA,UACpB,KAAK;AAAA,UACL,MAAM;AAAA,UACN,MAAM;AAAA,UACN,WAAW;AAAA,YACT;AAAA,cACE,MAAM;AAAA,cACN,OAAO;AAAA,YACT;AAAA,YACA;AAAA,cACE,MAAM;AAAA,cACN,OAAO;AAAA,YACT;AAAA,UACF;AAAA,QACF;AACA,cAAM,UAAU,IAAI,MAAM;AAE1B,eAAO,aAAa,gBAAgB,MAAM;AAC1C,eAAO,UAAU,OAAO,QAAQ,CAAC,aAAa,CAAC;AAAA,MACjD,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AACH,CAAC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/update-field-540.js
CHANGED
|
@@ -1,118 +1,73 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = _default;
|
|
7
|
-
var _utils = require("./utils");
|
|
8
|
-
//import createDebugLogger from 'debug';
|
|
9
|
-
|
|
10
|
-
//const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/update-field-540');
|
|
11
|
-
|
|
12
|
-
// Author(s): Nicholas Volk
|
|
13
|
-
function _default() {
|
|
1
|
+
import { fieldToString } from "./utils.js";
|
|
2
|
+
export default function() {
|
|
14
3
|
return {
|
|
15
|
-
description:
|
|
4
|
+
description: "Validator for field 540 (modernization as per MELKEHITYS-2431)",
|
|
16
5
|
validate,
|
|
17
6
|
fix
|
|
18
7
|
};
|
|
19
8
|
function fix(record) {
|
|
20
9
|
const fixedFields = getFieldsThatUseOldFormat(record, true);
|
|
21
|
-
const fixedFieldsAsStrings = fixedFields.map(f =>
|
|
22
|
-
return {
|
|
23
|
-
message: [],
|
|
24
|
-
fix: fixedFieldsAsStrings,
|
|
25
|
-
valid: true
|
|
26
|
-
};
|
|
10
|
+
const fixedFieldsAsStrings = fixedFields.map((f) => fieldToString(f));
|
|
11
|
+
return { message: [], fix: fixedFieldsAsStrings, valid: true };
|
|
27
12
|
}
|
|
28
13
|
function validate(record) {
|
|
29
14
|
const yeOldeFields = getFieldsThatUseOldFormat(record, false);
|
|
30
15
|
if (yeOldeFields.length === 0) {
|
|
31
|
-
return {
|
|
32
|
-
'message': [],
|
|
33
|
-
'valid': true
|
|
34
|
-
};
|
|
16
|
+
return { "message": [], "valid": true };
|
|
35
17
|
}
|
|
36
|
-
const messages = yeOldeFields.map(f =>
|
|
37
|
-
return {
|
|
38
|
-
'message': messages,
|
|
39
|
-
'valid': false
|
|
40
|
-
};
|
|
18
|
+
const messages = yeOldeFields.map((f) => fieldToString(f));
|
|
19
|
+
return { "message": messages, "valid": false };
|
|
41
20
|
}
|
|
42
21
|
}
|
|
43
|
-
const licences = [
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
},
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
},
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
'url': 'https://creativecommons.org/licenses/by-nc-sa/4.0/deed.fi'
|
|
55
|
-
}, {
|
|
56
|
-
'license': 'CC BY-ND 4.0',
|
|
57
|
-
'url': 'https://creativecommons.org/licenses/by-nd/4.0/deed.fi'
|
|
58
|
-
}, {
|
|
59
|
-
'license': 'CC BY-SA 4.0',
|
|
60
|
-
'url': 'https://creativecommons.org/licenses/by-sa/4.0/deed.fi'
|
|
61
|
-
}, {
|
|
62
|
-
'license': 'CC0 1.0',
|
|
63
|
-
'url': 'https://creativecommons.org/publicdomain/zero/1.0/deed.fi'
|
|
64
|
-
},
|
|
65
|
-
// not seen/unused
|
|
66
|
-
{
|
|
67
|
-
'license': 'Public domain',
|
|
68
|
-
'url': 'https://creativecommons.org/publicdomain/mark/1.0/deed.fi'
|
|
69
|
-
}];
|
|
22
|
+
const licences = [
|
|
23
|
+
{ "license": "CC BY 4.0", "url": "https://creativecommons.org/licenses/by/4.0/deed.fi" },
|
|
24
|
+
{ "license": "CC BY-NC 4.0", "url": "https://creativecommons.org/licenses/by-nc/4.0/deed.fi" },
|
|
25
|
+
{ "license": "CC BY-NC-ND 4.0", "url": "https://creativecommons.org/licenses/by-nc-nd/4.0/deed.fi" },
|
|
26
|
+
{ "license": "CC BY-NC-SA 4.0", "url": "https://creativecommons.org/licenses/by-nc-sa/4.0/deed.fi" },
|
|
27
|
+
{ "license": "CC BY-ND 4.0", "url": "https://creativecommons.org/licenses/by-nd/4.0/deed.fi" },
|
|
28
|
+
{ "license": "CC BY-SA 4.0", "url": "https://creativecommons.org/licenses/by-sa/4.0/deed.fi" },
|
|
29
|
+
{ "license": "CC0 1.0", "url": "https://creativecommons.org/publicdomain/zero/1.0/deed.fi" },
|
|
30
|
+
// not seen/unused
|
|
31
|
+
{ "license": "Public domain", "url": "https://creativecommons.org/publicdomain/mark/1.0/deed.fi" }
|
|
32
|
+
];
|
|
70
33
|
function findSubfieldIndex(field, subfield) {
|
|
71
34
|
subfield.nvtmp = 1;
|
|
72
|
-
const index = field.subfields.findIndex(sf => sf.nvtmp === 1);
|
|
35
|
+
const index = field.subfields.findIndex((sf) => sf.nvtmp === 1);
|
|
73
36
|
delete subfield.nvtmp;
|
|
74
37
|
return index;
|
|
75
38
|
}
|
|
76
39
|
function validLicenseInSubfieldC(subfieldC, license) {
|
|
77
|
-
if (subfieldC.code !==
|
|
40
|
+
if (subfieldC.code !== "c") {
|
|
78
41
|
return false;
|
|
79
42
|
}
|
|
80
|
-
//nvdebug(`Compare ${subfieldC.value} vs ${license.license}`);
|
|
81
43
|
return license.license === subfieldC.value;
|
|
82
44
|
}
|
|
83
45
|
function validUrlInSubfieldU(subfieldU, license) {
|
|
84
|
-
if (subfieldU.code !==
|
|
46
|
+
if (subfieldU.code !== "u") {
|
|
85
47
|
return false;
|
|
86
48
|
}
|
|
87
|
-
//nvdebug(`Compare ${subfieldU.value} vs ${license.url}`);
|
|
88
49
|
return license.url === subfieldU.value;
|
|
89
50
|
}
|
|
90
51
|
function fixC(field, subfieldC) {
|
|
91
|
-
|
|
92
|
-
subfieldC.code = 'f';
|
|
52
|
+
subfieldC.code = "f";
|
|
93
53
|
const index = findSubfieldIndex(field, subfieldC);
|
|
94
|
-
field.subfields.splice(index + 1, 0, {
|
|
95
|
-
'code': '2',
|
|
96
|
-
'value': 'cc'
|
|
97
|
-
});
|
|
54
|
+
field.subfields.splice(index + 1, 0, { "code": "2", "value": "cc" });
|
|
98
55
|
}
|
|
99
56
|
function fieldHasOldCcLicense(field, fix) {
|
|
100
|
-
if (field.tag !==
|
|
57
|
+
if (field.tag !== "540") {
|
|
101
58
|
return false;
|
|
102
59
|
}
|
|
103
|
-
|
|
104
|
-
const validLicense = licences.find(license => field.subfields.some(sf => validLicenseInSubfieldC(sf, license)) && field.subfields.some(sf => validUrlInSubfieldU(sf, license)));
|
|
60
|
+
const validLicense = licences.find((license) => field.subfields.some((sf) => validLicenseInSubfieldC(sf, license)) && field.subfields.some((sf) => validUrlInSubfieldU(sf, license)));
|
|
105
61
|
if (!validLicense) {
|
|
106
62
|
return false;
|
|
107
63
|
}
|
|
108
|
-
//nvdebug(` Found valid license`);
|
|
109
64
|
if (fix) {
|
|
110
|
-
const subfieldsC = field.subfields.filter(sf => validLicenseInSubfieldC(sf, validLicense));
|
|
111
|
-
subfieldsC.forEach(c => fixC(field, c));
|
|
65
|
+
const subfieldsC = field.subfields.filter((sf) => validLicenseInSubfieldC(sf, validLicense));
|
|
66
|
+
subfieldsC.forEach((c) => fixC(field, c));
|
|
112
67
|
}
|
|
113
68
|
return true;
|
|
114
69
|
}
|
|
115
70
|
function getFieldsThatUseOldFormat(record, fix) {
|
|
116
|
-
return record.fields.filter(f => fieldHasOldCcLicense(f, fix));
|
|
71
|
+
return record.fields.filter((f) => fieldHasOldCcLicense(f, fix));
|
|
117
72
|
}
|
|
118
|
-
//# sourceMappingURL=update-field-540.js.map
|
|
73
|
+
//# sourceMappingURL=update-field-540.js.map
|
|
@@ -1 +1,7 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/update-field-540.js"],
|
|
4
|
+
"sourcesContent": ["//import createDebugLogger from 'debug';\nimport {fieldToString} from './utils.js';\n\n//const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/update-field-540');\n\n// Author(s): Nicholas Volk\nexport default function () {\n\n return {\n description: 'Validator for field 540 (modernization as per MELKEHITYS-2431)',\n validate, fix\n };\n\n function fix(record) {\n const fixedFields = getFieldsThatUseOldFormat(record, true);\n\n const fixedFieldsAsStrings = fixedFields.map(f => fieldToString(f));\n\n return {message: [], fix: fixedFieldsAsStrings, valid: true};\n }\n\n function validate(record) {\n const yeOldeFields = getFieldsThatUseOldFormat(record, false);\n if (yeOldeFields.length === 0) {\n return {'message': [], 'valid': true};\n }\n const messages = yeOldeFields.map(f => fieldToString(f));\n\n return {'message': messages, 'valid': false};\n }\n\n}\n\n\nconst licences = [\n {'license': 'CC BY 4.0', 'url': 'https://creativecommons.org/licenses/by/4.0/deed.fi'},\n {'license': 'CC BY-NC 4.0', 'url': 'https://creativecommons.org/licenses/by-nc/4.0/deed.fi'},\n {'license': 'CC BY-NC-ND 4.0', 'url': 'https://creativecommons.org/licenses/by-nc-nd/4.0/deed.fi'},\n {'license': 'CC BY-NC-SA 4.0', 'url': 'https://creativecommons.org/licenses/by-nc-sa/4.0/deed.fi'},\n {'license': 'CC BY-ND 4.0', 'url': 'https://creativecommons.org/licenses/by-nd/4.0/deed.fi'},\n {'license': 'CC BY-SA 4.0', 'url': 'https://creativecommons.org/licenses/by-sa/4.0/deed.fi'},\n {'license': 'CC0 1.0', 'url': 'https://creativecommons.org/publicdomain/zero/1.0/deed.fi'}, // not seen/unused\n {'license': 'Public domain', 'url': 'https://creativecommons.org/publicdomain/mark/1.0/deed.fi'}\n];\n\nfunction findSubfieldIndex(field, subfield) {\n subfield.nvtmp = 1;\n const index = field.subfields.findIndex(sf => sf.nvtmp === 1);\n delete subfield.nvtmp;\n return index;\n}\n\nfunction validLicenseInSubfieldC(subfieldC, license) {\n if (subfieldC.code !== 'c') {\n return false;\n }\n //nvdebug(`Compare ${subfieldC.value} vs ${license.license}`);\n return license.license === subfieldC.value;\n}\n\nfunction validUrlInSubfieldU(subfieldU, license) {\n if (subfieldU.code !== 'u') {\n return false;\n }\n //nvdebug(`Compare ${subfieldU.value} vs ${license.url}`);\n return license.url === subfieldU.value;\n}\n\n\nfunction fixC(field, subfieldC) {\n // MELINDA-2431_\n subfieldC.code = 'f';\n const index = findSubfieldIndex(field, subfieldC);\n field.subfields.splice(index + 1, 0, {'code': '2', 'value': 'cc'});\n}\n\nfunction fieldHasOldCcLicense(field, fix) {\n if (field.tag !== '540') {\n return false;\n }\n //nvdebug(`NORM 540: ${fieldToString(field)}`);\n const validLicense = licences.find(license => field.subfields.some(sf => validLicenseInSubfieldC(sf, license)) && field.subfields.some(sf => validUrlInSubfieldU(sf, license)));\n if (!validLicense) {\n return false;\n }\n //nvdebug(` Found valid license`);\n if (fix) {\n const subfieldsC = field.subfields.filter(sf => validLicenseInSubfieldC(sf, validLicense));\n subfieldsC.forEach(c => fixC(field, c));\n }\n\n return true;\n}\n\n\nfunction getFieldsThatUseOldFormat(record, fix) {\n return record.fields.filter(f => fieldHasOldCcLicense(f, fix));\n}\n\n"],
|
|
5
|
+
"mappings": "AACA,SAAQ,qBAAoB;AAK5B,0BAA2B;AAEzB,SAAO;AAAA,IACL,aAAa;AAAA,IACb;AAAA,IAAU;AAAA,EACZ;AAEA,WAAS,IAAI,QAAQ;AACnB,UAAM,cAAc,0BAA0B,QAAQ,IAAI;AAE1D,UAAM,uBAAuB,YAAY,IAAI,OAAK,cAAc,CAAC,CAAC;AAElE,WAAO,EAAC,SAAS,CAAC,GAAG,KAAK,sBAAsB,OAAO,KAAI;AAAA,EAC7D;AAEA,WAAS,SAAS,QAAQ;AACxB,UAAM,eAAe,0BAA0B,QAAQ,KAAK;AAC5D,QAAI,aAAa,WAAW,GAAG;AAC7B,aAAO,EAAC,WAAW,CAAC,GAAG,SAAS,KAAI;AAAA,IACtC;AACA,UAAM,WAAW,aAAa,IAAI,OAAK,cAAc,CAAC,CAAC;AAEvD,WAAO,EAAC,WAAW,UAAU,SAAS,MAAK;AAAA,EAC7C;AAEF;AAGA,MAAM,WAAW;AAAA,EACf,EAAC,WAAW,aAAa,OAAO,sDAAqD;AAAA,EACrF,EAAC,WAAW,gBAAgB,OAAO,yDAAwD;AAAA,EAC3F,EAAC,WAAW,mBAAmB,OAAO,4DAA2D;AAAA,EACjG,EAAC,WAAW,mBAAmB,OAAO,4DAA2D;AAAA,EACjG,EAAC,WAAW,gBAAgB,OAAO,yDAAwD;AAAA,EAC3F,EAAC,WAAW,gBAAgB,OAAO,yDAAwD;AAAA,EAC3F,EAAC,WAAW,WAAW,OAAO,4DAA2D;AAAA;AAAA,EACzF,EAAC,WAAW,iBAAiB,OAAO,4DAA2D;AACjG;AAEA,SAAS,kBAAkB,OAAO,UAAU;AAC1C,WAAS,QAAQ;AACjB,QAAM,QAAQ,MAAM,UAAU,UAAU,QAAM,GAAG,UAAU,CAAC;AAC5D,SAAO,SAAS;AAChB,SAAO;AACT;AAEA,SAAS,wBAAwB,WAAW,SAAS;AACnD,MAAI,UAAU,SAAS,KAAK;AAC1B,WAAO;AAAA,EACT;AAEA,SAAO,QAAQ,YAAY,UAAU;AACvC;AAEA,SAAS,oBAAoB,WAAW,SAAS;AAC/C,MAAI,UAAU,SAAS,KAAK;AAC1B,WAAO;AAAA,EACT;AAEA,SAAO,QAAQ,QAAQ,UAAU;AACnC;AAGA,SAAS,KAAK,OAAO,WAAW;AAE9B,YAAU,OAAO;AACjB,QAAM,QAAQ,kBAAkB,OAAO,SAAS;AAChD,QAAM,UAAU,OAAO,QAAQ,GAAG,GAAG,EAAC,QAAQ,KAAK,SAAS,KAAI,CAAC;AACnE;AAEA,SAAS,qBAAqB,OAAO,KAAK;AACxC,MAAI,MAAM,QAAQ,OAAO;AACvB,WAAO;AAAA,EACT;AAEA,QAAM,eAAe,SAAS,KAAK,aAAW,MAAM,UAAU,KAAK,QAAM,wBAAwB,IAAI,OAAO,CAAC,KAAK,MAAM,UAAU,KAAK,QAAM,oBAAoB,IAAI,OAAO,CAAC,CAAC;AAC9K,MAAI,CAAC,cAAc;AACjB,WAAO;AAAA,EACT;AAEA,MAAI,KAAK;AACP,UAAM,aAAa,MAAM,UAAU,OAAO,QAAM,wBAAwB,IAAI,YAAY,CAAC;AACzF,eAAW,QAAQ,OAAK,KAAK,OAAO,CAAC,CAAC;AAAA,EACxC;AAEA,SAAO;AACT;AAGA,SAAS,0BAA0B,QAAQ,KAAK;AAC9C,SAAO,OAAO,OAAO,OAAO,OAAK,qBAAqB,GAAG,GAAG,CAAC;AAC/D;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import assert from "node:assert";
|
|
2
|
+
import { MarcRecord } from "@natlibfi/marc-record";
|
|
3
|
+
import validatorFactory from "../src/update-field-540.js";
|
|
4
|
+
import { READERS } from "@natlibfi/fixura";
|
|
5
|
+
import generateTests from "@natlibfi/fixugen";
|
|
6
|
+
import createDebugLogger from "debug";
|
|
7
|
+
generateTests({
|
|
8
|
+
callback,
|
|
9
|
+
path: [import.meta.dirname, "..", "test-fixtures", "update-field-540"],
|
|
10
|
+
useMetadataFile: true,
|
|
11
|
+
recurse: false,
|
|
12
|
+
fixura: {
|
|
13
|
+
reader: READERS.JSON
|
|
14
|
+
},
|
|
15
|
+
hooks: {
|
|
16
|
+
before: async () => {
|
|
17
|
+
testValidatorFactory();
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
const debug = createDebugLogger("@natlibfi/marc-record-validators-melinda/update-field-540:test");
|
|
22
|
+
async function testValidatorFactory() {
|
|
23
|
+
const validator = await validatorFactory();
|
|
24
|
+
assert(validator).to.be.an("object").that.has.any.keys("description", "validate");
|
|
25
|
+
assert(validator.description).to.be.a("string");
|
|
26
|
+
assert(validator.validate).to.be.a("function");
|
|
27
|
+
}
|
|
28
|
+
async function callback({ getFixture, enabled = true, fix = false }) {
|
|
29
|
+
if (enabled === false) {
|
|
30
|
+
debug("TEST SKIPPED!");
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const validator = await validatorFactory();
|
|
34
|
+
const record = new MarcRecord(getFixture("record.json"));
|
|
35
|
+
const expectedResult = getFixture("expectedResult.json");
|
|
36
|
+
if (!fix) {
|
|
37
|
+
const result = await validator.validate(record);
|
|
38
|
+
assert.deepEqual(result, expectedResult);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
await validator.fix(record);
|
|
42
|
+
assert.deepEqual(record, expectedResult);
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=update-field-540.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/update-field-540.test.js"],
|
|
4
|
+
"sourcesContent": ["import assert from 'node:assert';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/update-field-540.js';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\nimport createDebugLogger from 'debug';\n\ngenerateTests({\n callback,\n path: [import.meta.dirname, '..', 'test-fixtures', 'update-field-540'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n hooks: {\n before: async () => {\n testValidatorFactory();\n }\n }\n});\n\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/update-field-540:test');\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n assert(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n assert(validator.description).to.be.a('string');\n assert(validator.validate).to.be.a('function');\n}\n\nasync function callback({getFixture, enabled = true, fix = false}) {\n if (enabled === false) {\n debug('TEST SKIPPED!');\n return;\n }\n\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n assert.deepEqual(result, expectedResult);\n return;\n }\n\n await validator.fix(record);\n assert.deepEqual(record, expectedResult);\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAAO,YAAY;AACnB,SAAQ,kBAAiB;AACzB,OAAO,sBAAsB;AAC7B,SAAQ,eAAc;AACtB,OAAO,mBAAmB;AAC1B,OAAO,uBAAuB;AAE9B,cAAc;AAAA,EACZ;AAAA,EACA,MAAM,CAAC,YAAY,SAAS,MAAM,iBAAiB,kBAAkB;AAAA,EACrE,iBAAiB;AAAA,EACjB,SAAS;AAAA,EACT,QAAQ;AAAA,IACN,QAAQ,QAAQ;AAAA,EAClB;AAAA,EACA,OAAO;AAAA,IACL,QAAQ,YAAY;AAClB,2BAAqB;AAAA,IACvB;AAAA,EACF;AACF,CAAC;AAED,MAAM,QAAQ,kBAAkB,gEAAgE;AAEhG,eAAe,uBAAuB;AACpC,QAAM,YAAY,MAAM,iBAAiB;AAEzC,SAAO,SAAS,EACb,GAAG,GAAG,GAAG,QAAQ,EACjB,KAAK,IAAI,IAAI,KAAK,eAAe,UAAU;AAE9C,SAAO,UAAU,WAAW,EAAE,GAAG,GAAG,EAAE,QAAQ;AAC9C,SAAO,UAAU,QAAQ,EAAE,GAAG,GAAG,EAAE,UAAU;AAC/C;AAEA,eAAe,SAAS,EAAC,YAAY,UAAU,MAAM,MAAM,MAAK,GAAG;AACjE,MAAI,YAAY,OAAO;AACrB,UAAM,eAAe;AACrB;AAAA,EACF;AAEA,QAAM,YAAY,MAAM,iBAAiB;AACzC,QAAM,SAAS,IAAI,WAAW,WAAW,aAAa,CAAC;AACvD,QAAM,iBAAiB,WAAW,qBAAqB;AAGvD,MAAI,CAAC,KAAK;AACR,UAAM,SAAS,MAAM,UAAU,SAAS,MAAM;AAC9C,WAAO,UAAU,QAAQ,cAAc;AACvC;AAAA,EACF;AAEA,QAAM,UAAU,IAAI,MAAM;AAC1B,SAAO,UAAU,QAAQ,cAAc;AACzC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/urn.js
CHANGED
|
@@ -1,38 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
var _nodeFetch = _interopRequireDefault(require("node-fetch"));
|
|
8
|
-
var _utils = require("./utils");
|
|
9
|
-
var _debug = _interopRequireDefault(require("debug"));
|
|
10
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
-
const URN_GENERATOR_URL = 'https://generator.urn.fi/cgi-bin/urn_generator.cgi?type=nbn';
|
|
12
|
-
function _default(isLegalDeposit = false, useMelindaTemp = true) {
|
|
13
|
-
const debug = (0, _debug.default)('@natlibfi/marc-record-validators-melinda:urn');
|
|
14
|
-
const debugData = debug.extend('data');
|
|
15
|
-
|
|
16
|
-
//console.log(`IS LEGAL DEPOSIT? ${isLegalDeposit ? 'YES' : 'NO'}`); // eslint-disable-line no-console
|
|
17
|
-
|
|
18
|
-
// We should check that the f856 with URN has second indicator '0' (Resource), ' ' (No information provided) or '8' (No display constant generated)
|
|
19
|
-
// - if second indicator is '1' (Version of resource) or '2' (Related resource) the URN in f856 is not correct for the resource described in the record
|
|
20
|
-
|
|
21
|
-
// This checks only the existence of URNs from the Finnish urn.fi -resolver
|
|
22
|
-
|
|
1
|
+
import { isElectronicMaterial } from "./utils.js";
|
|
2
|
+
import createDebugLogger from "debug";
|
|
3
|
+
const URN_GENERATOR_URL = "https://generator.urn.fi/cgi-bin/urn_generator.cgi?type=nbn";
|
|
4
|
+
export default function(isLegalDeposit = false, useMelindaTemp = true) {
|
|
5
|
+
const debug = createDebugLogger("@natlibfi/marc-record-validators-melinda:urn");
|
|
6
|
+
const debugData = debug.extend("data");
|
|
23
7
|
function hasLegalDepositURN(field) {
|
|
24
|
-
if (field.tag !==
|
|
8
|
+
if (field.tag !== "856" || ["1", "2", "3", "4"].includes(field.ind2)) {
|
|
25
9
|
return false;
|
|
26
10
|
}
|
|
27
|
-
|
|
28
|
-
// First attempt to fix MET-573. However, does useMelindaTemp come into play as well?
|
|
29
|
-
if (isLegalDeposit && !field.subfields.some(sf => sf.code === '5' && sf.value === 'FI-Vapaa')) {
|
|
11
|
+
if (isLegalDeposit && !field.subfields.some((sf) => sf.code === "5" && sf.value === "FI-Vapaa")) {
|
|
30
12
|
return false;
|
|
31
13
|
}
|
|
32
|
-
return field.subfields.some(sf => sf.code ===
|
|
14
|
+
return field.subfields.some((sf) => sf.code === "u" && /^https?:\/\/urn\.fi/u.test(sf.value));
|
|
33
15
|
}
|
|
34
16
|
return {
|
|
35
|
-
description:
|
|
17
|
+
description: "Adds URN for record, to 856-field (if not existing). If isLegalDeposit is active, adds legal deposit subfields to the f856s with URN.",
|
|
36
18
|
validate,
|
|
37
19
|
fix
|
|
38
20
|
};
|
|
@@ -41,135 +23,87 @@ function _default(isLegalDeposit = false, useMelindaTemp = true) {
|
|
|
41
23
|
debugData(`f856sUrn: ${JSON.stringify(f856sUrn)}`);
|
|
42
24
|
const ldSubfields = isLegalDeposit ? createLDSubfields() : [];
|
|
43
25
|
debugData(`IsLegalDeposit: ${isLegalDeposit}, LegalDepositSubfields: ${JSON.stringify(ldSubfields)}`);
|
|
44
|
-
|
|
45
|
-
// We add the URN even if we're not getting the legalDeposit - where does this URN resolve?
|
|
46
|
-
// We probably should not do these additions
|
|
47
|
-
|
|
48
26
|
if (f856sUrn.length === 0) {
|
|
49
|
-
const {
|
|
50
|
-
code,
|
|
51
|
-
value,
|
|
52
|
-
generated
|
|
53
|
-
} = await createURNSubfield(record);
|
|
27
|
+
const { code, value, generated } = await createURNSubfield(record);
|
|
54
28
|
if (generated && useMelindaTemp) {
|
|
55
|
-
const tempSubField = {
|
|
56
|
-
code: '9',
|
|
57
|
-
value: 'MELINDA<TEMP>'
|
|
58
|
-
};
|
|
29
|
+
const tempSubField = { code: "9", value: "MELINDA<TEMP>" };
|
|
59
30
|
record.insertField({
|
|
60
|
-
tag:
|
|
61
|
-
ind1:
|
|
62
|
-
ind2:
|
|
63
|
-
subfields: [{
|
|
64
|
-
code,
|
|
65
|
-
value
|
|
66
|
-
}, ...ldSubfields, tempSubField]
|
|
31
|
+
tag: "856",
|
|
32
|
+
ind1: "4",
|
|
33
|
+
ind2: "0",
|
|
34
|
+
subfields: [{ code, value }, ...ldSubfields, tempSubField]
|
|
67
35
|
});
|
|
68
36
|
return true;
|
|
69
37
|
}
|
|
70
38
|
record.insertField({
|
|
71
|
-
tag:
|
|
72
|
-
ind1:
|
|
73
|
-
ind2:
|
|
74
|
-
subfields: [{
|
|
75
|
-
code,
|
|
76
|
-
value
|
|
77
|
-
}, ...ldSubfields]
|
|
39
|
+
tag: "856",
|
|
40
|
+
ind1: "4",
|
|
41
|
+
ind2: "0",
|
|
42
|
+
subfields: [{ code, value }, ...ldSubfields]
|
|
78
43
|
});
|
|
79
44
|
return true;
|
|
80
45
|
}
|
|
81
46
|
if (isLegalDeposit) {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
// We should check for existence of a legal deposit URN anyways
|
|
86
|
-
|
|
87
|
-
f856sUrn.forEach(f => {
|
|
88
|
-
// Change phrase from old to new if field with old phrase is found
|
|
89
|
-
if (f.subfields.some(sf => hasOld856LdPhrase(sf))) {
|
|
90
|
-
f.subfields.find(sf => hasOld856LdPhrase(sf)).value = 'Käytettävissä vapaakappaletyöasemilla';
|
|
47
|
+
f856sUrn.forEach((f) => {
|
|
48
|
+
if (f.subfields.some((sf) => hasOld856LdPhrase(sf))) {
|
|
49
|
+
f.subfields.find((sf) => hasOld856LdPhrase(sf)).value = "K\xE4ytett\xE4viss\xE4 vapaakappalety\xF6asemilla";
|
|
91
50
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
ldSubfields.forEach(ldsf => {
|
|
95
|
-
if (!f.subfields.some(sf => sf.code === ldsf.code && sf.value === ldsf.value && !hasOld856LdPhrase(sf))) {
|
|
51
|
+
ldSubfields.forEach((ldsf) => {
|
|
52
|
+
if (!f.subfields.some((sf) => sf.code === ldsf.code && sf.value === ldsf.value && !hasOld856LdPhrase(sf))) {
|
|
96
53
|
f.subfields.push(ldsf);
|
|
97
54
|
}
|
|
98
55
|
});
|
|
99
56
|
});
|
|
100
57
|
}
|
|
101
58
|
return true;
|
|
102
|
-
|
|
103
|
-
// We should check existence of URN in f024 i1: '7' $2 urn/URN for this too
|
|
104
|
-
|
|
105
59
|
async function createURNSubfield(rec) {
|
|
106
|
-
// isbn is picked from the last 020 $a in the record
|
|
107
|
-
// what should we do in case of several 020 $a:s
|
|
108
60
|
const isbn = rec.fields.reduce((acc, f) => {
|
|
109
|
-
if (f.tag ===
|
|
110
|
-
const a = f.subfields.find(sf => sf.code ===
|
|
111
|
-
return a ? a.value :
|
|
61
|
+
if (f.tag === "020") {
|
|
62
|
+
const a = f.subfields.find((sf) => sf.code === "a");
|
|
63
|
+
return a ? a.value : void 0;
|
|
112
64
|
}
|
|
113
65
|
return acc;
|
|
114
|
-
},
|
|
66
|
+
}, void 0);
|
|
115
67
|
debugData(`isbns: ${isbn}`);
|
|
116
|
-
const {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
code: 'u',
|
|
122
|
-
value,
|
|
123
|
-
generated
|
|
124
|
-
};
|
|
125
|
-
async function createURN(isbn = false) {
|
|
126
|
-
if (isbn) {
|
|
127
|
-
return {
|
|
128
|
-
generated: false,
|
|
129
|
-
value: `https://urn.fi/URN:ISBN:${isbn}`
|
|
130
|
-
};
|
|
68
|
+
const { generated, value } = await createURN(isbn);
|
|
69
|
+
return { code: "u", value, generated };
|
|
70
|
+
async function createURN(isbn2 = false) {
|
|
71
|
+
if (isbn2) {
|
|
72
|
+
return { generated: false, value: `https://urn.fi/URN:ISBN:${isbn2}` };
|
|
131
73
|
}
|
|
132
|
-
const response = await (
|
|
74
|
+
const response = await fetch(URN_GENERATOR_URL);
|
|
133
75
|
const body = await response.text();
|
|
134
|
-
|
|
135
|
-
// If we generated URN we could also add it to the 024
|
|
136
|
-
// generated 024 should also have $9 MELINDA<TEMP>
|
|
137
|
-
return {
|
|
138
|
-
generated: true,
|
|
139
|
-
value: `https://urn.fi/${body}`
|
|
140
|
-
};
|
|
76
|
+
return { generated: true, value: `https://urn.fi/${body}` };
|
|
141
77
|
}
|
|
142
78
|
}
|
|
143
|
-
function hasOld856LdPhrase({
|
|
144
|
-
code
|
|
145
|
-
value
|
|
146
|
-
}) {
|
|
147
|
-
if (code === 'z' && value === 'Käytettävissä vapaakappalekirjastoissa') {
|
|
79
|
+
function hasOld856LdPhrase({ code, value }) {
|
|
80
|
+
if (code === "z" && value === "K\xE4ytett\xE4viss\xE4 vapaakappalekirjastoissa") {
|
|
148
81
|
return true;
|
|
149
82
|
}
|
|
150
83
|
return false;
|
|
151
84
|
}
|
|
152
85
|
}
|
|
153
|
-
|
|
154
|
-
// Later when the new subfields that have f506/f540 -type contents, we should add also them here
|
|
155
86
|
function createLDSubfields() {
|
|
156
|
-
return [
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
87
|
+
return [
|
|
88
|
+
{
|
|
89
|
+
code: "z",
|
|
90
|
+
value: "K\xE4ytett\xE4viss\xE4 vapaakappalety\xF6asemilla"
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
code: "5",
|
|
94
|
+
value: "FI-Vapaa"
|
|
95
|
+
}
|
|
96
|
+
];
|
|
163
97
|
}
|
|
164
98
|
function fieldHasLDSubfields(field, ldSubfields) {
|
|
165
|
-
if (ldSubfields.every(ldsf => field.subfields.some(sf => sf.code === ldsf.code && sf.value === ldsf.value))) {
|
|
99
|
+
if (ldSubfields.every((ldsf) => field.subfields.some((sf) => sf.code === ldsf.code && sf.value === ldsf.value))) {
|
|
166
100
|
return true;
|
|
167
101
|
}
|
|
168
102
|
}
|
|
169
103
|
function validateLD(f856sUrn) {
|
|
170
104
|
debug(`Validating the existence of legal deposit subfields`);
|
|
171
105
|
const ldSubfields = createLDSubfields();
|
|
172
|
-
const f856sUrnWithLdSubfields = f856sUrn.filter(field => fieldHasLDSubfields(field, ldSubfields));
|
|
106
|
+
const f856sUrnWithLdSubfields = f856sUrn.filter((field) => fieldHasLDSubfields(field, ldSubfields));
|
|
173
107
|
if (f856sUrnWithLdSubfields.length > 0) {
|
|
174
108
|
debug(`Record has ${f856sUrnWithLdSubfields.length} URN fields with all necessary legal deposit subfields`);
|
|
175
109
|
debugData(`f856sUrnWithLdSubfields: ${JSON.stringify(f856sUrnWithLdSubfields)}`);
|
|
@@ -178,12 +112,9 @@ function _default(isLegalDeposit = false, useMelindaTemp = true) {
|
|
|
178
112
|
return false;
|
|
179
113
|
}
|
|
180
114
|
function validate(record) {
|
|
181
|
-
|
|
182
|
-
if (!(0, _utils.isElectronicMaterial)(record)) {
|
|
115
|
+
if (!isElectronicMaterial(record)) {
|
|
183
116
|
debug(`Record is not electronic - no need to validate legal deposit URNs`);
|
|
184
|
-
return {
|
|
185
|
-
valid: true
|
|
186
|
-
};
|
|
117
|
+
return { valid: true };
|
|
187
118
|
}
|
|
188
119
|
const f856sUrn = record.fields.filter(hasLegalDepositURN);
|
|
189
120
|
if (f856sUrn.length > 0) {
|
|
@@ -191,15 +122,11 @@ function _default(isLegalDeposit = false, useMelindaTemp = true) {
|
|
|
191
122
|
debugData(`f856sUrn: ${JSON.stringify(f856sUrn)}`);
|
|
192
123
|
if (!isLegalDeposit || validateLD(f856sUrn)) {
|
|
193
124
|
debug(`Record is valid`);
|
|
194
|
-
return {
|
|
195
|
-
valid: true
|
|
196
|
-
};
|
|
125
|
+
return { valid: true };
|
|
197
126
|
}
|
|
198
127
|
}
|
|
199
128
|
debug(`No (valid) URN fields - Record is not valid`);
|
|
200
|
-
return {
|
|
201
|
-
valid: false
|
|
202
|
-
};
|
|
129
|
+
return { valid: false };
|
|
203
130
|
}
|
|
204
131
|
}
|
|
205
|
-
//# sourceMappingURL=urn.js.map
|
|
132
|
+
//# sourceMappingURL=urn.js.map
|