@natlibfi/marc-record-validators-melinda 11.6.7 → 12.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/melinda-node-tests.yml +1 -1
- package/dist/access-rights.js +63 -91
- package/dist/access-rights.js.map +7 -1
- package/dist/access-rights.test.js +137 -0
- package/dist/access-rights.test.js.map +7 -0
- package/dist/addMissingField041.js +21 -53
- package/dist/addMissingField041.js.map +7 -1
- package/dist/addMissingField041.test.js +39 -0
- package/dist/addMissingField041.test.js.map +7 -0
- package/dist/addMissingField336.js +99 -191
- package/dist/addMissingField336.js.map +7 -1
- package/dist/addMissingField336.test.js +39 -0
- package/dist/addMissingField336.test.js.map +7 -0
- package/dist/addMissingField337.js +63 -132
- package/dist/addMissingField337.js.map +7 -1
- package/dist/addMissingField337.test.js +39 -0
- package/dist/addMissingField337.test.js.map +7 -0
- package/dist/addMissingField338.js +147 -253
- package/dist/addMissingField338.js.map +7 -1
- package/dist/addMissingField338.test.js +39 -0
- package/dist/addMissingField338.test.js.map +7 -0
- package/dist/cyrillux-usemarcon-replacement.js +119 -272
- package/dist/cyrillux-usemarcon-replacement.js.map +7 -1
- package/dist/cyrillux-usemarcon-replacement.test.js +46 -0
- package/dist/cyrillux-usemarcon-replacement.test.js.map +7 -0
- package/dist/cyrillux.js +119 -223
- package/dist/cyrillux.js.map +7 -1
- package/dist/cyrillux.test.js +39 -0
- package/dist/cyrillux.test.js.map +7 -0
- package/dist/disambiguateSeriesStatements.js +40 -81
- package/dist/disambiguateSeriesStatements.js.map +7 -1
- package/dist/disambiguateSeriesStatements.test.js +44 -0
- package/dist/disambiguateSeriesStatements.test.js.map +7 -0
- package/dist/double-commas.js +7 -14
- package/dist/double-commas.js.map +7 -1
- package/dist/double-commas.test.js +48 -0
- package/dist/double-commas.test.js.map +7 -0
- package/dist/duplicates-ind1.js +10 -31
- package/dist/duplicates-ind1.js.map +7 -1
- package/dist/duplicates-ind1.test.js +40 -0
- package/dist/duplicates-ind1.test.js.map +7 -0
- package/dist/empty-fields.js +10 -22
- package/dist/empty-fields.js.map +7 -1
- package/dist/empty-fields.test.js +129 -0
- package/dist/empty-fields.test.js.map +7 -0
- package/dist/ending-punctuation-conf.js +871 -769
- package/dist/ending-punctuation-conf.js.map +7 -1
- package/dist/ending-punctuation.js +84 -167
- package/dist/ending-punctuation.js.map +7 -1
- package/dist/ending-punctuation.test.js +2290 -0
- package/dist/ending-punctuation.test.js.map +7 -0
- package/dist/ending-whitespace.js +10 -35
- package/dist/ending-whitespace.js.map +7 -1
- package/dist/ending-whitespace.test.js +38 -0
- package/dist/ending-whitespace.test.js.map +7 -0
- package/dist/field-008-18-34-character-groups.js +40 -125
- package/dist/field-008-18-34-character-groups.js.map +7 -1
- package/dist/field-008-18-34-character-groups.test.js +45 -0
- package/dist/field-008-18-34-character-groups.test.js.map +7 -0
- package/dist/field-505-separators.js +19 -39
- package/dist/field-505-separators.js.map +7 -1
- package/dist/field-505-separators.test.js +45 -0
- package/dist/field-505-separators.test.js.map +7 -0
- package/dist/field-521-fix.js +19 -47
- package/dist/field-521-fix.js.map +7 -1
- package/dist/field-521-fix.test.js +44 -0
- package/dist/field-521-fix.test.js.map +7 -0
- package/dist/field-exclusion.js +37 -91
- package/dist/field-exclusion.js.map +7 -1
- package/dist/field-exclusion.test.js +821 -0
- package/dist/field-exclusion.test.js.map +7 -0
- package/dist/field-structure.js +52 -104
- package/dist/field-structure.js.map +7 -1
- package/dist/field-structure.test.js +587 -0
- package/dist/field-structure.test.js.map +7 -0
- package/dist/field33XUtils.js +119 -503
- package/dist/field33XUtils.js.map +7 -1
- package/dist/fields-present.js +11 -23
- package/dist/fields-present.js.map +7 -1
- package/dist/fields-present.test.js +95 -0
- package/dist/fields-present.test.js.map +7 -0
- package/dist/fix-33X.js +393 -431
- package/dist/fix-33X.js.map +7 -1
- package/dist/fix-33X.test.js +39 -0
- package/dist/fix-33X.test.js.map +7 -0
- package/dist/fix-country-codes.js +20 -50
- package/dist/fix-country-codes.js.map +7 -1
- package/dist/fix-country-codes.test.js +44 -0
- package/dist/fix-country-codes.test.js.map +7 -0
- package/dist/fix-language-codes.js +23 -53
- package/dist/fix-language-codes.js.map +7 -1
- package/dist/fix-language-codes.test.js +38 -0
- package/dist/fix-language-codes.test.js.map +7 -0
- package/dist/fixRelatorTerms.js +82 -209
- package/dist/fixRelatorTerms.js.map +7 -1
- package/dist/fixRelatorTerms.test.js +44 -0
- package/dist/fixRelatorTerms.test.js.map +7 -0
- package/dist/fixed-fields.js +21 -30
- package/dist/fixed-fields.js.map +7 -1
- package/dist/fixed-fields.test.js +87 -0
- package/dist/fixed-fields.test.js.map +7 -0
- package/dist/identical-fields.js +8 -24
- package/dist/identical-fields.js.map +7 -1
- package/dist/identical-fields.test.js +119 -0
- package/dist/identical-fields.test.js.map +7 -0
- package/dist/index.js +119 -413
- package/dist/index.js.map +7 -1
- package/dist/indicator-fixes.js +57 -95
- package/dist/indicator-fixes.js.map +7 -1
- package/dist/indicator-fixes.test.js +42 -0
- package/dist/indicator-fixes.test.js.map +7 -0
- package/dist/isbn-issn.js +66 -126
- package/dist/isbn-issn.js.map +7 -1
- package/dist/isbn-issn.test.js +398 -0
- package/dist/isbn-issn.test.js.map +7 -0
- package/dist/item-language.js +32 -65
- package/dist/item-language.js.map +7 -1
- package/dist/item-language.test.js +322 -0
- package/dist/item-language.test.js.map +7 -0
- package/dist/melindaCustomMergeFields.js +5182 -11233
- package/dist/melindaCustomMergeFields.js.map +7 -1
- package/dist/merge-fields/controlSubfields.js +75 -142
- package/dist/merge-fields/controlSubfields.js.map +7 -1
- package/dist/merge-fields/counterpartField.js +182 -379
- package/dist/merge-fields/counterpartField.js.map +7 -1
- package/dist/merge-fields/index.js +15 -49
- package/dist/merge-fields/index.js.map +7 -1
- package/dist/merge-fields/mergableIndicator.js +18 -51
- package/dist/merge-fields/mergableIndicator.js.map +7 -1
- package/dist/merge-fields/mergableTag.js +78 -30
- package/dist/merge-fields/mergableTag.js.map +7 -1
- package/dist/merge-fields/mergeConfig.js +66 -171
- package/dist/merge-fields/mergeConfig.js.map +7 -1
- package/dist/merge-fields/mergeConstraints.js +323 -1214
- package/dist/merge-fields/mergeConstraints.js.map +7 -1
- package/dist/merge-fields/mergeField.js +47 -111
- package/dist/merge-fields/mergeField.js.map +7 -1
- package/dist/merge-fields/mergeIndicator.js +64 -118
- package/dist/merge-fields/mergeIndicator.js.map +7 -1
- package/dist/merge-fields/mergeOrAddPostprocess.js +14 -38
- package/dist/merge-fields/mergeOrAddPostprocess.js.map +7 -1
- package/dist/merge-fields/mergeOrAddSubfield.js +62 -104
- package/dist/merge-fields/mergeOrAddSubfield.js.map +7 -1
- package/dist/merge-fields/mergeSubfield.js +47 -95
- package/dist/merge-fields/mergeSubfield.js.map +7 -1
- package/dist/merge-fields/removeDuplicateSubfields.js +18 -31
- package/dist/merge-fields/removeDuplicateSubfields.js.map +7 -1
- package/dist/merge-fields/worldKnowledge.js +15 -40
- package/dist/merge-fields/worldKnowledge.js.map +7 -1
- package/dist/merge-fields.test.js +44 -0
- package/dist/merge-fields.test.js.map +7 -0
- package/dist/mergeField500Lisapainokset.js +28 -57
- package/dist/mergeField500Lisapainokset.js.map +7 -1
- package/dist/mergeField500Lisapainokset.test.js +44 -0
- package/dist/mergeField500Lisapainokset.test.js.map +7 -0
- package/dist/mergeRelatorTermFields.js +33 -69
- package/dist/mergeRelatorTermFields.js.map +7 -1
- package/dist/mergeRelatorTermFields.test.js +44 -0
- package/dist/mergeRelatorTermFields.test.js.map +7 -0
- package/dist/modernize-502.js +23 -55
- package/dist/modernize-502.js.map +7 -1
- package/dist/modernize-502.test.js +38 -0
- package/dist/modernize-502.test.js.map +7 -0
- package/dist/multiple-subfield-0.js +23 -48
- package/dist/multiple-subfield-0.js.map +7 -1
- package/dist/multiple-subfield-0.test.js +44 -0
- package/dist/multiple-subfield-0.test.js.map +7 -0
- package/dist/non-breaking-space.js +11 -32
- package/dist/non-breaking-space.js.map +7 -1
- package/dist/non-breaking-space.test.js +38 -0
- package/dist/non-breaking-space.test.js.map +7 -0
- package/dist/normalize-dashes.js +18 -37
- package/dist/normalize-dashes.js.map +7 -1
- package/dist/normalize-dashes.test.js +44 -0
- package/dist/normalize-dashes.test.js.map +7 -0
- package/dist/normalize-identifiers.js +54 -140
- package/dist/normalize-identifiers.js.map +7 -1
- package/dist/normalize-identifiers.test.js +44 -0
- package/dist/normalize-identifiers.test.js.map +7 -0
- package/dist/normalize-qualifying-information.js +23 -48
- package/dist/normalize-qualifying-information.js.map +7 -1
- package/dist/normalize-qualifying-information.test.js +44 -0
- package/dist/normalize-qualifying-information.test.js.map +7 -0
- package/dist/normalize-utf8-diacritics.js +19 -105
- package/dist/normalize-utf8-diacritics.js.map +7 -1
- package/dist/normalize-utf8-diacritics.test.js +44 -0
- package/dist/normalize-utf8-diacritics.test.js.map +7 -0
- package/dist/normalizeFieldForComparison.js +67 -158
- package/dist/normalizeFieldForComparison.js.map +7 -1
- package/dist/normalizeSubfieldValueForComparison.js +37 -77
- package/dist/normalizeSubfieldValueForComparison.js.map +7 -1
- package/dist/prepublicationUtils.js +58 -111
- package/dist/prepublicationUtils.js.map +7 -1
- package/dist/punctuation/index.js +56 -72
- package/dist/punctuation/index.js.map +7 -1
- package/dist/punctuation/rules/aut.js +372 -331
- package/dist/punctuation/rules/aut.js.map +7 -1
- package/dist/punctuation/rules/bib.js +420 -373
- package/dist/punctuation/rules/bib.js.map +7 -1
- package/dist/punctuation/rules/index.js +7 -21
- package/dist/punctuation/rules/index.js.map +7 -1
- package/dist/punctuation.test.js +44 -0
- package/dist/punctuation.test.js.map +7 -0
- package/dist/punctuation2.js +251 -800
- package/dist/punctuation2.js.map +7 -1
- package/dist/punctuation2.test.js +44 -0
- package/dist/punctuation2.test.js.map +7 -0
- package/dist/reindexSubfield6OccurenceNumbers.js +61 -96
- package/dist/reindexSubfield6OccurenceNumbers.js.map +7 -1
- package/dist/reindexSubfield6OccurenceNumbers.test.js +44 -0
- package/dist/reindexSubfield6OccurenceNumbers.test.js.map +7 -0
- package/dist/removeDuplicateDataFields.js +102 -202
- package/dist/removeDuplicateDataFields.js.map +7 -1
- package/dist/removeDuplicateDataFields.test.js +44 -0
- package/dist/removeDuplicateDataFields.test.js.map +7 -0
- package/dist/removeInferiorDataFields.js +103 -227
- package/dist/removeInferiorDataFields.js.map +7 -1
- package/dist/removeInferiorDataFields.test.js +44 -0
- package/dist/removeInferiorDataFields.test.js.map +7 -0
- package/dist/resolvable-ext-references-melinda.js +25 -60
- package/dist/resolvable-ext-references-melinda.js.map +7 -1
- package/dist/resolvable-ext-references-melinda.test.js +160 -0
- package/dist/resolvable-ext-references-melinda.test.js.map +7 -0
- package/dist/resolveOrphanedSubfield6s.js +33 -64
- package/dist/resolveOrphanedSubfield6s.js.map +7 -1
- package/dist/resolveOrphanedSubfield6s.test.js +44 -0
- package/dist/resolveOrphanedSubfield6s.test.js.map +7 -0
- package/dist/sanitize-vocabulary-source-codes.js +27 -55
- package/dist/sanitize-vocabulary-source-codes.js.map +7 -1
- package/dist/sanitize-vocabulary-source-codes.test.js +45 -0
- package/dist/sanitize-vocabulary-source-codes.test.js.map +7 -0
- package/dist/sort-tags.js +13 -25
- package/dist/sort-tags.js.map +7 -1
- package/dist/sort-tags.test.js +261 -0
- package/dist/sort-tags.test.js.map +7 -0
- package/dist/sortFields.js +152 -222
- package/dist/sortFields.js.map +7 -1
- package/dist/sortFields.test.js +44 -0
- package/dist/sortFields.test.js.map +7 -0
- package/dist/sortRelatorTerms.js +30 -68
- package/dist/sortRelatorTerms.js.map +7 -1
- package/dist/sortRelatorTerms.test.js +44 -0
- package/dist/sortRelatorTerms.test.js.map +7 -0
- package/dist/sortSubfields.js +102 -255
- package/dist/sortSubfields.js.map +7 -1
- package/dist/sortSubfields.test.js +44 -0
- package/dist/sortSubfields.test.js.map +7 -0
- package/dist/stripPunctuation.js +13 -36
- package/dist/stripPunctuation.js.map +7 -1
- package/dist/stripPunctuation.test.js +44 -0
- package/dist/stripPunctuation.test.js.map +7 -0
- package/dist/subfield-exclusion.js +28 -75
- package/dist/subfield-exclusion.js.map +7 -1
- package/dist/subfield-exclusion.test.js +471 -0
- package/dist/subfield-exclusion.test.js.map +7 -0
- package/dist/subfield6Utils.js +107 -269
- package/dist/subfield6Utils.js.map +7 -1
- package/dist/subfield8Utils.js +26 -50
- package/dist/subfield8Utils.js.map +7 -1
- package/dist/subfieldValueNormalizations.js +40 -74
- package/dist/subfieldValueNormalizations.js.map +7 -1
- package/dist/subfieldValueNormalizations.test.js +45 -0
- package/dist/subfieldValueNormalizations.test.js.map +7 -0
- package/dist/sync-007-and-300.js +22 -53
- package/dist/sync-007-and-300.js.map +7 -1
- package/dist/sync-007-and-300.test.js +44 -0
- package/dist/sync-007-and-300.test.js.map +7 -0
- package/dist/translate-terms.js +67 -155
- package/dist/translate-terms.js.map +7 -1
- package/dist/translate-terms.test.js +44 -0
- package/dist/translate-terms.test.js.map +7 -0
- package/dist/typeOfDate-008.js +10 -25
- package/dist/typeOfDate-008.js.map +7 -1
- package/dist/typeOfDate-008.test.js +40 -0
- package/dist/typeOfDate-008.test.js.map +7 -0
- package/dist/unicode-decomposition.js +94 -107
- package/dist/unicode-decomposition.js.map +7 -1
- package/dist/unicode-decomposition.test.js +94 -0
- package/dist/unicode-decomposition.test.js.map +7 -0
- package/dist/update-field-540.js +30 -75
- package/dist/update-field-540.js.map +7 -1
- package/dist/update-field-540.test.js +44 -0
- package/dist/update-field-540.test.js.map +7 -0
- package/dist/urn.js +55 -128
- package/dist/urn.js.map +7 -1
- package/dist/urn.test.js +44 -0
- package/dist/urn.test.js.map +7 -0
- package/dist/utils.js +72 -126
- package/dist/utils.js.map +7 -1
- package/eslint.config.mjs +1 -2
- package/package.json +21 -93
- package/src/access-rights.js +1 -1
- package/src/{access-rights.spec.js → access-rights.test.js} +9 -10
- package/src/addMissingField041.js +1 -1
- package/src/{addMissingField336.spec.js → addMissingField041.test.js} +13 -14
- package/src/addMissingField336.js +3 -3
- package/src/{addMissingField041.spec.js → addMissingField336.test.js} +13 -14
- package/src/addMissingField337.js +2 -2
- package/src/{addMissingField337.spec.js → addMissingField337.test.js} +13 -14
- package/src/addMissingField338.js +2 -2
- package/src/{addMissingField338.spec.js → addMissingField338.test.js} +13 -14
- package/src/cyrillux-usemarcon-replacement.js +18 -18
- package/src/cyrillux-usemarcon-replacement.test.js +55 -0
- package/src/cyrillux.js +19 -12
- package/src/{cyrillux.spec.js → cyrillux.test.js} +13 -14
- package/src/disambiguateSeriesStatements.js +2 -2
- package/src/{disambiguateSeriesStatements.spec.js → disambiguateSeriesStatements.test.js} +12 -13
- package/src/double-commas.js +1 -1
- package/src/{double-commas.spec.js → double-commas.test.js} +9 -11
- package/src/duplicates-ind1.js +1 -1
- package/src/{duplicates-ind1.spec.js → duplicates-ind1.test.js} +12 -13
- package/src/{empty-fields.spec.js → empty-fields.test.js} +11 -13
- package/src/ending-punctuation.js +1 -1
- package/src/{ending-punctuation.spec.js → ending-punctuation.test.js} +172 -173
- package/src/{ending-whitespace.spec.js → ending-whitespace.test.js} +12 -13
- package/src/field-008-18-34-character-groups.js +2 -2
- package/src/{field-008-18-34-character-groups.spec.js → field-008-18-34-character-groups.test.js} +13 -13
- package/src/field-505-separators.js +3 -3
- package/src/{field-505-separators.spec.js → field-505-separators.test.js} +16 -14
- package/src/field-521-fix.js +2 -2
- package/src/{field-521-fix.spec.js → field-521-fix.test.js} +12 -13
- package/src/field-exclusion.js +1 -1
- package/src/{field-exclusion.spec.js → field-exclusion.test.js} +60 -57
- package/src/{field-structure.spec.js → field-structure.test.js} +29 -29
- package/src/{fields-present.spec.js → fields-present.test.js} +12 -15
- package/src/fix-33X.js +4 -4
- package/src/{fix-33X.spec.js → fix-33X.test.js} +13 -14
- package/src/fix-country-codes.js +1 -1
- package/src/{fix-country-codes.spec.js → fix-country-codes.test.js} +12 -13
- package/src/fix-language-codes.js +5 -5
- package/src/{fix-language-codes.spec.js → fix-language-codes.test.js} +12 -13
- package/src/fixRelatorTerms.js +5 -5
- package/src/{fixRelatorTerms.spec.js → fixRelatorTerms.test.js} +13 -13
- package/src/{fixed-fields.spec.js → fixed-fields.test.js} +11 -14
- package/src/identical-fields.js +1 -1
- package/src/{identical-fields.spec.js → identical-fields.test.js} +9 -11
- package/src/indicator-fixes.js +3 -3
- package/src/{indicator-fixes.spec.js → indicator-fixes.test.js} +9 -12
- package/src/isbn-issn.js +1 -1
- package/src/{isbn-issn.spec.js → isbn-issn.test.js} +20 -22
- package/src/{item-language.spec.js → item-language.test.js} +21 -22
- package/src/merge-fields/controlSubfields.js +1 -1
- package/src/merge-fields/counterpartField.js +8 -9
- package/src/merge-fields/index.js +1 -1
- package/src/merge-fields/mergableIndicator.js +1 -1
- package/src/merge-fields/mergeField.js +6 -6
- package/src/merge-fields/mergeIndicator.js +1 -1
- package/src/merge-fields/mergeOrAddPostprocess.js +4 -4
- package/src/merge-fields/mergeOrAddSubfield.js +2 -2
- package/src/merge-fields/mergeSubfield.js +4 -4
- package/src/merge-fields/removeDuplicateSubfields.js +2 -2
- package/src/{merge-fields.spec.js → merge-fields.test.js} +12 -13
- package/src/{mergeField500Lisapainokset.spec.js → mergeField500Lisapainokset.test.js} +12 -13
- package/src/mergeRelatorTermFields.js +5 -7
- package/src/{mergeRelatorTermFields.spec.js → mergeRelatorTermFields.test.js} +12 -13
- package/src/modernize-502.js +1 -1
- package/src/{modernize-502.spec.js → modernize-502.test.js} +12 -13
- package/src/multiple-subfield-0.js +3 -3
- package/src/{multiple-subfield-0.spec.js → multiple-subfield-0.test.js} +13 -13
- package/src/{non-breaking-space.spec.js → non-breaking-space.test.js} +12 -13
- package/src/normalize-dashes.js +2 -2
- package/src/{normalize-dashes.spec.js → normalize-dashes.test.js} +12 -13
- package/src/normalize-identifiers.js +1 -1
- package/src/{normalize-identifiers.spec.js → normalize-identifiers.test.js} +12 -13
- package/src/normalize-qualifying-information.js +2 -2
- package/src/{normalize-qualifying-information.spec.js → normalize-qualifying-information.test.js} +12 -13
- package/src/normalize-utf8-diacritics.js +2 -2
- package/src/{normalize-utf8-diacritics.spec.js → normalize-utf8-diacritics.test.js} +13 -13
- package/src/normalizeFieldForComparison.js +6 -6
- package/src/normalizeSubfieldValueForComparison.js +1 -1
- package/src/prepublicationUtils.js +4 -4
- package/src/punctuation/index.js +1 -1
- package/src/punctuation/rules/index.js +2 -2
- package/src/{punctuation.spec.js → punctuation.test.js} +12 -13
- package/src/punctuation2.js +4 -4
- package/src/{punctuation2.spec.js → punctuation2.test.js} +12 -13
- package/src/reindexSubfield6OccurenceNumbers.js +5 -7
- package/src/{reindexSubfield6OccurenceNumbers.spec.js → reindexSubfield6OccurenceNumbers.test.js} +12 -13
- package/src/removeDuplicateDataFields.js +11 -19
- package/src/{removeDuplicateDataFields.spec.js → removeDuplicateDataFields.test.js} +12 -13
- package/src/removeInferiorDataFields.js +11 -11
- package/src/{removeInferiorDataFields.spec.js → removeInferiorDataFields.test.js} +13 -13
- package/src/resolvable-ext-references-melinda.js +1 -1
- package/src/{resolvable-ext-references-melinda.spec.js → resolvable-ext-references-melinda.test.js} +42 -27
- package/src/resolveOrphanedSubfield6s.js +5 -5
- package/src/{resolveOrphanedSubfield6s.spec.js → resolveOrphanedSubfield6s.test.js} +13 -13
- package/src/sanitize-vocabulary-source-codes.js +4 -4
- package/src/{sanitize-vocabulary-source-codes.spec.js → sanitize-vocabulary-source-codes.test.js} +16 -14
- package/src/{sort-tags.spec.js → sort-tags.test.js} +9 -11
- package/src/sortFields.js +4 -4
- package/src/{sortFields.spec.js → sortFields.test.js} +12 -13
- package/src/sortRelatorTerms.js +3 -3
- package/src/{sortRelatorTerms.spec.js → sortRelatorTerms.test.js} +13 -13
- package/src/sortSubfields.js +1 -1
- package/src/{sortSubfields.spec.js → sortSubfields.test.js} +13 -13
- package/src/stripPunctuation.js +3 -3
- package/src/{stripPunctuation.spec.js → stripPunctuation.test.js} +13 -13
- package/src/subfield-exclusion.js +1 -1
- package/src/{subfield-exclusion.spec.js → subfield-exclusion.test.js} +45 -36
- package/src/subfield6Utils.js +6 -10
- package/src/subfield8Utils.js +4 -4
- package/src/subfieldValueNormalizations.js +3 -3
- package/src/{subfieldValueNormalizations.spec.js → subfieldValueNormalizations.test.js} +18 -14
- package/src/sync-007-and-300.js +2 -2
- package/src/{sync-007-and-300.spec.js → sync-007-and-300.test.js} +13 -13
- package/src/translate-terms.js +3 -3
- package/src/{translate-terms.spec.js → translate-terms.test.js} +13 -13
- package/src/{typeOfDate-008.spec.js → typeOfDate-008.test.js} +12 -13
- package/src/{unicode-decomposition.spec.js → unicode-decomposition.test.js} +10 -16
- package/src/update-field-540.js +2 -2
- package/src/{update-field-540.spec.js → update-field-540.test.js} +13 -10
- package/src/urn.js +2 -2
- package/src/{urn.spec.js → urn.test.js} +12 -13
- package/src/utils.js +3 -3
- package/test-fixtures/field-505-separators/03/expectedResult.json +3 -1
- package/test-fixtures/field-505-separators/03/record.json +3 -0
- package/test-fixtures/normalize-subfield-value/01/metadata.json +4 -1
- package/test-fixtures/normalize-subfield-value/01/record.json +3 -0
- package/test-fixtures/normalize-subfield-value/02/expectedResult.json +3 -1
- package/test-fixtures/normalize-subfield-value/02/metadata.json +2 -1
- package/test-fixtures/normalize-subfield-value/02/record.json +3 -0
- package/test-fixtures/sanitize-vocabulary-source-codes/f03/expectedResult.json +3 -1
- package/test-fixtures/sanitize-vocabulary-source-codes/f04/expectedResult.json +3 -1
- package/test-fixtures/sanitize-vocabulary-source-codes/v04/metadata.json +1 -4
- package/test-fixtures/sanitize-vocabulary-source-codes/v04/record.json +1 -1
- package/dist/access-rights.spec.js +0 -195
- package/dist/access-rights.spec.js.map +0 -1
- package/dist/addMissingField041.spec.js +0 -45
- package/dist/addMissingField041.spec.js.map +0 -1
- package/dist/addMissingField336.spec.js +0 -45
- package/dist/addMissingField336.spec.js.map +0 -1
- package/dist/addMissingField337.spec.js +0 -43
- package/dist/addMissingField337.spec.js.map +0 -1
- package/dist/addMissingField338.spec.js +0 -45
- package/dist/addMissingField338.spec.js.map +0 -1
- package/dist/cyrillux-usemarcon-replacement.spec.js +0 -45
- package/dist/cyrillux-usemarcon-replacement.spec.js.map +0 -1
- package/dist/cyrillux.spec.js +0 -46
- package/dist/cyrillux.spec.js.map +0 -1
- package/dist/disambiguateSeriesStatements.spec.js +0 -51
- package/dist/disambiguateSeriesStatements.spec.js.map +0 -1
- package/dist/double-commas.spec.js +0 -73
- package/dist/double-commas.spec.js.map +0 -1
- package/dist/duplicates-ind1.spec.js +0 -45
- package/dist/duplicates-ind1.spec.js.map +0 -1
- package/dist/empty-fields.spec.js +0 -118
- package/dist/empty-fields.spec.js.map +0 -1
- package/dist/ending-punctuation.spec.js +0 -2654
- package/dist/ending-punctuation.spec.js.map +0 -1
- package/dist/ending-whitespace.spec.js +0 -42
- package/dist/ending-whitespace.spec.js.map +0 -1
- package/dist/field-008-18-34-character-groups.spec.js +0 -51
- package/dist/field-008-18-34-character-groups.spec.js.map +0 -1
- package/dist/field-505-separators.spec.js +0 -51
- package/dist/field-505-separators.spec.js.map +0 -1
- package/dist/field-521-fix.spec.js +0 -51
- package/dist/field-521-fix.spec.js.map +0 -1
- package/dist/field-exclusion.spec.js +0 -1054
- package/dist/field-exclusion.spec.js.map +0 -1
- package/dist/field-structure.spec.js +0 -535
- package/dist/field-structure.spec.js.map +0 -1
- package/dist/fields-present.spec.js +0 -121
- package/dist/fields-present.spec.js.map +0 -1
- package/dist/fix-33X.spec.js +0 -45
- package/dist/fix-33X.spec.js.map +0 -1
- package/dist/fix-country-codes.spec.js +0 -51
- package/dist/fix-country-codes.spec.js.map +0 -1
- package/dist/fix-language-codes.spec.js +0 -44
- package/dist/fix-language-codes.spec.js.map +0 -1
- package/dist/fixRelatorTerms.spec.js +0 -51
- package/dist/fixRelatorTerms.spec.js.map +0 -1
- package/dist/fixed-fields.spec.js +0 -140
- package/dist/fixed-fields.spec.js.map +0 -1
- package/dist/identical-fields.spec.js +0 -99
- package/dist/identical-fields.spec.js.map +0 -1
- package/dist/indicator-fixes.spec.js +0 -51
- package/dist/indicator-fixes.spec.js.map +0 -1
- package/dist/isbn-issn.spec.js +0 -595
- package/dist/isbn-issn.spec.js.map +0 -1
- package/dist/item-language.spec.js +0 -306
- package/dist/item-language.spec.js.map +0 -1
- package/dist/melindaCustomMergeFields.json +0 -5120
- package/dist/merge-fields.spec.js +0 -51
- package/dist/merge-fields.spec.js.map +0 -1
- package/dist/mergeField500Lisapainokset.spec.js +0 -51
- package/dist/mergeField500Lisapainokset.spec.js.map +0 -1
- package/dist/mergeRelatorTermFields.spec.js +0 -51
- package/dist/mergeRelatorTermFields.spec.js.map +0 -1
- package/dist/modernize-502.spec.js +0 -49
- package/dist/modernize-502.spec.js.map +0 -1
- package/dist/multiple-subfield-0.spec.js +0 -51
- package/dist/multiple-subfield-0.spec.js.map +0 -1
- package/dist/non-breaking-space.spec.js +0 -42
- package/dist/non-breaking-space.spec.js.map +0 -1
- package/dist/normalize-dashes.spec.js +0 -51
- package/dist/normalize-dashes.spec.js.map +0 -1
- package/dist/normalize-identifiers.spec.js +0 -51
- package/dist/normalize-identifiers.spec.js.map +0 -1
- package/dist/normalize-qualifying-information.spec.js +0 -51
- package/dist/normalize-qualifying-information.spec.js.map +0 -1
- package/dist/normalize-utf8-diacritics.spec.js +0 -51
- package/dist/normalize-utf8-diacritics.spec.js.map +0 -1
- package/dist/punctuation.spec.js +0 -51
- package/dist/punctuation.spec.js.map +0 -1
- package/dist/punctuation2.spec.js +0 -51
- package/dist/punctuation2.spec.js.map +0 -1
- package/dist/reindexSubfield6OccurenceNumbers.spec.js +0 -51
- package/dist/reindexSubfield6OccurenceNumbers.spec.js.map +0 -1
- package/dist/removeDuplicateDataFields.spec.js +0 -51
- package/dist/removeDuplicateDataFields.spec.js.map +0 -1
- package/dist/removeInferiorDataFields.spec.js +0 -51
- package/dist/removeInferiorDataFields.spec.js.map +0 -1
- package/dist/resolvable-ext-references-melinda.spec.js +0 -166
- package/dist/resolvable-ext-references-melinda.spec.js.map +0 -1
- package/dist/resolveOrphanedSubfield6s.spec.js +0 -51
- package/dist/resolveOrphanedSubfield6s.spec.js.map +0 -1
- package/dist/sanitize-vocabulary-source-codes.spec.js +0 -51
- package/dist/sanitize-vocabulary-source-codes.spec.js.map +0 -1
- package/dist/sort-tags.spec.js +0 -207
- package/dist/sort-tags.spec.js.map +0 -1
- package/dist/sortFields.spec.js +0 -51
- package/dist/sortFields.spec.js.map +0 -1
- package/dist/sortRelatorTerms.spec.js +0 -51
- package/dist/sortRelatorTerms.spec.js.map +0 -1
- package/dist/sortSubfields.spec.js +0 -52
- package/dist/sortSubfields.spec.js.map +0 -1
- package/dist/stripPunctuation.spec.js +0 -51
- package/dist/stripPunctuation.spec.js.map +0 -1
- package/dist/subfield-exclusion.spec.js +0 -523
- package/dist/subfield-exclusion.spec.js.map +0 -1
- package/dist/subfieldValueNormalizations.spec.js +0 -51
- package/dist/subfieldValueNormalizations.spec.js.map +0 -1
- package/dist/sync-007-and-300.spec.js +0 -51
- package/dist/sync-007-and-300.spec.js.map +0 -1
- package/dist/translate-terms.spec.js +0 -51
- package/dist/translate-terms.spec.js.map +0 -1
- package/dist/typeOfDate-008.spec.js +0 -47
- package/dist/typeOfDate-008.spec.js.map +0 -1
- package/dist/unicode-decomposition.spec.js +0 -91
- package/dist/unicode-decomposition.spec.js.map +0 -1
- package/dist/update-field-540.spec.js +0 -51
- package/dist/update-field-540.spec.js.map +0 -1
- package/dist/urn.spec.js +0 -52
- package/dist/urn.spec.js.map +0 -1
- package/src/cyrillux-usemarcon-replacement.spec.js +0 -47
package/dist/sync-007-and-300.js
CHANGED
|
@@ -1,123 +1,92 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = _default;
|
|
7
|
-
var _utils = require("./utils");
|
|
8
|
-
var _clone = _interopRequireDefault(require("clone"));
|
|
9
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
-
//import createDebugLogger from 'debug';
|
|
11
|
-
|
|
12
|
-
//const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/sanitize-vocabulary-source-codes);
|
|
13
|
-
|
|
14
|
-
// Author(s): Nicholas Volk, Joni Ollila
|
|
15
|
-
function _default() {
|
|
1
|
+
import { fieldToString } from "./utils.js";
|
|
2
|
+
import clone from "clone";
|
|
3
|
+
export default function() {
|
|
16
4
|
return {
|
|
17
|
-
description:
|
|
5
|
+
description: "Validator for updating mismatching f007 based on f300 (DVD/Bluray) (MRA-613)",
|
|
18
6
|
validate,
|
|
19
7
|
fix
|
|
20
8
|
};
|
|
21
9
|
function fix(record) {
|
|
22
|
-
const res = {
|
|
23
|
-
|
|
24
|
-
fix: [],
|
|
25
|
-
valid: true
|
|
26
|
-
};
|
|
27
|
-
record.fields.forEach(f => fixField(f, record)); // eslint-disable-line array-callback-return
|
|
10
|
+
const res = { message: [], fix: [], valid: true };
|
|
11
|
+
record.fields.forEach((f) => fixField(f, record));
|
|
28
12
|
return res;
|
|
29
13
|
}
|
|
30
14
|
function validate(record) {
|
|
31
|
-
const res = {
|
|
32
|
-
|
|
33
|
-
};
|
|
34
|
-
record.fields.forEach(field => {
|
|
15
|
+
const res = { message: [] };
|
|
16
|
+
record.fields.forEach((field) => {
|
|
35
17
|
validateField(field, res, record);
|
|
36
18
|
});
|
|
37
19
|
res.valid = !(res.message.length >= 1);
|
|
38
20
|
return res;
|
|
39
21
|
}
|
|
40
22
|
function validateField(field, res, record) {
|
|
41
|
-
if (field.tag !==
|
|
23
|
+
if (field.tag !== "007") {
|
|
42
24
|
return;
|
|
43
25
|
}
|
|
44
|
-
const orig =
|
|
45
|
-
const normalizedField = fixField((
|
|
46
|
-
const mod =
|
|
26
|
+
const orig = fieldToString(field);
|
|
27
|
+
const normalizedField = fixField(clone(field), record);
|
|
28
|
+
const mod = fieldToString(normalizedField);
|
|
47
29
|
if (orig !== mod) {
|
|
48
|
-
// Fail as the input is "broken"/"crap"/sumthing
|
|
49
30
|
res.message.push(`FIXABLE: '${orig}' => '${mod}'`);
|
|
50
31
|
return;
|
|
51
32
|
}
|
|
52
|
-
|
|
53
|
-
/*
|
|
54
|
-
if (fieldHasUnfixableStuff(field)) {
|
|
55
|
-
res.message.push(`CAN'T BE FIXED AUTOMATICALLY: '${orig}'`);
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
*/
|
|
59
33
|
return;
|
|
60
34
|
}
|
|
61
35
|
function fieldIsBluray007(field) {
|
|
62
|
-
if (field.tag !==
|
|
36
|
+
if (field.tag !== "007") {
|
|
63
37
|
return false;
|
|
64
38
|
}
|
|
65
39
|
return field.value.match(/^v...s/u);
|
|
66
40
|
}
|
|
67
41
|
function fieldIsDvd007(field) {
|
|
68
|
-
if (field.tag !==
|
|
42
|
+
if (field.tag !== "007") {
|
|
69
43
|
return false;
|
|
70
44
|
}
|
|
71
45
|
return field.value.match(/^v...v/u);
|
|
72
46
|
}
|
|
73
47
|
function fieldIsBluray300(field) {
|
|
74
|
-
if (field.tag !==
|
|
48
|
+
if (field.tag !== "300") {
|
|
75
49
|
return false;
|
|
76
50
|
}
|
|
77
|
-
return field.subfields.some(subfield => subfield.value.match(/(?:Blu.?ray|BD)/ui));
|
|
51
|
+
return field.subfields.some((subfield) => subfield.value.match(/(?:Blu.?ray|BD)/ui));
|
|
78
52
|
}
|
|
79
53
|
function fieldIsDvd300(field) {
|
|
80
|
-
if (field.tag !==
|
|
54
|
+
if (field.tag !== "300") {
|
|
81
55
|
return false;
|
|
82
56
|
}
|
|
83
|
-
return field.subfields.some(subfield => subfield.value.match(/DVD/ui));
|
|
57
|
+
return field.subfields.some((subfield) => subfield.value.match(/DVD/ui));
|
|
84
58
|
}
|
|
85
59
|
function recordHasBluray300(record) {
|
|
86
|
-
return record.fields.some(f => fieldIsBluray300(f));
|
|
60
|
+
return record.fields.some((f) => fieldIsBluray300(f));
|
|
87
61
|
}
|
|
88
62
|
function recordHasDvd300(record) {
|
|
89
|
-
return record.fields.some(f => fieldIsDvd300(f));
|
|
63
|
+
return record.fields.some((f) => fieldIsDvd300(f));
|
|
90
64
|
}
|
|
91
65
|
function convert007BlurayToDvd(field) {
|
|
92
66
|
if (!fieldIsBluray007(field)) {
|
|
93
67
|
return;
|
|
94
68
|
}
|
|
95
|
-
//field.value = field.value.substring(0, 4) + 's' + field.value.substring(5);
|
|
96
|
-
//field.value = field.value.replace(/^(?:v...)s/u, `${1}v`); // eslint-disable-line functional/immutable-data, no-template-curly-in-string
|
|
97
69
|
field.value = `${field.value.substring(0, 4)}v${field.value.substring(5)}`;
|
|
98
70
|
}
|
|
99
71
|
function convert007DvdToBluray(field) {
|
|
100
72
|
if (!fieldIsDvd007(field)) {
|
|
101
73
|
return;
|
|
102
74
|
}
|
|
103
|
-
//field.value = field.value.replace(/^(?:v...)v/u, `${1}s`);
|
|
104
75
|
field.value = `${field.value.substring(0, 4)}s${field.value.substring(5)}`;
|
|
105
76
|
}
|
|
106
77
|
function fixField(field, record) {
|
|
107
|
-
if (field.tag !==
|
|
78
|
+
if (field.tag !== "007") {
|
|
108
79
|
return field;
|
|
109
80
|
}
|
|
110
81
|
if (fieldIsDvd007(field) && recordHasBluray300(record) && !recordHasDvd300(record)) {
|
|
111
|
-
// FIX 007: DVD -> Blu-ray
|
|
112
82
|
convert007DvdToBluray(field);
|
|
113
83
|
return field;
|
|
114
84
|
}
|
|
115
85
|
if (fieldIsBluray007(field) && recordHasDvd300(record) && !recordHasBluray300(record)) {
|
|
116
|
-
// FIX 007: Blu-Ray -> DVD
|
|
117
86
|
convert007BlurayToDvd(field);
|
|
118
87
|
return field;
|
|
119
88
|
}
|
|
120
89
|
return field;
|
|
121
90
|
}
|
|
122
91
|
}
|
|
123
|
-
//# sourceMappingURL=sync-007-and-300.js.map
|
|
92
|
+
//# sourceMappingURL=sync-007-and-300.js.map
|
|
@@ -1 +1,7 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/sync-007-and-300.js"],
|
|
4
|
+
"sourcesContent": ["//import createDebugLogger from 'debug';\nimport {fieldToString} from './utils.js';\nimport clone from 'clone';\n\n//const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/sanitize-vocabulary-source-codes);\n\n// Author(s): Nicholas Volk, Joni Ollila\nexport default function () {\n\n return {\n description: 'Validator for updating mismatching f007 based on f300 (DVD/Bluray) (MRA-613)',\n validate, fix\n };\n\n function fix(record) {\n const res = {message: [], fix: [], valid: true};\n record.fields.forEach(f => fixField(f, record));\n return res;\n }\n\n function validate(record) {\n const res = {message: []};\n\n record.fields.forEach(field => {\n validateField(field, res, record);\n });\n\n res.valid = !(res.message.length >= 1);\n return res;\n }\n\n function validateField(field, res, record) {\n if (field.tag !== '007') {\n return;\n }\n const orig = fieldToString(field);\n\n const normalizedField = fixField(clone(field), record);\n const mod = fieldToString(normalizedField);\n if (orig !== mod) { // Fail as the input is \"broken\"/\"crap\"/sumthing\n res.message.push(`FIXABLE: '${orig}' => '${mod}'`);\n return;\n }\n\n /*\n if (fieldHasUnfixableStuff(field)) {\n res.message.push(`CAN'T BE FIXED AUTOMATICALLY: '${orig}'`);\n return;\n }\n */\n return;\n }\n\n function fieldIsBluray007(field) {\n if (field.tag !== '007') {\n return false;\n }\n return field.value.match(/^v...s/u);\n }\n\n function fieldIsDvd007(field) {\n if (field.tag !== '007') {\n return false;\n }\n return field.value.match(/^v...v/u);\n }\n\n function fieldIsBluray300(field) {\n if (field.tag !== '300') {\n return false;\n }\n return field.subfields.some(subfield => subfield.value.match(/(?:Blu.?ray|BD)/ui));\n }\n\n function fieldIsDvd300(field) {\n if (field.tag !== '300') {\n return false;\n }\n return field.subfields.some(subfield => subfield.value.match(/DVD/ui));\n }\n\n function recordHasBluray300(record) {\n return record.fields.some(f => fieldIsBluray300(f));\n }\n\n function recordHasDvd300(record) {\n return record.fields.some(f => fieldIsDvd300(f));\n }\n\n function convert007BlurayToDvd(field) {\n if (!fieldIsBluray007(field)) {\n return;\n }\n //field.value = field.value.substring(0, 4) + 's' + field.value.substring(5);\n //field.value = field.value.replace(/^(?:v...)s/u, `${1}v`); // eslint-disable-line functional/immutable-data, no-template-curly-in-string\n field.value = `${field.value.substring(0, 4)}v${field.value.substring(5)}`;\n }\n\n function convert007DvdToBluray(field) {\n if (!fieldIsDvd007(field)) {\n return;\n }\n //field.value = field.value.replace(/^(?:v...)v/u, `${1}s`);\n field.value = `${field.value.substring(0, 4)}s${field.value.substring(5)}`;\n }\n\n function fixField(field, record) {\n if (field.tag !== '007') {\n return field;\n }\n\n if (fieldIsDvd007(field) && recordHasBluray300(record) && !recordHasDvd300(record)) {\n // FIX 007: DVD -> Blu-ray\n convert007DvdToBluray(field);\n return field;\n }\n\n if (fieldIsBluray007(field) && recordHasDvd300(record) && !recordHasBluray300(record)) {\n // FIX 007: Blu-Ray -> DVD\n convert007BlurayToDvd(field);\n return field;\n }\n\n return field;\n }\n\n}\n"],
|
|
5
|
+
"mappings": "AACA,SAAQ,qBAAoB;AAC5B,OAAO,WAAW;AAKlB,0BAA2B;AAEzB,SAAO;AAAA,IACL,aAAa;AAAA,IACb;AAAA,IAAU;AAAA,EACZ;AAEA,WAAS,IAAI,QAAQ;AACnB,UAAM,MAAM,EAAC,SAAS,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,KAAI;AAC9C,WAAO,OAAO,QAAQ,OAAK,SAAS,GAAG,MAAM,CAAC;AAC9C,WAAO;AAAA,EACT;AAEA,WAAS,SAAS,QAAQ;AACxB,UAAM,MAAM,EAAC,SAAS,CAAC,EAAC;AAExB,WAAO,OAAO,QAAQ,WAAS;AAC7B,oBAAc,OAAO,KAAK,MAAM;AAAA,IAClC,CAAC;AAED,QAAI,QAAQ,EAAE,IAAI,QAAQ,UAAU;AACpC,WAAO;AAAA,EACT;AAEA,WAAS,cAAc,OAAO,KAAK,QAAQ;AACzC,QAAI,MAAM,QAAQ,OAAO;AACvB;AAAA,IACF;AACA,UAAM,OAAO,cAAc,KAAK;AAEhC,UAAM,kBAAkB,SAAS,MAAM,KAAK,GAAG,MAAM;AACrD,UAAM,MAAM,cAAc,eAAe;AACzC,QAAI,SAAS,KAAK;AAChB,UAAI,QAAQ,KAAK,aAAa,IAAI,SAAS,GAAG,GAAG;AACjD;AAAA,IACF;AAQA;AAAA,EACF;AAEA,WAAS,iBAAiB,OAAO;AAC/B,QAAI,MAAM,QAAQ,OAAO;AACvB,aAAO;AAAA,IACT;AACA,WAAO,MAAM,MAAM,MAAM,SAAS;AAAA,EACpC;AAEA,WAAS,cAAc,OAAO;AAC5B,QAAI,MAAM,QAAQ,OAAO;AACvB,aAAO;AAAA,IACT;AACA,WAAO,MAAM,MAAM,MAAM,SAAS;AAAA,EACpC;AAEA,WAAS,iBAAiB,OAAO;AAC/B,QAAI,MAAM,QAAQ,OAAO;AACvB,aAAO;AAAA,IACT;AACA,WAAO,MAAM,UAAU,KAAK,cAAY,SAAS,MAAM,MAAM,mBAAmB,CAAC;AAAA,EACnF;AAEA,WAAS,cAAc,OAAO;AAC5B,QAAI,MAAM,QAAQ,OAAO;AACvB,aAAO;AAAA,IACT;AACA,WAAO,MAAM,UAAU,KAAK,cAAY,SAAS,MAAM,MAAM,OAAO,CAAC;AAAA,EACvE;AAEA,WAAS,mBAAmB,QAAQ;AAClC,WAAO,OAAO,OAAO,KAAK,OAAK,iBAAiB,CAAC,CAAC;AAAA,EACpD;AAEA,WAAS,gBAAgB,QAAQ;AAC/B,WAAO,OAAO,OAAO,KAAK,OAAK,cAAc,CAAC,CAAC;AAAA,EACjD;AAEA,WAAS,sBAAsB,OAAO;AACpC,QAAI,CAAC,iBAAiB,KAAK,GAAG;AAC5B;AAAA,IACF;AAGA,UAAM,QAAQ,GAAG,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,MAAM,MAAM,UAAU,CAAC,CAAC;AAAA,EAC1E;AAEA,WAAS,sBAAsB,OAAO;AACpC,QAAI,CAAC,cAAc,KAAK,GAAG;AACzB;AAAA,IACF;AAEA,UAAM,QAAQ,GAAG,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,MAAM,MAAM,UAAU,CAAC,CAAC;AAAA,EAC1E;AAEA,WAAS,SAAS,OAAO,QAAQ;AAC/B,QAAI,MAAM,QAAQ,OAAO;AACvB,aAAO;AAAA,IACT;AAEA,QAAI,cAAc,KAAK,KAAK,mBAAmB,MAAM,KAAK,CAAC,gBAAgB,MAAM,GAAG;AAElF,4BAAsB,KAAK;AAC3B,aAAO;AAAA,IACT;AAEA,QAAI,iBAAiB,KAAK,KAAK,gBAAgB,MAAM,KAAK,CAAC,mBAAmB,MAAM,GAAG;AAErF,4BAAsB,KAAK;AAC3B,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAEF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import assert from "node:assert";
|
|
2
|
+
import { MarcRecord } from "@natlibfi/marc-record";
|
|
3
|
+
import validatorFactory from "./sync-007-and-300.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", "sync-007-and-300"],
|
|
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/sync-007-and-300:test");
|
|
22
|
+
async function testValidatorFactory() {
|
|
23
|
+
const validator = await validatorFactory();
|
|
24
|
+
assert.equal(typeof validator, "object");
|
|
25
|
+
assert.equal(typeof validator.description, "string");
|
|
26
|
+
assert.equal(typeof validator.validate, "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=sync-007-and-300.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/sync-007-and-300.test.js"],
|
|
4
|
+
"sourcesContent": ["import assert from 'node:assert';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './sync-007-and-300.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', 'sync-007-and-300'],\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/sync-007-and-300:test');\n\nasync function testValidatorFactory() {\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\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;AAEF,CAAC;AACD,MAAM,QAAQ,kBAAkB,gEAAgE;AAEhG,eAAe,uBAAuB;AACpC,QAAM,YAAY,MAAM,iBAAiB;AAEzC,SAAO,MAAM,OAAO,WAAW,QAAQ;AACvC,SAAO,MAAM,OAAO,UAAU,aAAa,QAAQ;AACnD,SAAO,MAAM,OAAO,UAAU,UAAU,UAAU;AACpD;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/translate-terms.js
CHANGED
|
@@ -1,62 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
var _debug = _interopRequireDefault(require("debug"));
|
|
9
|
-
var _utils = require("./utils");
|
|
10
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
-
const debug = (0, _debug.default)('@natlibfi/marc-record-validators-melinda:translate-terms');
|
|
12
|
-
const defaultTags = ['648', '650', '651', '655'];
|
|
13
|
-
const swapLanguageCode = {
|
|
14
|
-
'fin': 'swe',
|
|
15
|
-
'fi': 'sv',
|
|
16
|
-
'sv': 'fi',
|
|
17
|
-
'swe': 'fin'
|
|
18
|
-
};
|
|
19
|
-
const changeAbbrHash = {
|
|
20
|
-
'fi': 'fin',
|
|
21
|
-
'fin': 'fi',
|
|
22
|
-
'sv': 'swe',
|
|
23
|
-
'swe': 'sv'
|
|
24
|
-
};
|
|
1
|
+
import clone from "clone";
|
|
2
|
+
import createDebugLogger from "debug";
|
|
3
|
+
import { fieldHasSubfield, fieldToString, nvdebug } from "./utils.js";
|
|
4
|
+
const debug = createDebugLogger("@natlibfi/marc-record-validators-melinda:translate-terms");
|
|
5
|
+
const defaultTags = ["648", "650", "651", "655"];
|
|
6
|
+
const swapLanguageCode = { "fin": "swe", "fi": "sv", "sv": "fi", "swe": "fin" };
|
|
7
|
+
const changeAbbrHash = { "fi": "fin", "fin": "fi", "sv": "swe", "swe": "sv" };
|
|
25
8
|
const termCache = {};
|
|
26
|
-
|
|
27
|
-
// Author(s): Nicholas Volk
|
|
28
|
-
function _default() {
|
|
9
|
+
export default function() {
|
|
29
10
|
return {
|
|
30
|
-
description:
|
|
11
|
+
description: "Translate yso (648, 650, 651) and slm (655) terms (FIN <=> SWE)",
|
|
31
12
|
validate,
|
|
32
13
|
fix
|
|
33
14
|
};
|
|
34
15
|
async function fix(record) {
|
|
35
16
|
const newFields = await getFields(record, defaultTags, []);
|
|
36
|
-
newFields.forEach(nf =>
|
|
37
|
-
|
|
38
|
-
newFields.
|
|
39
|
-
|
|
40
|
-
const newFieldsAsStrings = newFields.map(f => (0, _utils.fieldToString)(f));
|
|
41
|
-
return {
|
|
42
|
-
message: [],
|
|
43
|
-
fix: newFieldsAsStrings,
|
|
44
|
-
valid: true
|
|
45
|
-
};
|
|
17
|
+
newFields.forEach((nf) => nvdebug(`Add new field '${fieldToString(nf)}'`, debug));
|
|
18
|
+
newFields.forEach((nf) => record.insertField(nf));
|
|
19
|
+
const newFieldsAsStrings = newFields.map((f) => fieldToString(f));
|
|
20
|
+
return { message: [], fix: newFieldsAsStrings, valid: true };
|
|
46
21
|
}
|
|
47
22
|
async function validate(record) {
|
|
48
23
|
const newFields = await getFields(record, defaultTags, []);
|
|
49
24
|
if (newFields.length === 0) {
|
|
50
|
-
return {
|
|
51
|
-
'message': [],
|
|
52
|
-
'valid': true
|
|
53
|
-
};
|
|
25
|
+
return { "message": [], "valid": true };
|
|
54
26
|
}
|
|
55
|
-
const messages = newFields.map(f =>
|
|
56
|
-
return {
|
|
57
|
-
'message': messages,
|
|
58
|
-
'valid': false
|
|
59
|
-
};
|
|
27
|
+
const messages = newFields.map((f) => fieldToString(f));
|
|
28
|
+
return { "message": messages, "valid": false };
|
|
60
29
|
}
|
|
61
30
|
async function getFields(record, tags, fieldsToAdd) {
|
|
62
31
|
const [currTag, ...remainingTags] = tags;
|
|
@@ -73,108 +42,73 @@ function _default() {
|
|
|
73
42
|
return [];
|
|
74
43
|
}
|
|
75
44
|
const fields = record.get(tag);
|
|
76
|
-
const finnishFields = fields.filter(f => isRelevantField(f,
|
|
77
|
-
const swedishFields = fields.filter(f => isRelevantField(f,
|
|
45
|
+
const finnishFields = fields.filter((f) => isRelevantField(f, "fin"));
|
|
46
|
+
const swedishFields = fields.filter((f) => isRelevantField(f, "swe"));
|
|
78
47
|
const finnishOnly = getMisses(finnishFields, swedishFields);
|
|
79
48
|
const swedishOnly = getMisses(swedishFields, finnishFields);
|
|
80
|
-
|
|
81
|
-
//console.log(` Looking at ${finnishOnly.length} + ${swedishOnly.length} fields`); // eslint-disable-line no-console
|
|
82
|
-
return [...finnishOnly, ...swedishOnly].filter(f => tagAndFieldAgree(f));
|
|
49
|
+
return [...finnishOnly, ...swedishOnly].filter((f) => tagAndFieldAgree(f));
|
|
83
50
|
function tagAndFieldAgree(field) {
|
|
84
|
-
|
|
85
|
-
const lexData = getLexiconAndLanguage(field); // $2 data
|
|
51
|
+
const lexData = getLexiconAndLanguage(field);
|
|
86
52
|
return expectedLex === lexData.lex;
|
|
87
53
|
}
|
|
88
54
|
}
|
|
89
55
|
async function deriveMissingFields(record, tag) {
|
|
90
56
|
const pairlessFields = getPairlessFinnishAndSwedishFields(record, tag);
|
|
91
|
-
|
|
92
|
-
// Dunno how to handle loop+promise combo in our normal coding style. Spent half a day trying... (I reckon it takes like 2 minuts to do this properly...)
|
|
93
57
|
let prefLabels = [];
|
|
94
58
|
for (let i = 0; i < pairlessFields.length; i += 1) {
|
|
95
59
|
prefLabels[i] = await getPrefLabel(pairlessFields[i]);
|
|
96
60
|
}
|
|
97
61
|
const missingFields = pairlessFields.map((f, i) => pairField(f, prefLabels[i]));
|
|
98
|
-
return missingFields.filter(f => f);
|
|
62
|
+
return missingFields.filter((f) => f);
|
|
99
63
|
}
|
|
100
64
|
function pairField(field, prefLabels) {
|
|
101
65
|
if (!prefLabels) {
|
|
102
|
-
return
|
|
66
|
+
return void 0;
|
|
103
67
|
}
|
|
104
|
-
//console.log(`pairField() WP 1: ${fieldToString(field)}`); // eslint-disable-line no-console
|
|
105
68
|
const lexAndLang = getLexiconAndLanguage(field);
|
|
106
|
-
//console.log(`pairField() WP 2: ${JSON.stringify(lexAndLang)}`); // eslint-disable-line no-console
|
|
107
69
|
const twoLetterOtherLang = swapLanguageCodeBetweenLanguages(changeAbbr(lexAndLang.lang));
|
|
108
|
-
const prefLabel = prefLabels.find(l => l.lang === twoLetterOtherLang);
|
|
109
|
-
|
|
110
|
-
const
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
}; // field.subfields.field(sf => sf.code === 'a');
|
|
114
|
-
const sf0 = (0, _clone.default)(field.subfields.find(sf => sf.code === '0'));
|
|
115
|
-
const sf2 = {
|
|
116
|
-
'code': '2',
|
|
117
|
-
'value': `${lexAndLang.lex}/${lexAndLang.lang === 'fin' ? 'swe' : 'fin'}`
|
|
118
|
-
}; // swap fin <=> swe
|
|
119
|
-
const newField = {
|
|
120
|
-
tag: field.tag,
|
|
121
|
-
ind1: field.ind1,
|
|
122
|
-
ind2: field.ind2,
|
|
123
|
-
subfields: [sfA, sf2, sf0]
|
|
124
|
-
};
|
|
70
|
+
const prefLabel = prefLabels.find((l) => l.lang === twoLetterOtherLang);
|
|
71
|
+
const sfA = { "code": "a", "value": prefLabel.value };
|
|
72
|
+
const sf0 = clone(field.subfields.find((sf) => sf.code === "0"));
|
|
73
|
+
const sf2 = { "code": "2", "value": `${lexAndLang.lex}/${lexAndLang.lang === "fin" ? "swe" : "fin"}` };
|
|
74
|
+
const newField = { tag: field.tag, ind1: field.ind1, ind2: field.ind2, subfields: [sfA, sf2, sf0] };
|
|
125
75
|
return newField;
|
|
126
76
|
}
|
|
127
77
|
function getLexiconAndLanguage(field) {
|
|
128
|
-
const subfield2 = field.subfields.find(sf => sf.code ===
|
|
129
|
-
if (subfield2.value ===
|
|
130
|
-
return {
|
|
131
|
-
'lex': 'slm',
|
|
132
|
-
'lang': 'fin'
|
|
133
|
-
};
|
|
78
|
+
const subfield2 = field.subfields.find((sf) => sf.code === "2");
|
|
79
|
+
if (subfield2.value === "slm/fin") {
|
|
80
|
+
return { "lex": "slm", "lang": "fin" };
|
|
134
81
|
}
|
|
135
|
-
if (subfield2.value ===
|
|
136
|
-
return {
|
|
137
|
-
'lex': 'slm',
|
|
138
|
-
'lang': 'swe'
|
|
139
|
-
};
|
|
82
|
+
if (subfield2.value === "slm/swe") {
|
|
83
|
+
return { "lex": "slm", "lang": "swe" };
|
|
140
84
|
}
|
|
141
|
-
if (subfield2.value ===
|
|
142
|
-
return {
|
|
143
|
-
'lex': 'yso',
|
|
144
|
-
'lang': 'fin'
|
|
145
|
-
};
|
|
85
|
+
if (subfield2.value === "yso/fin") {
|
|
86
|
+
return { "lex": "yso", "lang": "fin" };
|
|
146
87
|
}
|
|
147
|
-
if (subfield2.value ===
|
|
148
|
-
return {
|
|
149
|
-
'lex': 'yso',
|
|
150
|
-
'lang': 'swe'
|
|
151
|
-
};
|
|
88
|
+
if (subfield2.value === "yso/swe") {
|
|
89
|
+
return { "lex": "yso", "lang": "swe" };
|
|
152
90
|
}
|
|
153
91
|
return {};
|
|
154
92
|
}
|
|
155
93
|
async function getPrefLabel(field) {
|
|
156
|
-
// Tag vs $2 correlation has already been checked!
|
|
157
94
|
const uri = fieldToUri(field);
|
|
158
95
|
if (!uri) {
|
|
159
|
-
|
|
160
|
-
return undefined;
|
|
96
|
+
return void 0;
|
|
161
97
|
}
|
|
162
98
|
const prefLabels = await getTermData(uri);
|
|
163
99
|
if (!prefLabels) {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
return undefined;
|
|
100
|
+
nvdebug(`No labels found for ${uri}`, debug);
|
|
101
|
+
return void 0;
|
|
167
102
|
}
|
|
168
|
-
const lexData = getLexiconAndLanguage(field);
|
|
103
|
+
const lexData = getLexiconAndLanguage(field);
|
|
169
104
|
const lang = changeAbbr(lexData.lang);
|
|
170
|
-
const subfieldA = field.subfields.find(sf => sf.code ===
|
|
171
|
-
const prefLabel = prefLabels.find(pl => pl.lang === lang);
|
|
172
|
-
//console.info(`Compare prefLabel '${prefLabel.value}' AND $a '${subfieldA.value}'`); // eslint-disable-line no-console
|
|
105
|
+
const subfieldA = field.subfields.find((sf) => sf.code === "a");
|
|
106
|
+
const prefLabel = prefLabels.find((pl) => pl.lang === lang);
|
|
173
107
|
if (prefLabel.value === subfieldA.value) {
|
|
174
|
-
|
|
108
|
+
nvdebug(`'${fieldToString(field)}' requires translating`, debug);
|
|
175
109
|
return prefLabels;
|
|
176
110
|
}
|
|
177
|
-
return
|
|
111
|
+
return void 0;
|
|
178
112
|
}
|
|
179
113
|
function swapLanguageCodeBetweenLanguages(code) {
|
|
180
114
|
if (swapLanguageCode[code]) {
|
|
@@ -189,14 +123,10 @@ function _default() {
|
|
|
189
123
|
return abbr;
|
|
190
124
|
}
|
|
191
125
|
function swaggerQuery(uri) {
|
|
192
|
-
|
|
193
|
-
return `https://api.finto.fi/rest/v1/data?uri=${uri}&format=application%2Fjson`; // This is simpler, but contains more irrelevant data
|
|
126
|
+
return `https://api.finto.fi/rest/v1/data?uri=${uri}&format=application%2Fjson`;
|
|
194
127
|
}
|
|
195
128
|
async function getTermData(uri) {
|
|
196
|
-
//console.log(`getTermData(${uri})`); // eslint-disable-line no-console
|
|
197
129
|
if (termCache[uri]) {
|
|
198
|
-
// Don't think current implementation uses the cache any more.
|
|
199
|
-
//console.log(`CACHED ${uri}`); // eslint-disable-line no-console
|
|
200
130
|
return termCache[uri];
|
|
201
131
|
}
|
|
202
132
|
const tmp = await getTermDataFromFinto(uri);
|
|
@@ -204,85 +134,67 @@ function _default() {
|
|
|
204
134
|
return tmp;
|
|
205
135
|
}
|
|
206
136
|
async function getTermDataFromFinto(uri) {
|
|
207
|
-
const headers = {
|
|
208
|
-
'Accept': 'application/json'
|
|
209
|
-
};
|
|
137
|
+
const headers = { "Accept": "application/json" };
|
|
210
138
|
const uri2 = swaggerQuery(uri);
|
|
211
|
-
const response = await fetch(uri2, {
|
|
212
|
-
method: 'GET',
|
|
213
|
-
headers
|
|
214
|
-
});
|
|
139
|
+
const response = await fetch(uri2, { method: "GET", headers });
|
|
215
140
|
if (!response.ok) {
|
|
216
|
-
return
|
|
141
|
+
return void 0;
|
|
217
142
|
}
|
|
218
143
|
const json = await response.json();
|
|
219
144
|
if (!json.graph) {
|
|
220
|
-
return
|
|
145
|
+
return void 0;
|
|
221
146
|
}
|
|
222
147
|
const arr = json.graph;
|
|
223
|
-
const [hit] = arr.filter(row => row.uri === uri);
|
|
224
|
-
//console.log(`NEW JSON: ${JSON.stringify(hit.prefLabel)}`); // eslint-disable-line no-console
|
|
148
|
+
const [hit] = arr.filter((row) => row.uri === uri);
|
|
225
149
|
return hit.prefLabel;
|
|
226
150
|
}
|
|
227
151
|
function fieldToUri(field) {
|
|
228
152
|
const lex = mapTagToLex(field.tag);
|
|
229
|
-
const subfield0 = field.subfields.find(sf => sf.code ===
|
|
230
|
-
const id = subfield0.value.replace(/^[^0-9]+/u,
|
|
231
|
-
if (lex ===
|
|
232
|
-
//return `http%3A%2F%2Fwww.yso.fi%2Fonto%2Fyso%2Fp${id}`;
|
|
153
|
+
const subfield0 = field.subfields.find((sf) => sf.code === "0");
|
|
154
|
+
const id = subfield0.value.replace(/^[^0-9]+/u, "");
|
|
155
|
+
if (lex === "yso") {
|
|
233
156
|
return `http://www.yso.fi/onto/yso/p${id}`;
|
|
234
157
|
}
|
|
235
|
-
if (lex ===
|
|
158
|
+
if (lex === "slm") {
|
|
236
159
|
return `http://urn.fi/URN:NBN:fi:au:slm:s${id}`;
|
|
237
160
|
}
|
|
238
|
-
return
|
|
161
|
+
return void 0;
|
|
239
162
|
}
|
|
240
163
|
function isRelevantField(field, lang) {
|
|
241
|
-
const fieldAsString =
|
|
242
|
-
|
|
243
|
-
// We should probably allow an optional $8 as the first subfield.
|
|
164
|
+
const fieldAsString = fieldToString(field);
|
|
244
165
|
if (!fieldAsString.match(/^... #7 ‡a [^‡]+ ‡2 [^‡]+ ‡0 [^‡]+(?: ‡9 [A-Z]+<(?:KEEP|DROP)>)*$/u)) {
|
|
245
166
|
return false;
|
|
246
167
|
}
|
|
247
168
|
const lex = mapTagToLex(field.tag);
|
|
248
169
|
const lexLang = `${lex}/${lang}`;
|
|
249
|
-
if (!
|
|
170
|
+
if (!fieldHasSubfield(field, "2", lexLang)) {
|
|
250
171
|
return false;
|
|
251
172
|
}
|
|
252
173
|
return fieldHasValidSubfield0(field);
|
|
253
174
|
}
|
|
254
175
|
function fieldHasValidSubfield0(field) {
|
|
255
176
|
const lex = mapTagToLex(field.tag);
|
|
256
|
-
const subfield0 = field.subfields.find(sf => sf.code ===
|
|
257
|
-
if (lex ===
|
|
177
|
+
const subfield0 = field.subfields.find((sf) => sf.code === "0");
|
|
178
|
+
if (lex === "yso" && subfield0.value.match(/^http:\/\/www\.yso\.fi\/onto\/yso\/p[0-9]+$/u)) {
|
|
258
179
|
return true;
|
|
259
180
|
}
|
|
260
|
-
if (lex ===
|
|
181
|
+
if (lex === "slm" && subfield0.value.match(/^http:\/\/urn\.fi\/URN:NBN:fi:au:slm:s[0-9]+$/u)) {
|
|
261
182
|
return true;
|
|
262
183
|
}
|
|
263
184
|
return false;
|
|
264
185
|
}
|
|
265
186
|
function getMisses(fieldList1, fieldList2) {
|
|
266
|
-
return fieldList1.filter(f => !hasSubfield0Match(f, fieldList2));
|
|
187
|
+
return fieldList1.filter((f) => !hasSubfield0Match(f, fieldList2));
|
|
267
188
|
}
|
|
268
189
|
function hasSubfield0Match(field, pairFields) {
|
|
269
|
-
const subfield0 = field.subfields.find(sf => sf.code ===
|
|
270
|
-
return pairFields.some(f => f.subfields.some(sf => sf.code ===
|
|
190
|
+
const subfield0 = field.subfields.find((sf) => sf.code === "0");
|
|
191
|
+
return pairFields.some((f) => f.subfields.some((sf) => sf.code === "0" && sf.value === subfield0.value));
|
|
271
192
|
}
|
|
272
193
|
function mapTagToLex(tag) {
|
|
273
|
-
if (tag ===
|
|
274
|
-
return
|
|
194
|
+
if (tag === "655") {
|
|
195
|
+
return "slm";
|
|
275
196
|
}
|
|
276
|
-
return
|
|
197
|
+
return "yso";
|
|
277
198
|
}
|
|
278
|
-
|
|
279
|
-
/*
|
|
280
|
-
function getValidIdentifiers(record, tag, lang) {
|
|
281
|
-
const lex = mapTagToLex(tag);
|
|
282
|
-
const subfield2Value = `${lex}/${lang}`;
|
|
283
|
-
const candFields = record.get(tag).filter(f => f.subfields.some(sf => sf.code === '2' && sf.value === subfield2Value)); // TODO: filter
|
|
284
|
-
return [];
|
|
285
|
-
}
|
|
286
|
-
*/
|
|
287
199
|
}
|
|
288
|
-
//# sourceMappingURL=translate-terms.js.map
|
|
200
|
+
//# sourceMappingURL=translate-terms.js.map
|