@natlibfi/marc-record-validators-melinda 11.6.7 → 12.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/melinda-node-tests.yml +1 -1
- package/dist/access-rights.js +63 -91
- package/dist/access-rights.js.map +7 -1
- package/dist/access-rights.test.js +137 -0
- package/dist/access-rights.test.js.map +7 -0
- package/dist/addMissingField041.js +21 -53
- package/dist/addMissingField041.js.map +7 -1
- package/dist/addMissingField041.test.js +39 -0
- package/dist/addMissingField041.test.js.map +7 -0
- package/dist/addMissingField336.js +99 -191
- package/dist/addMissingField336.js.map +7 -1
- package/dist/addMissingField336.test.js +39 -0
- package/dist/addMissingField336.test.js.map +7 -0
- package/dist/addMissingField337.js +63 -132
- package/dist/addMissingField337.js.map +7 -1
- package/dist/addMissingField337.test.js +39 -0
- package/dist/addMissingField337.test.js.map +7 -0
- package/dist/addMissingField338.js +147 -253
- package/dist/addMissingField338.js.map +7 -1
- package/dist/addMissingField338.test.js +39 -0
- package/dist/addMissingField338.test.js.map +7 -0
- package/dist/cyrillux-usemarcon-replacement.js +119 -272
- package/dist/cyrillux-usemarcon-replacement.js.map +7 -1
- package/dist/cyrillux-usemarcon-replacement.test.js +46 -0
- package/dist/cyrillux-usemarcon-replacement.test.js.map +7 -0
- package/dist/cyrillux.js +119 -223
- package/dist/cyrillux.js.map +7 -1
- package/dist/cyrillux.test.js +39 -0
- package/dist/cyrillux.test.js.map +7 -0
- package/dist/disambiguateSeriesStatements.js +40 -81
- package/dist/disambiguateSeriesStatements.js.map +7 -1
- package/dist/disambiguateSeriesStatements.test.js +44 -0
- package/dist/disambiguateSeriesStatements.test.js.map +7 -0
- package/dist/double-commas.js +7 -14
- package/dist/double-commas.js.map +7 -1
- package/dist/double-commas.test.js +48 -0
- package/dist/double-commas.test.js.map +7 -0
- package/dist/duplicates-ind1.js +10 -31
- package/dist/duplicates-ind1.js.map +7 -1
- package/dist/duplicates-ind1.test.js +40 -0
- package/dist/duplicates-ind1.test.js.map +7 -0
- package/dist/empty-fields.js +10 -22
- package/dist/empty-fields.js.map +7 -1
- package/dist/empty-fields.test.js +129 -0
- package/dist/empty-fields.test.js.map +7 -0
- package/dist/ending-punctuation-conf.js +871 -769
- package/dist/ending-punctuation-conf.js.map +7 -1
- package/dist/ending-punctuation.js +84 -167
- package/dist/ending-punctuation.js.map +7 -1
- package/dist/ending-punctuation.test.js +2290 -0
- package/dist/ending-punctuation.test.js.map +7 -0
- package/dist/ending-whitespace.js +10 -35
- package/dist/ending-whitespace.js.map +7 -1
- package/dist/ending-whitespace.test.js +38 -0
- package/dist/ending-whitespace.test.js.map +7 -0
- package/dist/field-008-18-34-character-groups.js +40 -125
- package/dist/field-008-18-34-character-groups.js.map +7 -1
- package/dist/field-008-18-34-character-groups.test.js +45 -0
- package/dist/field-008-18-34-character-groups.test.js.map +7 -0
- package/dist/field-505-separators.js +19 -39
- package/dist/field-505-separators.js.map +7 -1
- package/dist/field-505-separators.test.js +45 -0
- package/dist/field-505-separators.test.js.map +7 -0
- package/dist/field-521-fix.js +19 -47
- package/dist/field-521-fix.js.map +7 -1
- package/dist/field-521-fix.test.js +44 -0
- package/dist/field-521-fix.test.js.map +7 -0
- package/dist/field-exclusion.js +37 -91
- package/dist/field-exclusion.js.map +7 -1
- package/dist/field-exclusion.test.js +821 -0
- package/dist/field-exclusion.test.js.map +7 -0
- package/dist/field-structure.js +52 -104
- package/dist/field-structure.js.map +7 -1
- package/dist/field-structure.test.js +587 -0
- package/dist/field-structure.test.js.map +7 -0
- package/dist/field33XUtils.js +119 -503
- package/dist/field33XUtils.js.map +7 -1
- package/dist/fields-present.js +11 -23
- package/dist/fields-present.js.map +7 -1
- package/dist/fields-present.test.js +95 -0
- package/dist/fields-present.test.js.map +7 -0
- package/dist/fix-33X.js +393 -431
- package/dist/fix-33X.js.map +7 -1
- package/dist/fix-33X.test.js +39 -0
- package/dist/fix-33X.test.js.map +7 -0
- package/dist/fix-country-codes.js +20 -50
- package/dist/fix-country-codes.js.map +7 -1
- package/dist/fix-country-codes.test.js +44 -0
- package/dist/fix-country-codes.test.js.map +7 -0
- package/dist/fix-language-codes.js +23 -53
- package/dist/fix-language-codes.js.map +7 -1
- package/dist/fix-language-codes.test.js +38 -0
- package/dist/fix-language-codes.test.js.map +7 -0
- package/dist/fixRelatorTerms.js +82 -209
- package/dist/fixRelatorTerms.js.map +7 -1
- package/dist/fixRelatorTerms.test.js +44 -0
- package/dist/fixRelatorTerms.test.js.map +7 -0
- package/dist/fixed-fields.js +21 -30
- package/dist/fixed-fields.js.map +7 -1
- package/dist/fixed-fields.test.js +87 -0
- package/dist/fixed-fields.test.js.map +7 -0
- package/dist/identical-fields.js +8 -24
- package/dist/identical-fields.js.map +7 -1
- package/dist/identical-fields.test.js +119 -0
- package/dist/identical-fields.test.js.map +7 -0
- package/dist/index.js +119 -413
- package/dist/index.js.map +7 -1
- package/dist/indicator-fixes.js +57 -95
- package/dist/indicator-fixes.js.map +7 -1
- package/dist/indicator-fixes.test.js +42 -0
- package/dist/indicator-fixes.test.js.map +7 -0
- package/dist/isbn-issn.js +66 -126
- package/dist/isbn-issn.js.map +7 -1
- package/dist/isbn-issn.test.js +398 -0
- package/dist/isbn-issn.test.js.map +7 -0
- package/dist/item-language.js +32 -65
- package/dist/item-language.js.map +7 -1
- package/dist/item-language.test.js +322 -0
- package/dist/item-language.test.js.map +7 -0
- package/dist/melindaCustomMergeFields.js +5182 -11233
- package/dist/melindaCustomMergeFields.js.map +7 -1
- package/dist/merge-fields/controlSubfields.js +75 -142
- package/dist/merge-fields/controlSubfields.js.map +7 -1
- package/dist/merge-fields/counterpartField.js +182 -379
- package/dist/merge-fields/counterpartField.js.map +7 -1
- package/dist/merge-fields/index.js +15 -49
- package/dist/merge-fields/index.js.map +7 -1
- package/dist/merge-fields/mergableIndicator.js +18 -51
- package/dist/merge-fields/mergableIndicator.js.map +7 -1
- package/dist/merge-fields/mergableTag.js +78 -30
- package/dist/merge-fields/mergableTag.js.map +7 -1
- package/dist/merge-fields/mergeConfig.js +66 -171
- package/dist/merge-fields/mergeConfig.js.map +7 -1
- package/dist/merge-fields/mergeConstraints.js +323 -1214
- package/dist/merge-fields/mergeConstraints.js.map +7 -1
- package/dist/merge-fields/mergeField.js +47 -111
- package/dist/merge-fields/mergeField.js.map +7 -1
- package/dist/merge-fields/mergeIndicator.js +64 -118
- package/dist/merge-fields/mergeIndicator.js.map +7 -1
- package/dist/merge-fields/mergeOrAddPostprocess.js +14 -38
- package/dist/merge-fields/mergeOrAddPostprocess.js.map +7 -1
- package/dist/merge-fields/mergeOrAddSubfield.js +62 -104
- package/dist/merge-fields/mergeOrAddSubfield.js.map +7 -1
- package/dist/merge-fields/mergeSubfield.js +47 -95
- package/dist/merge-fields/mergeSubfield.js.map +7 -1
- package/dist/merge-fields/removeDuplicateSubfields.js +18 -31
- package/dist/merge-fields/removeDuplicateSubfields.js.map +7 -1
- package/dist/merge-fields/worldKnowledge.js +15 -40
- package/dist/merge-fields/worldKnowledge.js.map +7 -1
- package/dist/merge-fields.test.js +44 -0
- package/dist/merge-fields.test.js.map +7 -0
- package/dist/mergeField500Lisapainokset.js +28 -57
- package/dist/mergeField500Lisapainokset.js.map +7 -1
- package/dist/mergeField500Lisapainokset.test.js +44 -0
- package/dist/mergeField500Lisapainokset.test.js.map +7 -0
- package/dist/mergeRelatorTermFields.js +33 -69
- package/dist/mergeRelatorTermFields.js.map +7 -1
- package/dist/mergeRelatorTermFields.test.js +44 -0
- package/dist/mergeRelatorTermFields.test.js.map +7 -0
- package/dist/modernize-502.js +23 -55
- package/dist/modernize-502.js.map +7 -1
- package/dist/modernize-502.test.js +38 -0
- package/dist/modernize-502.test.js.map +7 -0
- package/dist/multiple-subfield-0.js +23 -48
- package/dist/multiple-subfield-0.js.map +7 -1
- package/dist/multiple-subfield-0.test.js +44 -0
- package/dist/multiple-subfield-0.test.js.map +7 -0
- package/dist/non-breaking-space.js +11 -32
- package/dist/non-breaking-space.js.map +7 -1
- package/dist/non-breaking-space.test.js +38 -0
- package/dist/non-breaking-space.test.js.map +7 -0
- package/dist/normalize-dashes.js +18 -37
- package/dist/normalize-dashes.js.map +7 -1
- package/dist/normalize-dashes.test.js +44 -0
- package/dist/normalize-dashes.test.js.map +7 -0
- package/dist/normalize-identifiers.js +54 -140
- package/dist/normalize-identifiers.js.map +7 -1
- package/dist/normalize-identifiers.test.js +44 -0
- package/dist/normalize-identifiers.test.js.map +7 -0
- package/dist/normalize-qualifying-information.js +23 -48
- package/dist/normalize-qualifying-information.js.map +7 -1
- package/dist/normalize-qualifying-information.test.js +44 -0
- package/dist/normalize-qualifying-information.test.js.map +7 -0
- package/dist/normalize-utf8-diacritics.js +19 -105
- package/dist/normalize-utf8-diacritics.js.map +7 -1
- package/dist/normalize-utf8-diacritics.test.js +44 -0
- package/dist/normalize-utf8-diacritics.test.js.map +7 -0
- package/dist/normalizeFieldForComparison.js +67 -158
- package/dist/normalizeFieldForComparison.js.map +7 -1
- package/dist/normalizeSubfieldValueForComparison.js +37 -77
- package/dist/normalizeSubfieldValueForComparison.js.map +7 -1
- package/dist/prepublicationUtils.js +58 -111
- package/dist/prepublicationUtils.js.map +7 -1
- package/dist/punctuation/index.js +56 -72
- package/dist/punctuation/index.js.map +7 -1
- package/dist/punctuation/rules/aut.js +372 -331
- package/dist/punctuation/rules/aut.js.map +7 -1
- package/dist/punctuation/rules/bib.js +420 -373
- package/dist/punctuation/rules/bib.js.map +7 -1
- package/dist/punctuation/rules/index.js +7 -21
- package/dist/punctuation/rules/index.js.map +7 -1
- package/dist/punctuation.test.js +44 -0
- package/dist/punctuation.test.js.map +7 -0
- package/dist/punctuation2.js +251 -800
- package/dist/punctuation2.js.map +7 -1
- package/dist/punctuation2.test.js +44 -0
- package/dist/punctuation2.test.js.map +7 -0
- package/dist/reindexSubfield6OccurenceNumbers.js +61 -96
- package/dist/reindexSubfield6OccurenceNumbers.js.map +7 -1
- package/dist/reindexSubfield6OccurenceNumbers.test.js +44 -0
- package/dist/reindexSubfield6OccurenceNumbers.test.js.map +7 -0
- package/dist/removeDuplicateDataFields.js +102 -202
- package/dist/removeDuplicateDataFields.js.map +7 -1
- package/dist/removeDuplicateDataFields.test.js +44 -0
- package/dist/removeDuplicateDataFields.test.js.map +7 -0
- package/dist/removeInferiorDataFields.js +103 -227
- package/dist/removeInferiorDataFields.js.map +7 -1
- package/dist/removeInferiorDataFields.test.js +44 -0
- package/dist/removeInferiorDataFields.test.js.map +7 -0
- package/dist/resolvable-ext-references-melinda.js +25 -60
- package/dist/resolvable-ext-references-melinda.js.map +7 -1
- package/dist/resolvable-ext-references-melinda.test.js +160 -0
- package/dist/resolvable-ext-references-melinda.test.js.map +7 -0
- package/dist/resolveOrphanedSubfield6s.js +33 -64
- package/dist/resolveOrphanedSubfield6s.js.map +7 -1
- package/dist/resolveOrphanedSubfield6s.test.js +44 -0
- package/dist/resolveOrphanedSubfield6s.test.js.map +7 -0
- package/dist/sanitize-vocabulary-source-codes.js +27 -55
- package/dist/sanitize-vocabulary-source-codes.js.map +7 -1
- package/dist/sanitize-vocabulary-source-codes.test.js +45 -0
- package/dist/sanitize-vocabulary-source-codes.test.js.map +7 -0
- package/dist/sort-tags.js +13 -25
- package/dist/sort-tags.js.map +7 -1
- package/dist/sort-tags.test.js +261 -0
- package/dist/sort-tags.test.js.map +7 -0
- package/dist/sortFields.js +152 -222
- package/dist/sortFields.js.map +7 -1
- package/dist/sortFields.test.js +44 -0
- package/dist/sortFields.test.js.map +7 -0
- package/dist/sortRelatorTerms.js +30 -68
- package/dist/sortRelatorTerms.js.map +7 -1
- package/dist/sortRelatorTerms.test.js +44 -0
- package/dist/sortRelatorTerms.test.js.map +7 -0
- package/dist/sortSubfields.js +102 -255
- package/dist/sortSubfields.js.map +7 -1
- package/dist/sortSubfields.test.js +44 -0
- package/dist/sortSubfields.test.js.map +7 -0
- package/dist/stripPunctuation.js +13 -36
- package/dist/stripPunctuation.js.map +7 -1
- package/dist/stripPunctuation.test.js +44 -0
- package/dist/stripPunctuation.test.js.map +7 -0
- package/dist/subfield-exclusion.js +28 -75
- package/dist/subfield-exclusion.js.map +7 -1
- package/dist/subfield-exclusion.test.js +471 -0
- package/dist/subfield-exclusion.test.js.map +7 -0
- package/dist/subfield6Utils.js +107 -269
- package/dist/subfield6Utils.js.map +7 -1
- package/dist/subfield8Utils.js +26 -50
- package/dist/subfield8Utils.js.map +7 -1
- package/dist/subfieldValueNormalizations.js +40 -74
- package/dist/subfieldValueNormalizations.js.map +7 -1
- package/dist/subfieldValueNormalizations.test.js +45 -0
- package/dist/subfieldValueNormalizations.test.js.map +7 -0
- package/dist/sync-007-and-300.js +22 -53
- package/dist/sync-007-and-300.js.map +7 -1
- package/dist/sync-007-and-300.test.js +44 -0
- package/dist/sync-007-and-300.test.js.map +7 -0
- package/dist/translate-terms.js +67 -155
- package/dist/translate-terms.js.map +7 -1
- package/dist/translate-terms.test.js +44 -0
- package/dist/translate-terms.test.js.map +7 -0
- package/dist/typeOfDate-008.js +10 -25
- package/dist/typeOfDate-008.js.map +7 -1
- package/dist/typeOfDate-008.test.js +40 -0
- package/dist/typeOfDate-008.test.js.map +7 -0
- package/dist/unicode-decomposition.js +94 -107
- package/dist/unicode-decomposition.js.map +7 -1
- package/dist/unicode-decomposition.test.js +94 -0
- package/dist/unicode-decomposition.test.js.map +7 -0
- package/dist/update-field-540.js +30 -75
- package/dist/update-field-540.js.map +7 -1
- package/dist/update-field-540.test.js +44 -0
- package/dist/update-field-540.test.js.map +7 -0
- package/dist/urn.js +55 -128
- package/dist/urn.js.map +7 -1
- package/dist/urn.test.js +44 -0
- package/dist/urn.test.js.map +7 -0
- package/dist/utils.js +72 -126
- package/dist/utils.js.map +7 -1
- package/eslint.config.mjs +1 -2
- package/package.json +21 -93
- package/src/access-rights.js +1 -1
- package/src/{access-rights.spec.js → access-rights.test.js} +9 -10
- package/src/addMissingField041.js +1 -1
- package/src/{addMissingField336.spec.js → addMissingField041.test.js} +13 -14
- package/src/addMissingField336.js +3 -3
- package/src/{addMissingField041.spec.js → addMissingField336.test.js} +13 -14
- package/src/addMissingField337.js +2 -2
- package/src/{addMissingField337.spec.js → addMissingField337.test.js} +13 -14
- package/src/addMissingField338.js +2 -2
- package/src/{addMissingField338.spec.js → addMissingField338.test.js} +13 -14
- package/src/cyrillux-usemarcon-replacement.js +18 -18
- package/src/cyrillux-usemarcon-replacement.test.js +55 -0
- package/src/cyrillux.js +19 -12
- package/src/{cyrillux.spec.js → cyrillux.test.js} +13 -14
- package/src/disambiguateSeriesStatements.js +2 -2
- package/src/{disambiguateSeriesStatements.spec.js → disambiguateSeriesStatements.test.js} +12 -13
- package/src/double-commas.js +1 -1
- package/src/{double-commas.spec.js → double-commas.test.js} +9 -11
- package/src/duplicates-ind1.js +1 -1
- package/src/{duplicates-ind1.spec.js → duplicates-ind1.test.js} +12 -13
- package/src/{empty-fields.spec.js → empty-fields.test.js} +11 -13
- package/src/ending-punctuation.js +1 -1
- package/src/{ending-punctuation.spec.js → ending-punctuation.test.js} +172 -173
- package/src/{ending-whitespace.spec.js → ending-whitespace.test.js} +12 -13
- package/src/field-008-18-34-character-groups.js +2 -2
- package/src/{field-008-18-34-character-groups.spec.js → field-008-18-34-character-groups.test.js} +13 -13
- package/src/field-505-separators.js +3 -3
- package/src/{field-505-separators.spec.js → field-505-separators.test.js} +16 -14
- package/src/field-521-fix.js +2 -2
- package/src/{field-521-fix.spec.js → field-521-fix.test.js} +12 -13
- package/src/field-exclusion.js +1 -1
- package/src/{field-exclusion.spec.js → field-exclusion.test.js} +60 -57
- package/src/{field-structure.spec.js → field-structure.test.js} +29 -29
- package/src/{fields-present.spec.js → fields-present.test.js} +12 -15
- package/src/fix-33X.js +4 -4
- package/src/{fix-33X.spec.js → fix-33X.test.js} +13 -14
- package/src/fix-country-codes.js +1 -1
- package/src/{fix-country-codes.spec.js → fix-country-codes.test.js} +12 -13
- package/src/fix-language-codes.js +5 -5
- package/src/{fix-language-codes.spec.js → fix-language-codes.test.js} +12 -13
- package/src/fixRelatorTerms.js +5 -5
- package/src/{fixRelatorTerms.spec.js → fixRelatorTerms.test.js} +13 -13
- package/src/{fixed-fields.spec.js → fixed-fields.test.js} +11 -14
- package/src/identical-fields.js +1 -1
- package/src/{identical-fields.spec.js → identical-fields.test.js} +9 -11
- package/src/indicator-fixes.js +3 -3
- package/src/{indicator-fixes.spec.js → indicator-fixes.test.js} +9 -12
- package/src/isbn-issn.js +1 -1
- package/src/{isbn-issn.spec.js → isbn-issn.test.js} +20 -22
- package/src/{item-language.spec.js → item-language.test.js} +21 -22
- package/src/merge-fields/controlSubfields.js +1 -1
- package/src/merge-fields/counterpartField.js +8 -9
- package/src/merge-fields/index.js +1 -1
- package/src/merge-fields/mergableIndicator.js +1 -1
- package/src/merge-fields/mergeField.js +6 -6
- package/src/merge-fields/mergeIndicator.js +1 -1
- package/src/merge-fields/mergeOrAddPostprocess.js +4 -4
- package/src/merge-fields/mergeOrAddSubfield.js +2 -2
- package/src/merge-fields/mergeSubfield.js +4 -4
- package/src/merge-fields/removeDuplicateSubfields.js +2 -2
- package/src/{merge-fields.spec.js → merge-fields.test.js} +12 -13
- package/src/{mergeField500Lisapainokset.spec.js → mergeField500Lisapainokset.test.js} +12 -13
- package/src/mergeRelatorTermFields.js +5 -7
- package/src/{mergeRelatorTermFields.spec.js → mergeRelatorTermFields.test.js} +12 -13
- package/src/modernize-502.js +1 -1
- package/src/{modernize-502.spec.js → modernize-502.test.js} +12 -13
- package/src/multiple-subfield-0.js +3 -3
- package/src/{multiple-subfield-0.spec.js → multiple-subfield-0.test.js} +13 -13
- package/src/{non-breaking-space.spec.js → non-breaking-space.test.js} +12 -13
- package/src/normalize-dashes.js +2 -2
- package/src/{normalize-dashes.spec.js → normalize-dashes.test.js} +12 -13
- package/src/normalize-identifiers.js +1 -1
- package/src/{normalize-identifiers.spec.js → normalize-identifiers.test.js} +12 -13
- package/src/normalize-qualifying-information.js +2 -2
- package/src/{normalize-qualifying-information.spec.js → normalize-qualifying-information.test.js} +12 -13
- package/src/normalize-utf8-diacritics.js +2 -2
- package/src/{normalize-utf8-diacritics.spec.js → normalize-utf8-diacritics.test.js} +13 -13
- package/src/normalizeFieldForComparison.js +6 -6
- package/src/normalizeSubfieldValueForComparison.js +1 -1
- package/src/prepublicationUtils.js +4 -4
- package/src/punctuation/index.js +1 -1
- package/src/punctuation/rules/index.js +2 -2
- package/src/{punctuation.spec.js → punctuation.test.js} +12 -13
- package/src/punctuation2.js +4 -4
- package/src/{punctuation2.spec.js → punctuation2.test.js} +12 -13
- package/src/reindexSubfield6OccurenceNumbers.js +5 -7
- package/src/{reindexSubfield6OccurenceNumbers.spec.js → reindexSubfield6OccurenceNumbers.test.js} +12 -13
- package/src/removeDuplicateDataFields.js +11 -19
- package/src/{removeDuplicateDataFields.spec.js → removeDuplicateDataFields.test.js} +12 -13
- package/src/removeInferiorDataFields.js +11 -11
- package/src/{removeInferiorDataFields.spec.js → removeInferiorDataFields.test.js} +13 -13
- package/src/resolvable-ext-references-melinda.js +1 -1
- package/src/{resolvable-ext-references-melinda.spec.js → resolvable-ext-references-melinda.test.js} +42 -27
- package/src/resolveOrphanedSubfield6s.js +5 -5
- package/src/{resolveOrphanedSubfield6s.spec.js → resolveOrphanedSubfield6s.test.js} +13 -13
- package/src/sanitize-vocabulary-source-codes.js +4 -4
- package/src/{sanitize-vocabulary-source-codes.spec.js → sanitize-vocabulary-source-codes.test.js} +16 -14
- package/src/{sort-tags.spec.js → sort-tags.test.js} +9 -11
- package/src/sortFields.js +4 -4
- package/src/{sortFields.spec.js → sortFields.test.js} +12 -13
- package/src/sortRelatorTerms.js +3 -3
- package/src/{sortRelatorTerms.spec.js → sortRelatorTerms.test.js} +13 -13
- package/src/sortSubfields.js +1 -1
- package/src/{sortSubfields.spec.js → sortSubfields.test.js} +13 -13
- package/src/stripPunctuation.js +3 -3
- package/src/{stripPunctuation.spec.js → stripPunctuation.test.js} +13 -13
- package/src/subfield-exclusion.js +1 -1
- package/src/{subfield-exclusion.spec.js → subfield-exclusion.test.js} +45 -36
- package/src/subfield6Utils.js +6 -10
- package/src/subfield8Utils.js +4 -4
- package/src/subfieldValueNormalizations.js +3 -3
- package/src/{subfieldValueNormalizations.spec.js → subfieldValueNormalizations.test.js} +18 -14
- package/src/sync-007-and-300.js +2 -2
- package/src/{sync-007-and-300.spec.js → sync-007-and-300.test.js} +13 -13
- package/src/translate-terms.js +3 -3
- package/src/{translate-terms.spec.js → translate-terms.test.js} +13 -13
- package/src/{typeOfDate-008.spec.js → typeOfDate-008.test.js} +12 -13
- package/src/{unicode-decomposition.spec.js → unicode-decomposition.test.js} +10 -16
- package/src/update-field-540.js +2 -2
- package/src/{update-field-540.spec.js → update-field-540.test.js} +13 -10
- package/src/urn.js +2 -2
- package/src/{urn.spec.js → urn.test.js} +12 -13
- package/src/utils.js +3 -3
- package/test-fixtures/field-505-separators/03/expectedResult.json +3 -1
- package/test-fixtures/field-505-separators/03/record.json +3 -0
- package/test-fixtures/normalize-subfield-value/01/metadata.json +4 -1
- package/test-fixtures/normalize-subfield-value/01/record.json +3 -0
- package/test-fixtures/normalize-subfield-value/02/expectedResult.json +3 -1
- package/test-fixtures/normalize-subfield-value/02/metadata.json +2 -1
- package/test-fixtures/normalize-subfield-value/02/record.json +3 -0
- package/test-fixtures/sanitize-vocabulary-source-codes/f03/expectedResult.json +3 -1
- package/test-fixtures/sanitize-vocabulary-source-codes/f04/expectedResult.json +3 -1
- package/test-fixtures/sanitize-vocabulary-source-codes/v04/metadata.json +1 -4
- package/test-fixtures/sanitize-vocabulary-source-codes/v04/record.json +1 -1
- package/dist/access-rights.spec.js +0 -195
- package/dist/access-rights.spec.js.map +0 -1
- package/dist/addMissingField041.spec.js +0 -45
- package/dist/addMissingField041.spec.js.map +0 -1
- package/dist/addMissingField336.spec.js +0 -45
- package/dist/addMissingField336.spec.js.map +0 -1
- package/dist/addMissingField337.spec.js +0 -43
- package/dist/addMissingField337.spec.js.map +0 -1
- package/dist/addMissingField338.spec.js +0 -45
- package/dist/addMissingField338.spec.js.map +0 -1
- package/dist/cyrillux-usemarcon-replacement.spec.js +0 -45
- package/dist/cyrillux-usemarcon-replacement.spec.js.map +0 -1
- package/dist/cyrillux.spec.js +0 -46
- package/dist/cyrillux.spec.js.map +0 -1
- package/dist/disambiguateSeriesStatements.spec.js +0 -51
- package/dist/disambiguateSeriesStatements.spec.js.map +0 -1
- package/dist/double-commas.spec.js +0 -73
- package/dist/double-commas.spec.js.map +0 -1
- package/dist/duplicates-ind1.spec.js +0 -45
- package/dist/duplicates-ind1.spec.js.map +0 -1
- package/dist/empty-fields.spec.js +0 -118
- package/dist/empty-fields.spec.js.map +0 -1
- package/dist/ending-punctuation.spec.js +0 -2654
- package/dist/ending-punctuation.spec.js.map +0 -1
- package/dist/ending-whitespace.spec.js +0 -42
- package/dist/ending-whitespace.spec.js.map +0 -1
- package/dist/field-008-18-34-character-groups.spec.js +0 -51
- package/dist/field-008-18-34-character-groups.spec.js.map +0 -1
- package/dist/field-505-separators.spec.js +0 -51
- package/dist/field-505-separators.spec.js.map +0 -1
- package/dist/field-521-fix.spec.js +0 -51
- package/dist/field-521-fix.spec.js.map +0 -1
- package/dist/field-exclusion.spec.js +0 -1054
- package/dist/field-exclusion.spec.js.map +0 -1
- package/dist/field-structure.spec.js +0 -535
- package/dist/field-structure.spec.js.map +0 -1
- package/dist/fields-present.spec.js +0 -121
- package/dist/fields-present.spec.js.map +0 -1
- package/dist/fix-33X.spec.js +0 -45
- package/dist/fix-33X.spec.js.map +0 -1
- package/dist/fix-country-codes.spec.js +0 -51
- package/dist/fix-country-codes.spec.js.map +0 -1
- package/dist/fix-language-codes.spec.js +0 -44
- package/dist/fix-language-codes.spec.js.map +0 -1
- package/dist/fixRelatorTerms.spec.js +0 -51
- package/dist/fixRelatorTerms.spec.js.map +0 -1
- package/dist/fixed-fields.spec.js +0 -140
- package/dist/fixed-fields.spec.js.map +0 -1
- package/dist/identical-fields.spec.js +0 -99
- package/dist/identical-fields.spec.js.map +0 -1
- package/dist/indicator-fixes.spec.js +0 -51
- package/dist/indicator-fixes.spec.js.map +0 -1
- package/dist/isbn-issn.spec.js +0 -595
- package/dist/isbn-issn.spec.js.map +0 -1
- package/dist/item-language.spec.js +0 -306
- package/dist/item-language.spec.js.map +0 -1
- package/dist/melindaCustomMergeFields.json +0 -5120
- package/dist/merge-fields.spec.js +0 -51
- package/dist/merge-fields.spec.js.map +0 -1
- package/dist/mergeField500Lisapainokset.spec.js +0 -51
- package/dist/mergeField500Lisapainokset.spec.js.map +0 -1
- package/dist/mergeRelatorTermFields.spec.js +0 -51
- package/dist/mergeRelatorTermFields.spec.js.map +0 -1
- package/dist/modernize-502.spec.js +0 -49
- package/dist/modernize-502.spec.js.map +0 -1
- package/dist/multiple-subfield-0.spec.js +0 -51
- package/dist/multiple-subfield-0.spec.js.map +0 -1
- package/dist/non-breaking-space.spec.js +0 -42
- package/dist/non-breaking-space.spec.js.map +0 -1
- package/dist/normalize-dashes.spec.js +0 -51
- package/dist/normalize-dashes.spec.js.map +0 -1
- package/dist/normalize-identifiers.spec.js +0 -51
- package/dist/normalize-identifiers.spec.js.map +0 -1
- package/dist/normalize-qualifying-information.spec.js +0 -51
- package/dist/normalize-qualifying-information.spec.js.map +0 -1
- package/dist/normalize-utf8-diacritics.spec.js +0 -51
- package/dist/normalize-utf8-diacritics.spec.js.map +0 -1
- package/dist/punctuation.spec.js +0 -51
- package/dist/punctuation.spec.js.map +0 -1
- package/dist/punctuation2.spec.js +0 -51
- package/dist/punctuation2.spec.js.map +0 -1
- package/dist/reindexSubfield6OccurenceNumbers.spec.js +0 -51
- package/dist/reindexSubfield6OccurenceNumbers.spec.js.map +0 -1
- package/dist/removeDuplicateDataFields.spec.js +0 -51
- package/dist/removeDuplicateDataFields.spec.js.map +0 -1
- package/dist/removeInferiorDataFields.spec.js +0 -51
- package/dist/removeInferiorDataFields.spec.js.map +0 -1
- package/dist/resolvable-ext-references-melinda.spec.js +0 -166
- package/dist/resolvable-ext-references-melinda.spec.js.map +0 -1
- package/dist/resolveOrphanedSubfield6s.spec.js +0 -51
- package/dist/resolveOrphanedSubfield6s.spec.js.map +0 -1
- package/dist/sanitize-vocabulary-source-codes.spec.js +0 -51
- package/dist/sanitize-vocabulary-source-codes.spec.js.map +0 -1
- package/dist/sort-tags.spec.js +0 -207
- package/dist/sort-tags.spec.js.map +0 -1
- package/dist/sortFields.spec.js +0 -51
- package/dist/sortFields.spec.js.map +0 -1
- package/dist/sortRelatorTerms.spec.js +0 -51
- package/dist/sortRelatorTerms.spec.js.map +0 -1
- package/dist/sortSubfields.spec.js +0 -52
- package/dist/sortSubfields.spec.js.map +0 -1
- package/dist/stripPunctuation.spec.js +0 -51
- package/dist/stripPunctuation.spec.js.map +0 -1
- package/dist/subfield-exclusion.spec.js +0 -523
- package/dist/subfield-exclusion.spec.js.map +0 -1
- package/dist/subfieldValueNormalizations.spec.js +0 -51
- package/dist/subfieldValueNormalizations.spec.js.map +0 -1
- package/dist/sync-007-and-300.spec.js +0 -51
- package/dist/sync-007-and-300.spec.js.map +0 -1
- package/dist/translate-terms.spec.js +0 -51
- package/dist/translate-terms.spec.js.map +0 -1
- package/dist/typeOfDate-008.spec.js +0 -47
- package/dist/typeOfDate-008.spec.js.map +0 -1
- package/dist/unicode-decomposition.spec.js +0 -91
- package/dist/unicode-decomposition.spec.js.map +0 -1
- package/dist/update-field-540.spec.js +0 -51
- package/dist/update-field-540.spec.js.map +0 -1
- package/dist/urn.spec.js +0 -52
- package/dist/urn.spec.js.map +0 -1
- package/src/cyrillux-usemarcon-replacement.spec.js +0 -47
|
@@ -1 +1,7 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/field-521-fix.js"],
|
|
4
|
+
"sourcesContent": ["//import createDebugLogger from 'debug';\nimport clone from 'clone';\nimport {fieldToString} from './utils.js';\n\n// Author(s): Nicholas Volk\nexport default function () {\n\n return {\n description: 'Various fixes for field 521',\n validate, fix\n };\n\n function fix(record) {\n record.fields.forEach(field => {\n fix521(field);\n });\n // Fix always succeeds (even when it really does not):\n const res = {message: [], fix: [], valid: true};\n return res;\n }\n\n function validate(record) {\n const res = {message: []};\n\n // Actual parsing of all fields\n /*\n if (!record.fields) {\n return false;\n }\n */\n\n record.fields?.forEach(field => {\n validateField(field, res);\n });\n\n res.valid = !(res.message.length >= 1);\n return res;\n }\n\n function validateField(field, res) {\n const orig = fieldToString(field);\n\n const normalizedField = fix521(clone(field));\n const mod = fieldToString(normalizedField);\n if (orig !== mod) { // Fail as the input is \"broken\"/\"crap\"/sumthing\n res.message.push(`'TODO: ${orig}' => '${mod}'`);\n return;\n }\n return;\n }\n}\n\nfunction fixSubfieldA(a) {\n a.value = a.value.\n // MET-332:\n replace(/^(Ik\u00E4suositus) ([0-9])/u, '$1: $2');\n}\n\nfunction fixSubfieldAInternalPunctuation(field) {\n const a = field.subfields.filter(sf => sf.code === 'a');\n\n a.forEach(sf => fixSubfieldA(sf));\n}\n\nfunction getIndicator1(field) {\n const [a] = field.subfields.filter(sf => sf.code === 'a');\n if (a) {\n if (a.value.match(/^Ik\u00E4suositus/u)) {\n return '1';\n }\n }\n return undefined;\n}\n\nfunction fixIndicator1(field) {\n const value = getIndicator1(field);\n if (value) {\n field.ind1 = value;\n return;\n }\n\n}\n\nfunction fix521(field) {\n if (field.tag !== '521' || !field.subfields) {\n return field;\n }\n fixIndicator1(field);\n fixSubfieldAInternalPunctuation(field);\n return field;\n}\n\n"],
|
|
5
|
+
"mappings": "AACA,OAAO,WAAW;AAClB,SAAQ,qBAAoB;AAG5B,0BAA2B;AAEzB,SAAO;AAAA,IACL,aAAa;AAAA,IACb;AAAA,IAAU;AAAA,EACZ;AAEA,WAAS,IAAI,QAAQ;AACnB,WAAO,OAAO,QAAQ,WAAS;AAC7B,aAAO,KAAK;AAAA,IACd,CAAC;AAED,UAAM,MAAM,EAAC,SAAS,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,KAAI;AAC9C,WAAO;AAAA,EACT;AAEA,WAAS,SAAS,QAAQ;AACxB,UAAM,MAAM,EAAC,SAAS,CAAC,EAAC;AASxB,WAAO,QAAQ,QAAQ,WAAS;AAC9B,oBAAc,OAAO,GAAG;AAAA,IAC1B,CAAC;AAED,QAAI,QAAQ,EAAE,IAAI,QAAQ,UAAU;AACpC,WAAO;AAAA,EACT;AAEA,WAAS,cAAc,OAAO,KAAK;AACjC,UAAM,OAAO,cAAc,KAAK;AAEhC,UAAM,kBAAkB,OAAO,MAAM,KAAK,CAAC;AAC3C,UAAM,MAAM,cAAc,eAAe;AACzC,QAAI,SAAS,KAAK;AAChB,UAAI,QAAQ,KAAK,UAAU,IAAI,SAAS,GAAG,GAAG;AAC9C;AAAA,IACF;AACA;AAAA,EACF;AACF;AAEA,SAAS,aAAa,GAAG;AACvB,IAAE,QAAQ,EAAE,MAEV,QAAQ,2BAA2B,QAAQ;AAC/C;AAEA,SAAS,gCAAgC,OAAO;AAC9C,QAAM,IAAI,MAAM,UAAU,OAAO,QAAM,GAAG,SAAS,GAAG;AAEtD,IAAE,QAAQ,QAAM,aAAa,EAAE,CAAC;AAClC;AAEA,SAAS,cAAc,OAAO;AAC5B,QAAM,CAAC,CAAC,IAAI,MAAM,UAAU,OAAO,QAAM,GAAG,SAAS,GAAG;AACxD,MAAI,GAAG;AACL,QAAI,EAAE,MAAM,MAAM,eAAe,GAAG;AAClC,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,cAAc,OAAO;AAC5B,QAAM,QAAQ,cAAc,KAAK;AACjC,MAAI,OAAO;AACT,UAAM,OAAO;AACb;AAAA,EACF;AAEF;AAEA,SAAS,OAAO,OAAO;AACrB,MAAI,MAAM,QAAQ,SAAS,CAAC,MAAM,WAAW;AAC3C,WAAO;AAAA,EACT;AACA,gBAAc,KAAK;AACnB,kCAAgC,KAAK;AACrC,SAAO;AACT;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import assert from "node:assert";
|
|
2
|
+
import { MarcRecord } from "@natlibfi/marc-record";
|
|
3
|
+
import validatorFactory from "./field-521-fix.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", "fix521"],
|
|
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/fix521: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=field-521-fix.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/field-521-fix.test.js"],
|
|
4
|
+
"sourcesContent": ["import assert from 'node:assert';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './field-521-fix.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', 'fix521'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n hooks: {\n before: async () => {\n testValidatorFactory();\n }\n }\n});\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/fix521: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,QAAQ;AAAA,EAC3D,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;AACD,MAAM,QAAQ,kBAAkB,sDAAsD;AAEtF,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/field-exclusion.js
CHANGED
|
@@ -1,47 +1,40 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = _default;
|
|
7
|
-
// Configuration specification
|
|
8
1
|
const confSpec = {
|
|
9
2
|
tag: {
|
|
10
3
|
// Pattern to match the field's tags
|
|
11
|
-
type:
|
|
4
|
+
type: "RegExp",
|
|
12
5
|
mandatory: true
|
|
13
6
|
},
|
|
14
7
|
value: {
|
|
15
8
|
// Regular expression object for matching a controlfields value. Mutual exclusive with
|
|
16
|
-
type:
|
|
17
|
-
excl: [
|
|
9
|
+
type: "RegExp",
|
|
10
|
+
excl: ["subfields", "ind1", "ind2"]
|
|
18
11
|
},
|
|
19
12
|
ind1: {
|
|
20
13
|
// Pattern to match the field's ind1 property.
|
|
21
|
-
type:
|
|
14
|
+
type: "RegExp",
|
|
22
15
|
// Array<Indicator>
|
|
23
|
-
excl: [
|
|
16
|
+
excl: ["value"]
|
|
24
17
|
},
|
|
25
18
|
ind2: {
|
|
26
19
|
// Pattern to match the field's ind2 property.
|
|
27
|
-
type:
|
|
20
|
+
type: "RegExp",
|
|
28
21
|
// Array<Indicator>
|
|
29
|
-
excl: [
|
|
22
|
+
excl: ["value"]
|
|
30
23
|
},
|
|
31
24
|
subfields: {
|
|
32
25
|
// An array of objects with the following properties
|
|
33
26
|
code: {
|
|
34
|
-
type:
|
|
27
|
+
type: "RegExp",
|
|
35
28
|
mandatory: true
|
|
36
29
|
},
|
|
37
30
|
value: {
|
|
38
|
-
type:
|
|
31
|
+
type: "RegExp",
|
|
39
32
|
mandatory: true
|
|
40
33
|
}
|
|
41
34
|
},
|
|
42
35
|
dependencies: {
|
|
43
36
|
leader: {
|
|
44
|
-
type:
|
|
37
|
+
type: "RegExp"
|
|
45
38
|
}
|
|
46
39
|
}
|
|
47
40
|
};
|
|
@@ -52,63 +45,44 @@ function isRegExp(re) {
|
|
|
52
45
|
const result = re instanceof RegExp;
|
|
53
46
|
return result;
|
|
54
47
|
}
|
|
55
|
-
function
|
|
48
|
+
export default function(config) {
|
|
56
49
|
if (!Array.isArray(config)) {
|
|
57
|
-
throw new TypeError(
|
|
50
|
+
throw new TypeError("Configuration array not provided");
|
|
58
51
|
}
|
|
59
|
-
|
|
60
|
-
// Transform RegExp-only elements to objects
|
|
61
|
-
const objOnlyConfigs = config.map(e => isRegExp(e) ? {
|
|
62
|
-
tag: e
|
|
63
|
-
} : e);
|
|
52
|
+
const objOnlyConfigs = config.map((e) => isRegExp(e) ? { tag: e } : e);
|
|
64
53
|
configValid(objOnlyConfigs);
|
|
65
54
|
return {
|
|
66
|
-
description:
|
|
67
|
-
validate: record => excludeFields(record, objOnlyConfigs, false),
|
|
68
|
-
fix: record => excludeFields(record, objOnlyConfigs, true)
|
|
55
|
+
description: "Checks that the record does not contain the configured fields",
|
|
56
|
+
validate: (record) => excludeFields(record, objOnlyConfigs, false),
|
|
57
|
+
fix: (record) => excludeFields(record, objOnlyConfigs, true)
|
|
69
58
|
};
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
function configValid(config) {
|
|
74
|
-
config.forEach(obj => {
|
|
75
|
-
const excluded = []; // Validate fields: check that they are valid to confSpec (exists, correct data type), concat excluded elements
|
|
76
|
-
|
|
59
|
+
function configValid(config2) {
|
|
60
|
+
config2.forEach((obj) => {
|
|
61
|
+
const excluded = [];
|
|
77
62
|
checkMandatory(confSpec, obj);
|
|
78
63
|
forEach(obj, ([key, val]) => {
|
|
79
64
|
configMatchesSpec(val, key, confSpec);
|
|
80
|
-
// Concat all excluded elements to array
|
|
81
65
|
if (confSpec[key].excl) {
|
|
82
66
|
excluded.push(...confSpec[key].excl);
|
|
83
67
|
}
|
|
84
68
|
});
|
|
85
|
-
|
|
86
|
-
// Check that no excluded elements are in use
|
|
87
69
|
forEach(obj, ([key]) => {
|
|
88
70
|
if (excluded.includes(key)) {
|
|
89
|
-
throw new Error(
|
|
71
|
+
throw new Error("Configuration not valid - excluded element");
|
|
90
72
|
}
|
|
91
73
|
});
|
|
92
74
|
});
|
|
93
75
|
}
|
|
94
|
-
|
|
95
|
-
// Recursive validator
|
|
96
76
|
function configMatchesSpec(data, key, spec) {
|
|
97
|
-
// Field not found in configuration spec
|
|
98
77
|
if (!spec[key]) {
|
|
99
78
|
throw new Error(`Configuration not valid - unidentified value: ${key}`);
|
|
100
79
|
}
|
|
101
|
-
|
|
102
|
-
// If configuration type does not match type in configuration spec
|
|
103
|
-
if (typeof data !== spec[key].type && spec[key].type === 'RegExp' && !isRegExp(data)) {
|
|
80
|
+
if (typeof data !== spec[key].type && (spec[key].type === "RegExp" && !isRegExp(data))) {
|
|
104
81
|
throw new Error(`Configuration not valid - invalid data type for: ${key}`);
|
|
105
82
|
}
|
|
106
|
-
|
|
107
|
-
// Check subfields recursively
|
|
108
|
-
if (key === 'subfields') {
|
|
83
|
+
if (key === "subfields") {
|
|
109
84
|
forEach(data, ([, subObj]) => {
|
|
110
|
-
|
|
111
|
-
if (typeof subObj === 'object' && !Array.isArray(subObj)) {
|
|
85
|
+
if (typeof subObj === "object" && !Array.isArray(subObj)) {
|
|
112
86
|
checkMandatory(spec[key], subObj);
|
|
113
87
|
forEach(subObj, ([subKey, subVal]) => {
|
|
114
88
|
configMatchesSpec(subVal, subKey, spec[key]);
|
|
@@ -118,69 +92,45 @@ function _default(config) {
|
|
|
118
92
|
}
|
|
119
93
|
});
|
|
120
94
|
}
|
|
121
|
-
if (key ===
|
|
95
|
+
if (key === "dependencies") {
|
|
122
96
|
forEach(data, ([, subObj]) => {
|
|
123
|
-
if (!(typeof subObj ===
|
|
124
|
-
throw new TypeError(
|
|
97
|
+
if (!(typeof subObj === "object" && !Array.isArray(subObj) && Object.keys(subObj).length === 1 && isRegExp(subObj.leader))) {
|
|
98
|
+
throw new TypeError("Configuration not valid - Invalid dependencies config");
|
|
125
99
|
}
|
|
126
100
|
});
|
|
127
101
|
}
|
|
128
102
|
}
|
|
129
103
|
function checkMandatory(spec, obj) {
|
|
130
|
-
// Check if all mandatory fields are present
|
|
131
104
|
forEach(spec, ([key, val]) => {
|
|
132
|
-
if (val.mandatory && typeof obj[key] ===
|
|
105
|
+
if (val.mandatory && typeof obj[key] === "undefined") {
|
|
133
106
|
throw new Error(`Configuration not valid - missing mandatory element: ${key}`);
|
|
134
107
|
}
|
|
135
108
|
});
|
|
136
109
|
}
|
|
137
|
-
/// /////////////////////////////////////////
|
|
138
|
-
|
|
139
|
-
/// /////////////////////////////////////////
|
|
140
|
-
// These check that record is valid
|
|
141
110
|
function subFieldCheck(confField, element) {
|
|
142
|
-
|
|
143
|
-
return Object.values(confField).some(subField => Object.values(element.subfields)
|
|
144
|
-
// Check if subfield matches configuration spec
|
|
145
|
-
.some(elemSub => subField.code && elemSub.code && subField.code.test(elemSub.code) && subField.value && elemSub.value && subField.value.test(elemSub.value)));
|
|
111
|
+
return Object.values(confField).some((subField) => Object.values(element.subfields).some((elemSub) => subField.code && elemSub.code && subField.code.test(elemSub.code) && subField.value && elemSub.value && subField.value.test(elemSub.value)));
|
|
146
112
|
}
|
|
147
113
|
function excludeFields(record, conf, fix) {
|
|
148
|
-
const res = {
|
|
149
|
-
message: [],
|
|
150
|
-
valid: true
|
|
151
|
-
};
|
|
152
|
-
|
|
153
|
-
// Parse trough every element of config array
|
|
114
|
+
const res = { message: [], valid: true };
|
|
154
115
|
forEach(conf, ([, confObj]) => {
|
|
155
|
-
const found = record.get(confObj.tag);
|
|
116
|
+
const found = record.get(confObj.tag);
|
|
156
117
|
const excluded = [];
|
|
157
|
-
|
|
158
|
-
// Check if some of found record fields matches all configuration fields
|
|
159
|
-
found.forEach(element => {
|
|
160
|
-
// Compare each found element against each configuration object
|
|
118
|
+
found.forEach((element) => {
|
|
161
119
|
if (Object.entries(confObj).every(([confKey, confField]) => {
|
|
162
|
-
|
|
163
|
-
if (confKey === 'tag') {
|
|
120
|
+
if (confKey === "tag") {
|
|
164
121
|
return true;
|
|
165
122
|
}
|
|
166
|
-
if (confKey ===
|
|
167
|
-
return confObj.dependencies.every(dependency => dependency.leader.test(record.leader));
|
|
123
|
+
if (confKey === "dependencies") {
|
|
124
|
+
return confObj.dependencies.every((dependency) => dependency.leader.test(record.leader));
|
|
168
125
|
}
|
|
169
|
-
|
|
170
|
-
// Check subfield configurations
|
|
171
|
-
if (confKey === 'subfields') {
|
|
126
|
+
if (confKey === "subfields") {
|
|
172
127
|
return subFieldCheck(confField, element);
|
|
173
128
|
}
|
|
174
|
-
|
|
175
|
-
// Configuration object is RegExp and record value matches it
|
|
176
129
|
if (element[confKey] && isRegExp(confField) && confField.test(element[confKey])) {
|
|
177
130
|
return true;
|
|
178
|
-
|
|
179
|
-
// Configuration object not found from found element
|
|
180
131
|
}
|
|
181
132
|
return false;
|
|
182
133
|
})) {
|
|
183
|
-
// All configuration fields match, element should be excluded.
|
|
184
134
|
if (fix) {
|
|
185
135
|
excluded.push(element);
|
|
186
136
|
} else {
|
|
@@ -188,18 +138,14 @@ function _default(config) {
|
|
|
188
138
|
}
|
|
189
139
|
}
|
|
190
140
|
});
|
|
191
|
-
excluded.forEach(field => record.removeField(field));
|
|
141
|
+
excluded.forEach((field) => record.removeField(field));
|
|
192
142
|
});
|
|
193
|
-
|
|
194
|
-
// Fix does not send response
|
|
195
143
|
if (!fix) {
|
|
196
144
|
if (res.message.length > 0) {
|
|
197
145
|
res.valid = false;
|
|
198
146
|
}
|
|
199
147
|
return res;
|
|
200
148
|
}
|
|
201
|
-
// Res.fix.push('Field $' + element.tag + ' excluded');
|
|
202
149
|
}
|
|
203
|
-
/// /////////////////////////////////////////
|
|
204
150
|
}
|
|
205
|
-
//# sourceMappingURL=field-exclusion.js.map
|
|
151
|
+
//# sourceMappingURL=field-exclusion.js.map
|
|
@@ -1 +1,7 @@
|
|
|
1
|
-
{"version":3,"file":"field-exclusion.js","names":["confSpec","tag","type","mandatory","value","excl","ind1","ind2","subfields","code","dependencies","leader","forEach","obj","fun","Object","entries","isRegExp","re","result","RegExp","_default","config","Array","isArray","TypeError","objOnlyConfigs","map","e","configValid","description","validate","record","excludeFields","fix","excluded","checkMandatory","key","val","configMatchesSpec","push","includes","Error","data","spec","subObj","subKey","subVal","keys","length","subFieldCheck","confField","element","values","some","subField","elemSub","test","conf","res","message","valid","confObj","found","get","every","confKey","dependency","field","removeField"],"sources":["../src/field-exclusion.js"],"sourcesContent":["// Configuration specification\nconst confSpec = {\n tag: { // Pattern to match the field's tags\n type: 'RegExp',\n mandatory: true\n },\n value: { // Regular expression object for matching a controlfields value. Mutual exclusive with\n type: 'RegExp',\n excl: ['subfields', 'ind1', 'ind2']\n },\n ind1: { // Pattern to match the field's ind1 property.\n type: 'RegExp', // Array<Indicator>\n excl: ['value']\n },\n ind2: { // Pattern to match the field's ind2 property.\n type: 'RegExp', // Array<Indicator>\n excl: ['value']\n },\n subfields: { // An array of objects with the following properties\n code: {\n type: 'RegExp',\n mandatory: true\n },\n value: {\n type: 'RegExp',\n mandatory: true\n }\n },\n dependencies: {\n leader: {\n type: 'RegExp'\n }\n }\n};\n\nfunction forEach(obj, fun) {\n Object.entries(obj).forEach(fun);\n}\n\nfunction isRegExp(re) {\n const result = re instanceof RegExp;\n return result;\n}\n\nexport default function (config) {\n if (!Array.isArray(config)) {\n throw new TypeError('Configuration array not provided');\n }\n\n // Transform RegExp-only elements to objects\n const objOnlyConfigs = config.map(e => isRegExp(e) ? {tag: e} : e);\n configValid(objOnlyConfigs);\n\n return {\n description:\n 'Checks that the record does not contain the configured fields',\n validate: record => excludeFields(record, objOnlyConfigs, false),\n fix: record => excludeFields(record, objOnlyConfigs, true)\n };\n\n /// /////////////////////////////////////////\n // These check that configuration is valid\n function configValid(config) {\n config.forEach(obj => {\n const excluded = []; // Validate fields: check that they are valid to confSpec (exists, correct data type), concat excluded elements\n\n checkMandatory(confSpec, obj);\n\n forEach(obj, ([key, val]) => {\n configMatchesSpec(val, key, confSpec);\n // Concat all excluded elements to array\n if (confSpec[key].excl) {\n excluded.push(...confSpec[key].excl);\n }\n });\n\n // Check that no excluded elements are in use\n forEach(obj, ([key]) => {\n if (excluded.includes(key)) {\n throw new Error('Configuration not valid - excluded element');\n }\n });\n });\n }\n\n // Recursive validator\n function configMatchesSpec(data, key, spec) {\n // Field not found in configuration spec\n if (!spec[key]) {\n throw new Error(`Configuration not valid - unidentified value: ${key}`);\n }\n\n // If configuration type does not match type in configuration spec\n if (typeof data !== spec[key].type &&\n (spec[key].type === 'RegExp' && !isRegExp(data))) {\n throw new Error(`Configuration not valid - invalid data type for: ${key}`);\n }\n\n // Check subfields recursively\n if (key === 'subfields') {\n forEach(data, ([, subObj]) => {\n // Console.log(\"subObj: \", subObj, \" type: \", typeof subObj, !(Array.isArray(subObj)))\n if (typeof subObj === 'object' && !Array.isArray(subObj)) {\n checkMandatory(spec[key], subObj);\n\n forEach(subObj, ([subKey, subVal]) => {\n configMatchesSpec(subVal, subKey, spec[key]);\n });\n } else {\n throw new TypeError(`Configuration not valid - subfield: ${subObj} not object`);\n }\n });\n }\n\n if (key === 'dependencies') {\n forEach(data, ([, subObj]) => {\n if (!(typeof subObj === 'object' && !Array.isArray(subObj) && Object.keys(subObj).length === 1 && isRegExp(subObj.leader))) {\n throw new TypeError('Configuration not valid - Invalid dependencies config');\n }\n });\n }\n }\n\n function checkMandatory(spec, obj) {\n // Check if all mandatory fields are present\n forEach(spec, ([key, val]) => {\n if (val.mandatory && typeof obj[key] === 'undefined') {\n throw new Error(`Configuration not valid - missing mandatory element: ${key}`);\n }\n });\n }\n /// /////////////////////////////////////////\n\n /// /////////////////////////////////////////\n // These check that record is valid\n function subFieldCheck(confField, element) {\n // Parse trough every configuration subfield, check if one matches some subobjects fields\n return Object.values(confField).some(subField => Object.values(element.subfields)\n // Check if subfield matches configuration spec\n .some(elemSub => subField.code && elemSub.code && subField.code.test(elemSub.code) &&\n subField.value && elemSub.value && subField.value.test(elemSub.value)));\n }\n\n function excludeFields(record, conf, fix) {\n const res = {message: [], valid: true};\n\n // Parse trough every element of config array\n forEach(conf, ([, confObj]) => {\n const found = record.get(confObj.tag); // Find matching record fields based on mandatory tag\n const excluded = [];\n\n // Check if some of found record fields matches all configuration fields\n found.forEach(element => {\n // Compare each found element against each configuration object\n if (Object.entries(confObj).every(([confKey, confField]) => {\n // This is already checked on .get()\n if (confKey === 'tag') {\n return true;\n }\n\n if (confKey === 'dependencies') {\n return confObj.dependencies.every(dependency => dependency.leader.test(record.leader));\n }\n\n // Check subfield configurations\n if (confKey === 'subfields') {\n return subFieldCheck(confField, element);\n }\n\n // Configuration object is RegExp and record value matches it\n if (element[confKey] && isRegExp(confField) && confField.test(element[confKey])) {\n return true;\n\n // Configuration object not found from found element\n }\n\n return false;\n })) {\n // All configuration fields match, element should be excluded.\n if (fix) {\n excluded.push(element);\n } else {\n res.message.push(`Field $${element.tag} should be excluded`);\n }\n }\n });\n\n excluded.forEach(field => record.removeField(field)); // eslint-disable-line array-callback-return\n });\n\n // Fix does not send response\n if (!fix) {\n if (res.message.length > 0) {\n res.valid = false;\n }\n\n return res;\n }\n // Res.fix.push('Field $' + element.tag + ' excluded');\n }\n /// /////////////////////////////////////////\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/field-exclusion.js"],
|
|
4
|
+
"sourcesContent": ["// Configuration specification\nconst confSpec = {\n tag: { // Pattern to match the field's tags\n type: 'RegExp',\n mandatory: true\n },\n value: { // Regular expression object for matching a controlfields value. Mutual exclusive with\n type: 'RegExp',\n excl: ['subfields', 'ind1', 'ind2']\n },\n ind1: { // Pattern to match the field's ind1 property.\n type: 'RegExp', // Array<Indicator>\n excl: ['value']\n },\n ind2: { // Pattern to match the field's ind2 property.\n type: 'RegExp', // Array<Indicator>\n excl: ['value']\n },\n subfields: { // An array of objects with the following properties\n code: {\n type: 'RegExp',\n mandatory: true\n },\n value: {\n type: 'RegExp',\n mandatory: true\n }\n },\n dependencies: {\n leader: {\n type: 'RegExp'\n }\n }\n};\n\nfunction forEach(obj, fun) {\n Object.entries(obj).forEach(fun);\n}\n\nfunction isRegExp(re) {\n const result = re instanceof RegExp;\n return result;\n}\n\nexport default function (config) {\n if (!Array.isArray(config)) {\n throw new TypeError('Configuration array not provided');\n }\n\n // Transform RegExp-only elements to objects\n const objOnlyConfigs = config.map(e => isRegExp(e) ? {tag: e} : e);\n configValid(objOnlyConfigs);\n\n return {\n description:\n 'Checks that the record does not contain the configured fields',\n validate: record => excludeFields(record, objOnlyConfigs, false),\n fix: record => excludeFields(record, objOnlyConfigs, true)\n };\n\n /// /////////////////////////////////////////\n // These check that configuration is valid\n function configValid(config) {\n config.forEach(obj => {\n const excluded = []; // Validate fields: check that they are valid to confSpec (exists, correct data type), concat excluded elements\n\n checkMandatory(confSpec, obj);\n\n forEach(obj, ([key, val]) => {\n configMatchesSpec(val, key, confSpec);\n // Concat all excluded elements to array\n if (confSpec[key].excl) {\n excluded.push(...confSpec[key].excl);\n }\n });\n\n // Check that no excluded elements are in use\n forEach(obj, ([key]) => {\n if (excluded.includes(key)) {\n throw new Error('Configuration not valid - excluded element');\n }\n });\n });\n }\n\n // Recursive validator\n function configMatchesSpec(data, key, spec) {\n // Field not found in configuration spec\n if (!spec[key]) {\n throw new Error(`Configuration not valid - unidentified value: ${key}`);\n }\n\n // If configuration type does not match type in configuration spec\n if (typeof data !== spec[key].type &&\n (spec[key].type === 'RegExp' && !isRegExp(data))) {\n throw new Error(`Configuration not valid - invalid data type for: ${key}`);\n }\n\n // Check subfields recursively\n if (key === 'subfields') {\n forEach(data, ([, subObj]) => {\n // Console.log(\"subObj: \", subObj, \" type: \", typeof subObj, !(Array.isArray(subObj)))\n if (typeof subObj === 'object' && !Array.isArray(subObj)) {\n checkMandatory(spec[key], subObj);\n\n forEach(subObj, ([subKey, subVal]) => {\n configMatchesSpec(subVal, subKey, spec[key]);\n });\n } else {\n throw new TypeError(`Configuration not valid - subfield: ${subObj} not object`);\n }\n });\n }\n\n if (key === 'dependencies') {\n forEach(data, ([, subObj]) => {\n if (!(typeof subObj === 'object' && !Array.isArray(subObj) && Object.keys(subObj).length === 1 && isRegExp(subObj.leader))) {\n throw new TypeError('Configuration not valid - Invalid dependencies config');\n }\n });\n }\n }\n\n function checkMandatory(spec, obj) {\n // Check if all mandatory fields are present\n forEach(spec, ([key, val]) => {\n if (val.mandatory && typeof obj[key] === 'undefined') {\n throw new Error(`Configuration not valid - missing mandatory element: ${key}`);\n }\n });\n }\n /// /////////////////////////////////////////\n\n /// /////////////////////////////////////////\n // These check that record is valid\n function subFieldCheck(confField, element) {\n // Parse trough every configuration subfield, check if one matches some subobjects fields\n return Object.values(confField).some(subField => Object.values(element.subfields)\n // Check if subfield matches configuration spec\n .some(elemSub => subField.code && elemSub.code && subField.code.test(elemSub.code) &&\n subField.value && elemSub.value && subField.value.test(elemSub.value)));\n }\n\n function excludeFields(record, conf, fix) {\n const res = {message: [], valid: true};\n\n // Parse trough every element of config array\n forEach(conf, ([, confObj]) => {\n const found = record.get(confObj.tag); // Find matching record fields based on mandatory tag\n const excluded = [];\n\n // Check if some of found record fields matches all configuration fields\n found.forEach(element => {\n // Compare each found element against each configuration object\n if (Object.entries(confObj).every(([confKey, confField]) => {\n // This is already checked on .get()\n if (confKey === 'tag') {\n return true;\n }\n\n if (confKey === 'dependencies') {\n return confObj.dependencies.every(dependency => dependency.leader.test(record.leader));\n }\n\n // Check subfield configurations\n if (confKey === 'subfields') {\n return subFieldCheck(confField, element);\n }\n\n // Configuration object is RegExp and record value matches it\n if (element[confKey] && isRegExp(confField) && confField.test(element[confKey])) {\n return true;\n\n // Configuration object not found from found element\n }\n\n return false;\n })) {\n // All configuration fields match, element should be excluded.\n if (fix) {\n excluded.push(element);\n } else {\n res.message.push(`Field $${element.tag} should be excluded`);\n }\n }\n });\n\n excluded.forEach(field => record.removeField(field));\n });\n\n // Fix does not send response\n if (!fix) {\n if (res.message.length > 0) {\n res.valid = false;\n }\n\n return res;\n }\n // Res.fix.push('Field $' + element.tag + ' excluded');\n }\n /// /////////////////////////////////////////\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["config"]
|
|
7
|
+
}
|