@natlibfi/marc-record-validators-melinda 3.2.0 → 3.3.14-alpha.3
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/CODEOWNERS +2 -0
- package/.github/dependabot.yml +40 -0
- package/.github/workflows/melinda-node-tests.yml +61 -0
- package/LICENSE.txt +21 -661
- package/README.md +4 -5
- package/dist/access-rights.js +94 -0
- package/dist/access-rights.js.map +1 -0
- package/dist/access-rights.spec.js +150 -0
- package/dist/access-rights.spec.js.map +1 -0
- package/dist/double-commas.js +17 -27
- package/dist/double-commas.js.map +1 -1
- package/dist/double-commas.spec.js +72 -27
- package/dist/double-commas.spec.js.map +1 -1
- package/dist/duplicates-ind1.js +47 -27
- package/dist/duplicates-ind1.js.map +1 -1
- package/dist/duplicates-ind1.spec.js +44 -27
- package/dist/duplicates-ind1.spec.js.map +1 -1
- package/dist/empty-fields.js +79 -29
- package/dist/empty-fields.js.map +1 -1
- package/dist/empty-fields.spec.js +113 -27
- package/dist/empty-fields.spec.js.map +1 -1
- package/dist/ending-punctuation-conf.js +772 -129
- package/dist/ending-punctuation-conf.js.map +1 -1
- package/dist/ending-punctuation.js +291 -72
- package/dist/ending-punctuation.js.map +1 -1
- package/dist/ending-punctuation.spec.js +2638 -118
- package/dist/ending-punctuation.spec.js.map +1 -1
- package/dist/ending-whitespace.js +58 -0
- package/dist/ending-whitespace.js.map +1 -0
- package/dist/ending-whitespace.spec.js +42 -0
- package/dist/ending-whitespace.spec.js.map +1 -0
- package/dist/field-521-fix.js +96 -0
- package/dist/field-521-fix.js.map +1 -0
- package/dist/field-521-fix.spec.js +51 -0
- package/dist/field-521-fix.spec.js.map +1 -0
- package/dist/field-exclusion.js +214 -63
- package/dist/field-exclusion.js.map +1 -1
- package/dist/field-exclusion.spec.js +1057 -31
- package/dist/field-exclusion.spec.js.map +1 -1
- package/dist/field-structure.js +249 -78
- package/dist/field-structure.js.map +1 -1
- package/dist/field-structure.spec.js +534 -31
- package/dist/field-structure.spec.js.map +1 -1
- package/dist/fields-present.js +31 -27
- package/dist/fields-present.js.map +1 -1
- package/dist/fields-present.spec.js +120 -27
- package/dist/fields-present.spec.js.map +1 -1
- package/dist/fixed-fields.js +72 -27
- package/dist/fixed-fields.js.map +1 -1
- package/dist/fixed-fields.spec.js +139 -27
- package/dist/fixed-fields.spec.js.map +1 -1
- package/dist/identical-fields.js +42 -28
- package/dist/identical-fields.js.map +1 -1
- package/dist/identical-fields.spec.js +98 -27
- package/dist/identical-fields.spec.js.map +1 -1
- package/dist/index.js +202 -27
- package/dist/index.js.map +1 -1
- package/dist/indicator-fixes.js +191 -0
- package/dist/indicator-fixes.js.map +1 -0
- package/dist/indicator-fixes.spec.js +51 -0
- package/dist/indicator-fixes.spec.js.map +1 -0
- package/dist/isbn-issn.js +266 -27
- package/dist/isbn-issn.js.map +1 -1
- package/dist/isbn-issn.spec.js +594 -27
- package/dist/isbn-issn.spec.js.map +1 -1
- package/dist/item-language.js +171 -27
- package/dist/item-language.js.map +1 -1
- package/dist/item-language.spec.js +305 -27
- package/dist/item-language.spec.js.map +1 -1
- package/dist/mergeField500Lisapainokset.js +155 -0
- package/dist/mergeField500Lisapainokset.js.map +1 -0
- package/dist/mergeField500Lisapainokset.spec.js +51 -0
- package/dist/mergeField500Lisapainokset.spec.js.map +1 -0
- package/dist/mergeRelatorTermFields.js +140 -0
- package/dist/mergeRelatorTermFields.js.map +1 -0
- package/dist/mergeRelatorTermFields.spec.js +51 -0
- package/dist/mergeRelatorTermFields.spec.js.map +1 -0
- package/dist/multiple-subfield-0.js +120 -0
- package/dist/multiple-subfield-0.js.map +1 -0
- package/dist/multiple-subfield-0.spec.js +51 -0
- package/dist/multiple-subfield-0.spec.js.map +1 -0
- package/dist/non-breaking-space.js +61 -0
- package/dist/non-breaking-space.js.map +1 -0
- package/dist/non-breaking-space.spec.js +42 -0
- package/dist/non-breaking-space.spec.js.map +1 -0
- package/dist/normalize-identifiers.js +210 -0
- package/dist/normalize-identifiers.js.map +1 -0
- package/dist/normalize-identifiers.spec.js +51 -0
- package/dist/normalize-identifiers.spec.js.map +1 -0
- package/dist/normalize-utf8-diacritics.js +140 -0
- package/dist/normalize-utf8-diacritics.js.map +1 -0
- package/dist/normalize-utf8-diacritics.spec.js +51 -0
- package/dist/normalize-utf8-diacritics.spec.js.map +1 -0
- package/dist/punctuation/index.js +281 -0
- package/dist/punctuation/index.js.map +1 -0
- package/dist/punctuation/rules/aut.js +332 -0
- package/dist/punctuation/rules/aut.js.map +1 -0
- package/dist/punctuation/rules/bib.js +374 -0
- package/dist/punctuation/rules/bib.js.map +1 -0
- package/dist/punctuation/rules/index.js +21 -0
- package/dist/punctuation/rules/index.js.map +1 -0
- package/dist/punctuation.spec.js +51 -0
- package/dist/punctuation.spec.js.map +1 -0
- package/dist/punctuation2.js +726 -0
- package/dist/punctuation2.js.map +1 -0
- package/dist/punctuation2.spec.js +51 -0
- package/dist/punctuation2.spec.js.map +1 -0
- package/dist/reindexSubfield6OccurenceNumbers.js +199 -0
- package/dist/reindexSubfield6OccurenceNumbers.js.map +1 -0
- package/dist/reindexSubfield6OccurenceNumbers.spec.js +51 -0
- package/dist/reindexSubfield6OccurenceNumbers.spec.js.map +1 -0
- package/dist/removeDuplicateDataFields.js +405 -0
- package/dist/removeDuplicateDataFields.js.map +1 -0
- package/dist/removeDuplicateDataFields.spec.js +51 -0
- package/dist/removeDuplicateDataFields.spec.js.map +1 -0
- package/dist/removeInferiorDataFields.js +245 -0
- package/dist/removeInferiorDataFields.js.map +1 -0
- package/dist/removeInferiorDataFields.spec.js +51 -0
- package/dist/removeInferiorDataFields.spec.js.map +1 -0
- package/dist/resolvable-ext-references-melinda.js +112 -31
- package/dist/resolvable-ext-references-melinda.js.map +1 -1
- package/dist/resolvable-ext-references-melinda.spec.js +166 -27
- package/dist/resolvable-ext-references-melinda.spec.js.map +1 -1
- package/dist/resolveOrphanedSubfield6s.js +116 -0
- package/dist/resolveOrphanedSubfield6s.js.map +1 -0
- package/dist/resolveOrphanedSubfield6s.spec.js +51 -0
- package/dist/resolveOrphanedSubfield6s.spec.js.map +1 -0
- package/dist/sanitize-vocabulary-source-codes.js +93 -0
- package/dist/sanitize-vocabulary-source-codes.js.map +1 -0
- package/dist/sanitize-vocabulary-source-codes.spec.js +51 -0
- package/dist/sanitize-vocabulary-source-codes.spec.js.map +1 -0
- package/dist/sort-tags.js +53 -27
- package/dist/sort-tags.js.map +1 -1
- package/dist/sort-tags.spec.js +206 -27
- package/dist/sort-tags.spec.js.map +1 -1
- package/dist/sortRelatorTerms.js +135 -0
- package/dist/sortRelatorTerms.js.map +1 -0
- package/dist/sortRelatorTerms.spec.js +51 -0
- package/dist/sortRelatorTerms.spec.js.map +1 -0
- package/dist/sortSubfields.js +279 -0
- package/dist/sortSubfields.js.map +1 -0
- package/dist/sortSubfields.spec.js +51 -0
- package/dist/sortSubfields.spec.js.map +1 -0
- package/dist/stripPunctuation.js +49 -0
- package/dist/stripPunctuation.js.map +1 -0
- package/dist/stripPunctuation.spec.js +51 -0
- package/dist/stripPunctuation.spec.js.map +1 -0
- package/dist/subfield-exclusion.js +174 -57
- package/dist/subfield-exclusion.js.map +1 -1
- package/dist/subfield-exclusion.spec.js +521 -31
- package/dist/subfield-exclusion.spec.js.map +1 -1
- package/dist/subfield6Utils.js +457 -0
- package/dist/subfield6Utils.js.map +1 -0
- package/dist/subfield8Utils.js +99 -0
- package/dist/subfield8Utils.js.map +1 -0
- package/dist/typeOfDate-008.js +48 -0
- package/dist/typeOfDate-008.js.map +1 -0
- package/dist/typeOfDate-008.spec.js +47 -0
- package/dist/typeOfDate-008.spec.js.map +1 -0
- package/dist/unicode-decomposition.js +139 -30
- package/dist/unicode-decomposition.js.map +1 -1
- package/dist/unicode-decomposition.spec.js +90 -27
- package/dist/unicode-decomposition.spec.js.map +1 -1
- package/dist/update-field-540.js +119 -0
- package/dist/update-field-540.js.map +1 -0
- package/dist/update-field-540.spec.js +51 -0
- package/dist/update-field-540.spec.js.map +1 -0
- package/dist/urn.js +185 -0
- package/dist/urn.js.map +1 -0
- package/dist/urn.spec.js +238 -0
- package/dist/urn.spec.js.map +1 -0
- package/dist/utils.js +58 -0
- package/dist/utils.js.map +1 -0
- package/package.json +114 -124
- package/src/access-rights.js +84 -0
- package/src/access-rights.spec.js +126 -0
- package/src/double-commas.js +12 -49
- package/src/double-commas.spec.js +50 -82
- package/src/duplicates-ind1.js +34 -74
- package/src/duplicates-ind1.spec.js +39 -117
- package/src/empty-fields.js +62 -74
- package/src/empty-fields.spec.js +134 -207
- package/src/ending-punctuation-conf.js +679 -644
- package/src/ending-punctuation.js +260 -250
- package/src/ending-punctuation.spec.js +2545 -2322
- package/src/ending-whitespace.js +40 -0
- package/src/ending-whitespace.spec.js +44 -0
- package/src/field-521-fix.js +92 -0
- package/src/field-521-fix.spec.js +52 -0
- package/src/field-exclusion.js +197 -215
- package/src/field-exclusion.spec.js +883 -481
- package/src/field-structure.js +213 -271
- package/src/field-structure.spec.js +597 -474
- package/src/fields-present.js +19 -49
- package/src/fields-present.spec.js +90 -91
- package/src/fixed-fields.js +61 -94
- package/src/fixed-fields.spec.js +81 -125
- package/src/identical-fields.js +29 -48
- package/src/identical-fields.spec.js +114 -146
- package/src/index.js +41 -46
- package/src/indicator-fixes.js +211 -0
- package/src/indicator-fixes.spec.js +52 -0
- package/src/isbn-issn.js +254 -106
- package/src/isbn-issn.spec.js +399 -172
- package/src/item-language.js +158 -195
- package/src/item-language.spec.js +314 -306
- package/src/mergeField500Lisapainokset.js +153 -0
- package/src/mergeField500Lisapainokset.spec.js +52 -0
- package/src/mergeRelatorTermFields.js +143 -0
- package/src/mergeRelatorTermFields.spec.js +52 -0
- package/src/multiple-subfield-0.js +129 -0
- package/src/multiple-subfield-0.spec.js +52 -0
- package/src/non-breaking-space.js +49 -0
- package/src/non-breaking-space.spec.js +44 -0
- package/src/normalize-identifiers.js +197 -0
- package/src/normalize-identifiers.spec.js +52 -0
- package/src/normalize-utf8-diacritics.js +141 -0
- package/src/normalize-utf8-diacritics.spec.js +52 -0
- package/src/punctuation/index.js +292 -0
- package/src/punctuation/rules/aut.js +372 -0
- package/src/punctuation/rules/bib.js +420 -0
- package/src/punctuation/rules/index.js +7 -0
- package/src/punctuation.spec.js +52 -0
- package/src/punctuation2.js +441 -0
- package/src/punctuation2.spec.js +52 -0
- package/src/reindexSubfield6OccurenceNumbers.js +210 -0
- package/src/reindexSubfield6OccurenceNumbers.spec.js +52 -0
- package/src/removeDuplicateDataFields.js +447 -0
- package/src/removeDuplicateDataFields.spec.js +52 -0
- package/src/removeInferiorDataFields.js +259 -0
- package/src/removeInferiorDataFields.spec.js +52 -0
- package/src/resolvable-ext-references-melinda.js +89 -122
- package/src/resolvable-ext-references-melinda.spec.js +168 -198
- package/src/resolveOrphanedSubfield6s.js +115 -0
- package/src/resolveOrphanedSubfield6s.spec.js +52 -0
- package/src/sanitize-vocabulary-source-codes.js +99 -0
- package/src/sanitize-vocabulary-source-codes.spec.js +52 -0
- package/src/sort-tags.js +34 -60
- package/src/sort-tags.spec.js +256 -290
- package/src/sortRelatorTerms.js +142 -0
- package/src/sortRelatorTerms.spec.js +52 -0
- package/src/sortSubfields.js +176 -0
- package/src/sortSubfields.spec.js +52 -0
- package/src/stripPunctuation.js +42 -0
- package/src/stripPunctuation.spec.js +52 -0
- package/src/subfield-exclusion.js +157 -180
- package/src/subfield-exclusion.spec.js +507 -453
- package/src/subfield6Utils.js +485 -0
- package/src/subfield8Utils.js +102 -0
- package/src/typeOfDate-008.js +40 -0
- package/src/typeOfDate-008.spec.js +47 -0
- package/src/unicode-decomposition.js +130 -145
- package/src/unicode-decomposition.spec.js +89 -115
- package/src/update-field-540.js +99 -0
- package/src/update-field-540.spec.js +52 -0
- package/src/urn.js +164 -0
- package/src/urn.spec.js +231 -0
- package/src/utils.js +52 -0
- package/test-fixtures/duplicates-ind1/01/expectedResult.json +4 -0
- package/test-fixtures/duplicates-ind1/01/metadata.json +4 -0
- package/test-fixtures/duplicates-ind1/01/record.json +16 -0
- package/test-fixtures/duplicates-ind1/02/expectedResult.json +6 -0
- package/test-fixtures/duplicates-ind1/02/metadata.json +4 -0
- package/test-fixtures/duplicates-ind1/02/record.json +16 -0
- package/test-fixtures/duplicates-ind1/03/expectedResult.json +13 -0
- package/test-fixtures/duplicates-ind1/03/metadata.json +6 -0
- package/test-fixtures/duplicates-ind1/03/record.json +16 -0
- package/test-fixtures/ending-whitespace/01/expectedResult.json +4 -0
- package/test-fixtures/ending-whitespace/01/metadata.json +6 -0
- package/test-fixtures/ending-whitespace/01/record.json +15 -0
- package/test-fixtures/ending-whitespace/02/expectedResult.json +4 -0
- package/test-fixtures/ending-whitespace/02/metadata.json +6 -0
- package/test-fixtures/ending-whitespace/02/record.json +15 -0
- package/test-fixtures/ending-whitespace/03/expectedResult.json +17 -0
- package/test-fixtures/ending-whitespace/03/metadata.json +6 -0
- package/test-fixtures/ending-whitespace/03/record.json +15 -0
- package/test-fixtures/ending-whitespace/04/expectedResult.json +10 -0
- package/test-fixtures/ending-whitespace/04/metadata.json +6 -0
- package/test-fixtures/ending-whitespace/04/record.json +8 -0
- package/test-fixtures/fix521/01/expectedResult.json +6 -0
- package/test-fixtures/fix521/01/metadata.json +5 -0
- package/test-fixtures/fix521/01/record.json +13 -0
- package/test-fixtures/fix521/02/expectedResult.json +15 -0
- package/test-fixtures/fix521/02/metadata.json +5 -0
- package/test-fixtures/fix521/02/record.json +13 -0
- package/test-fixtures/fix521/03/expectedResult.json +5 -0
- package/test-fixtures/fix521/03/metadata.json +5 -0
- package/test-fixtures/fix521/03/record.json +13 -0
- package/test-fixtures/indicator-fixes/01/expectedResult.json +9 -0
- package/test-fixtures/indicator-fixes/01/metadata.json +5 -0
- package/test-fixtures/indicator-fixes/01/record.json +64 -0
- package/test-fixtures/indicator-fixes/02/expectedResult.json +66 -0
- package/test-fixtures/indicator-fixes/02/metadata.json +5 -0
- package/test-fixtures/indicator-fixes/02/record.json +64 -0
- package/test-fixtures/indicator-fixes/03/expectedResult.json +55 -0
- package/test-fixtures/indicator-fixes/03/metadata.json +5 -0
- package/test-fixtures/indicator-fixes/03/record.json +54 -0
- package/test-fixtures/indicator-fixes/04/expectedResult.json +66 -0
- package/test-fixtures/indicator-fixes/04/metadata.json +5 -0
- package/test-fixtures/indicator-fixes/04/record.json +65 -0
- package/test-fixtures/indicator-fixes/05/expectedResult.json +66 -0
- package/test-fixtures/indicator-fixes/05/metadata.json +5 -0
- package/test-fixtures/indicator-fixes/05/record.json +65 -0
- package/test-fixtures/indicator-fixes/06/expectedResult.json +75 -0
- package/test-fixtures/indicator-fixes/06/metadata.json +5 -0
- package/test-fixtures/indicator-fixes/06/record.json +74 -0
- package/test-fixtures/lisapainokset/fixer/01/expectedResult.json +37 -0
- package/test-fixtures/lisapainokset/fixer/01/metadata.json +6 -0
- package/test-fixtures/lisapainokset/fixer/01/record.json +61 -0
- package/test-fixtures/lisapainokset/fixer/02/expectedResult.json +44 -0
- package/test-fixtures/lisapainokset/fixer/02/metadata.json +6 -0
- package/test-fixtures/lisapainokset/fixer/02/record.json +45 -0
- package/test-fixtures/lisapainokset/fixer/03/expectedResult.json +21 -0
- package/test-fixtures/lisapainokset/fixer/03/metadata.json +6 -0
- package/test-fixtures/lisapainokset/fixer/03/record.json +45 -0
- package/test-fixtures/lisapainokset/validator/01/expectedResult.json +7 -0
- package/test-fixtures/lisapainokset/validator/01/metadata.json +6 -0
- package/test-fixtures/lisapainokset/validator/01/record.json +45 -0
- package/test-fixtures/lisapainokset/validator/02/expectedResult.json +6 -0
- package/test-fixtures/lisapainokset/validator/02/metadata.json +6 -0
- package/test-fixtures/lisapainokset/validator/02/record.json +61 -0
- package/test-fixtures/lisapainokset/validator/03/expectedResult.json +4 -0
- package/test-fixtures/lisapainokset/validator/03/metadata.json +6 -0
- package/test-fixtures/lisapainokset/validator/03/record.json +37 -0
- package/test-fixtures/mergeRelatorTermFields/fixer/01/expectedResult.json +14 -0
- package/test-fixtures/mergeRelatorTermFields/fixer/01/metadata.json +6 -0
- package/test-fixtures/mergeRelatorTermFields/fixer/01/record.json +16 -0
- package/test-fixtures/mergeRelatorTermFields/fixer/02/expectedResult.json +17 -0
- package/test-fixtures/mergeRelatorTermFields/fixer/02/metadata.json +6 -0
- package/test-fixtures/mergeRelatorTermFields/fixer/02/record.json +23 -0
- package/test-fixtures/mergeRelatorTermFields/validator/01/expectedResult.json +6 -0
- package/test-fixtures/mergeRelatorTermFields/validator/01/metadata.json +6 -0
- package/test-fixtures/mergeRelatorTermFields/validator/01/record.json +16 -0
- package/test-fixtures/mergeRelatorTermFields/validator/02/expectedResult.json +4 -0
- package/test-fixtures/mergeRelatorTermFields/validator/02/metadata.json +6 -0
- package/test-fixtures/mergeRelatorTermFields/validator/02/record.json +16 -0
- package/test-fixtures/non-breaking-space/01/expectedResult.json +4 -0
- package/test-fixtures/non-breaking-space/01/metadata.json +6 -0
- package/test-fixtures/non-breaking-space/01/record.json +15 -0
- package/test-fixtures/non-breaking-space/02/expectedResult.json +4 -0
- package/test-fixtures/non-breaking-space/02/metadata.json +6 -0
- package/test-fixtures/non-breaking-space/02/record.json +15 -0
- package/test-fixtures/non-breaking-space/03/expectedResult.json +17 -0
- package/test-fixtures/non-breaking-space/03/metadata.json +6 -0
- package/test-fixtures/non-breaking-space/03/record.json +15 -0
- package/test-fixtures/non-breaking-space/04/expectedResult.json +21 -0
- package/test-fixtures/non-breaking-space/04/metadata.json +6 -0
- package/test-fixtures/non-breaking-space/04/record.json +19 -0
- package/test-fixtures/normalize-identifiers/01/expectedResult.json +8 -0
- package/test-fixtures/normalize-identifiers/01/metadata.json +5 -0
- package/test-fixtures/normalize-identifiers/01/record.json +81 -0
- package/test-fixtures/normalize-identifiers/02/expectedResult.json +92 -0
- package/test-fixtures/normalize-identifiers/02/metadata.json +5 -0
- package/test-fixtures/normalize-identifiers/02/record.json +92 -0
- package/test-fixtures/normalize-identifiers/03/expectedResult.json +63 -0
- package/test-fixtures/normalize-identifiers/03/metadata.json +5 -0
- package/test-fixtures/normalize-identifiers/03/record.json +61 -0
- package/test-fixtures/normalize-identifiers/04/expectedResult.json +79 -0
- package/test-fixtures/normalize-identifiers/04/metadata.json +5 -0
- package/test-fixtures/normalize-identifiers/04/record.json +77 -0
- package/test-fixtures/normalize-utf8-diacritics/01/expectedResult.json +7 -0
- package/test-fixtures/normalize-utf8-diacritics/01/metadata.json +5 -0
- package/test-fixtures/normalize-utf8-diacritics/01/record.json +39 -0
- package/test-fixtures/normalize-utf8-diacritics/02/expectedResult.json +41 -0
- package/test-fixtures/normalize-utf8-diacritics/02/metadata.json +5 -0
- package/test-fixtures/normalize-utf8-diacritics/02/record.json +39 -0
- package/test-fixtures/normalize-utf8-diacritics/03/expectedResult.json +5 -0
- package/test-fixtures/normalize-utf8-diacritics/03/metadata.json +5 -0
- package/test-fixtures/normalize-utf8-diacritics/03/record.json +37 -0
- package/test-fixtures/normalize-utf8-diacritics/04/expectedResult.json +41 -0
- package/test-fixtures/normalize-utf8-diacritics/04/metadata.json +5 -0
- package/test-fixtures/normalize-utf8-diacritics/04/record.json +39 -0
- package/test-fixtures/normalize-utf8-diacritics/05/expectedResult.json +41 -0
- package/test-fixtures/normalize-utf8-diacritics/05/metadata.json +5 -0
- package/test-fixtures/normalize-utf8-diacritics/05/record.json +41 -0
- package/test-fixtures/punctuation/01/expectedResult.json +3 -0
- package/test-fixtures/punctuation/01/metadata.json +4 -0
- package/test-fixtures/punctuation/01/record.json +18 -0
- package/test-fixtures/punctuation/02/expectedResult.json +3 -0
- package/test-fixtures/punctuation/02/metadata.json +4 -0
- package/test-fixtures/punctuation/02/record.json +18 -0
- package/test-fixtures/punctuation/03/expectedResult.json +21 -0
- package/test-fixtures/punctuation/03/metadata.json +5 -0
- package/test-fixtures/punctuation/03/record.json +19 -0
- package/test-fixtures/punctuation/04/expectedResult.json +21 -0
- package/test-fixtures/punctuation/04/metadata.json +5 -0
- package/test-fixtures/punctuation/04/record.json +19 -0
- package/test-fixtures/punctuation/05/expectedResult.json +44 -0
- package/test-fixtures/punctuation/05/metadata.json +5 -0
- package/test-fixtures/punctuation/05/record.json +42 -0
- package/test-fixtures/punctuation2/01/expectedResult.json +12 -0
- package/test-fixtures/punctuation2/01/metadata.json +6 -0
- package/test-fixtures/punctuation2/01/record.json +37 -0
- package/test-fixtures/punctuation2/02/expectedResult.json +4 -0
- package/test-fixtures/punctuation2/02/metadata.json +6 -0
- package/test-fixtures/punctuation2/02/record.json +14 -0
- package/test-fixtures/punctuation2/04/expectedResult.json +7 -0
- package/test-fixtures/punctuation2/04/metadata.json +6 -0
- package/test-fixtures/punctuation2/04/record.json +22 -0
- package/test-fixtures/punctuation2/05/expectedResult.json +6 -0
- package/test-fixtures/punctuation2/05/metadata.json +6 -0
- package/test-fixtures/punctuation2/05/record.json +12 -0
- package/test-fixtures/punctuation2/98/expectedResult.json +45 -0
- package/test-fixtures/punctuation2/98/metadata.json +6 -0
- package/test-fixtures/punctuation2/98/record.json +43 -0
- package/test-fixtures/punctuation2/99/expectedResult.json +15 -0
- package/test-fixtures/punctuation2/99/metadata.json +6 -0
- package/test-fixtures/punctuation2/99/record.json +14 -0
- package/test-fixtures/reindex-sf6-occurence-numbers/f01/expectedResult.json +35 -0
- package/test-fixtures/reindex-sf6-occurence-numbers/f01/metadata.json +6 -0
- package/test-fixtures/reindex-sf6-occurence-numbers/f01/record.json +34 -0
- package/test-fixtures/reindex-sf6-occurence-numbers/f02/expectedResult.json +53 -0
- package/test-fixtures/reindex-sf6-occurence-numbers/f02/metadata.json +6 -0
- package/test-fixtures/reindex-sf6-occurence-numbers/f02/record.json +51 -0
- package/test-fixtures/reindex-sf6-occurence-numbers/f03/expectedResult.json +46 -0
- package/test-fixtures/reindex-sf6-occurence-numbers/f03/metadata.json +7 -0
- package/test-fixtures/reindex-sf6-occurence-numbers/f03/record.json +44 -0
- package/test-fixtures/reindex-sf6-occurence-numbers/v01/expectedResult.json +6 -0
- package/test-fixtures/reindex-sf6-occurence-numbers/v01/metadata.json +5 -0
- package/test-fixtures/reindex-sf6-occurence-numbers/v01/record.json +31 -0
- package/test-fixtures/reindex-sf6-occurence-numbers/v02/expectedResult.json +6 -0
- package/test-fixtures/reindex-sf6-occurence-numbers/v02/metadata.json +6 -0
- package/test-fixtures/reindex-sf6-occurence-numbers/v02/record.json +38 -0
- package/test-fixtures/reindex-sf6-occurence-numbers/v03/expectedResult.json +6 -0
- package/test-fixtures/reindex-sf6-occurence-numbers/v03/metadata.json +6 -0
- package/test-fixtures/reindex-sf6-occurence-numbers/v03/record.json +30 -0
- package/test-fixtures/remove-duplicate-datafields/f01/expectedResult.json +35 -0
- package/test-fixtures/remove-duplicate-datafields/f01/metadata.json +6 -0
- package/test-fixtures/remove-duplicate-datafields/f01/record.json +34 -0
- package/test-fixtures/remove-duplicate-datafields/f03/expectedResult.json +20 -0
- package/test-fixtures/remove-duplicate-datafields/f03/metadata.json +6 -0
- package/test-fixtures/remove-duplicate-datafields/f03/record.json +33 -0
- package/test-fixtures/remove-duplicate-datafields/f03b/expectedResult.json +20 -0
- package/test-fixtures/remove-duplicate-datafields/f03b/metadata.json +6 -0
- package/test-fixtures/remove-duplicate-datafields/f03b/record.json +35 -0
- package/test-fixtures/remove-duplicate-datafields/f03c/expectedResult.json +25 -0
- package/test-fixtures/remove-duplicate-datafields/f03c/metadata.json +6 -0
- package/test-fixtures/remove-duplicate-datafields/f03c/record.json +43 -0
- package/test-fixtures/remove-duplicate-datafields/f04/expectedResult.json +31 -0
- package/test-fixtures/remove-duplicate-datafields/f04/metadata.json +6 -0
- package/test-fixtures/remove-duplicate-datafields/f04/record.json +41 -0
- package/test-fixtures/remove-duplicate-datafields/f05/expectedResult.json +23 -0
- package/test-fixtures/remove-duplicate-datafields/f05/metadata.json +6 -0
- package/test-fixtures/remove-duplicate-datafields/f05/record.json +29 -0
- package/test-fixtures/remove-duplicate-datafields/f06/expectedResult.json +24 -0
- package/test-fixtures/remove-duplicate-datafields/f06/metadata.json +6 -0
- package/test-fixtures/remove-duplicate-datafields/f06/record.json +41 -0
- package/test-fixtures/remove-duplicate-datafields/f07/expectedResult.json +15 -0
- package/test-fixtures/remove-duplicate-datafields/f07/metadata.json +6 -0
- package/test-fixtures/remove-duplicate-datafields/f07/record.json +21 -0
- package/test-fixtures/remove-duplicate-datafields/f08/expectedResult.json +21 -0
- package/test-fixtures/remove-duplicate-datafields/f08/metadata.json +6 -0
- package/test-fixtures/remove-duplicate-datafields/f08/record.json +33 -0
- package/test-fixtures/remove-duplicate-datafields/f09/expectedResult.json +6 -0
- package/test-fixtures/remove-duplicate-datafields/f09/metadata.json +6 -0
- package/test-fixtures/remove-duplicate-datafields/f09/record.json +9 -0
- package/test-fixtures/remove-duplicate-datafields/f10/expectedResult.json +15 -0
- package/test-fixtures/remove-duplicate-datafields/f10/metadata.json +6 -0
- package/test-fixtures/remove-duplicate-datafields/f10/record.json +24 -0
- package/test-fixtures/remove-duplicate-datafields/f11/expectedResult.json +30 -0
- package/test-fixtures/remove-duplicate-datafields/f11/metadata.json +6 -0
- package/test-fixtures/remove-duplicate-datafields/f11/record.json +53 -0
- package/test-fixtures/remove-duplicate-datafields/v01/expectedResult.json +6 -0
- package/test-fixtures/remove-duplicate-datafields/v01/metadata.json +6 -0
- package/test-fixtures/remove-duplicate-datafields/v01/record.json +31 -0
- package/test-fixtures/remove-duplicate-datafields/v02/expectedResult.json +10 -0
- package/test-fixtures/remove-duplicate-datafields/v02/metadata.json +6 -0
- package/test-fixtures/remove-duplicate-datafields/v02/record.json +45 -0
- package/test-fixtures/remove-duplicate-datafields/v03/expectedResult.json +6 -0
- package/test-fixtures/remove-duplicate-datafields/v03/metadata.json +7 -0
- package/test-fixtures/remove-duplicate-datafields/v03/record.json +37 -0
- package/test-fixtures/remove-duplicate-datafields/v04/expectedResult.json +8 -0
- package/test-fixtures/remove-duplicate-datafields/v04/metadata.json +6 -0
- package/test-fixtures/remove-duplicate-datafields/v04/record.json +41 -0
- package/test-fixtures/remove-inferior-datafields/f01/expectedResult.json +21 -0
- package/test-fixtures/remove-inferior-datafields/f01/metadata.json +6 -0
- package/test-fixtures/remove-inferior-datafields/f01/record.json +31 -0
- package/test-fixtures/remove-inferior-datafields/f03/expectedResult.json +16 -0
- package/test-fixtures/remove-inferior-datafields/f03/metadata.json +6 -0
- package/test-fixtures/remove-inferior-datafields/f03/record.json +27 -0
- package/test-fixtures/remove-inferior-datafields/f04/expectedResult.json +31 -0
- package/test-fixtures/remove-inferior-datafields/f04/metadata.json +6 -0
- package/test-fixtures/remove-inferior-datafields/f04/record.json +38 -0
- package/test-fixtures/remove-inferior-datafields/f05/expectedResult.json +34 -0
- package/test-fixtures/remove-inferior-datafields/f05/metadata.json +6 -0
- package/test-fixtures/remove-inferior-datafields/f05/record.json +41 -0
- package/test-fixtures/remove-inferior-datafields/f06/expectedResult.json +16 -0
- package/test-fixtures/remove-inferior-datafields/f06/metadata.json +6 -0
- package/test-fixtures/remove-inferior-datafields/f06/record.json +20 -0
- package/test-fixtures/remove-inferior-datafields/v01/expectedResult.json +6 -0
- package/test-fixtures/remove-inferior-datafields/v01/metadata.json +6 -0
- package/test-fixtures/remove-inferior-datafields/v01/record.json +31 -0
- package/test-fixtures/remove-inferior-datafields/v02/expectedResult.json +6 -0
- package/test-fixtures/remove-inferior-datafields/v02/metadata.json +6 -0
- package/test-fixtures/remove-inferior-datafields/v02/record.json +21 -0
- package/test-fixtures/remove-orphanded-sf6s/f01/expectedResult.json +35 -0
- package/test-fixtures/remove-orphanded-sf6s/f01/metadata.json +6 -0
- package/test-fixtures/remove-orphanded-sf6s/f01/record.json +34 -0
- package/test-fixtures/remove-orphanded-sf6s/f02/expectedResult.json +40 -0
- package/test-fixtures/remove-orphanded-sf6s/f02/metadata.json +6 -0
- package/test-fixtures/remove-orphanded-sf6s/f02/record.json +43 -0
- package/test-fixtures/remove-orphanded-sf6s/v01/expectedResult.json +6 -0
- package/test-fixtures/remove-orphanded-sf6s/v01/metadata.json +6 -0
- package/test-fixtures/remove-orphanded-sf6s/v01/record.json +31 -0
- package/test-fixtures/remove-orphanded-sf6s/v02/expectedResult.json +6 -0
- package/test-fixtures/remove-orphanded-sf6s/v02/metadata.json +6 -0
- package/test-fixtures/remove-orphanded-sf6s/v02/record.json +31 -0
- package/test-fixtures/resolvable-ext-references-melinda.js +0 -27
- package/test-fixtures/sanitize-vocabulary-source-codes/f01/expectedResult.json +32 -0
- package/test-fixtures/sanitize-vocabulary-source-codes/f01/metadata.json +6 -0
- package/test-fixtures/sanitize-vocabulary-source-codes/f01/record.json +32 -0
- package/test-fixtures/sanitize-vocabulary-source-codes/f02/expectedResult.json +24 -0
- package/test-fixtures/sanitize-vocabulary-source-codes/f02/metadata.json +6 -0
- package/test-fixtures/sanitize-vocabulary-source-codes/f02/record.json +24 -0
- package/test-fixtures/sanitize-vocabulary-source-codes/v01/expectedResult.json +12 -0
- package/test-fixtures/sanitize-vocabulary-source-codes/v01/metadata.json +6 -0
- package/test-fixtures/sanitize-vocabulary-source-codes/v01/record.json +24 -0
- package/test-fixtures/sort-relator-terms/f01/expectedResult.json +23 -0
- package/test-fixtures/sort-relator-terms/f01/metadata.json +6 -0
- package/test-fixtures/sort-relator-terms/f01/record.json +22 -0
- package/test-fixtures/sort-relator-terms/f02/expectedResult.json +26 -0
- package/test-fixtures/sort-relator-terms/f02/metadata.json +6 -0
- package/test-fixtures/sort-relator-terms/f02/record.json +22 -0
- package/test-fixtures/sort-relator-terms/v01/expectedResult.json +5 -0
- package/test-fixtures/sort-relator-terms/v01/metadata.json +6 -0
- package/test-fixtures/sort-relator-terms/v01/record.json +22 -0
- package/test-fixtures/sort-relator-terms/v02/expectedResult.json +6 -0
- package/test-fixtures/sort-relator-terms/v02/metadata.json +6 -0
- package/test-fixtures/sort-relator-terms/v02/record.json +14 -0
- package/test-fixtures/sort-subfields/f01/expectedResult.json +24 -0
- package/test-fixtures/sort-subfields/f01/metadata.json +6 -0
- package/test-fixtures/sort-subfields/f01/record.json +20 -0
- package/test-fixtures/sort-subfields/v01/expectedResult.json +5 -0
- package/test-fixtures/sort-subfields/v01/metadata.json +6 -0
- package/test-fixtures/sort-subfields/v01/record.json +24 -0
- package/test-fixtures/sort-subfields/v02/expectedResult.json +6 -0
- package/test-fixtures/sort-subfields/v02/metadata.json +6 -0
- package/test-fixtures/sort-subfields/v02/record.json +8 -0
- package/test-fixtures/strip-punctuation/01/expectedResult.json +12 -0
- package/test-fixtures/strip-punctuation/01/metadata.json +6 -0
- package/test-fixtures/strip-punctuation/01/record.json +37 -0
- package/test-fixtures/strip-punctuation/02/expectedResult.json +4 -0
- package/test-fixtures/strip-punctuation/02/metadata.json +6 -0
- package/test-fixtures/strip-punctuation/02/record.json +14 -0
- package/test-fixtures/strip-punctuation/04/expectedResult.json +6 -0
- package/test-fixtures/strip-punctuation/04/metadata.json +6 -0
- package/test-fixtures/strip-punctuation/04/record.json +22 -0
- package/test-fixtures/strip-punctuation/05/expectedResult.json +6 -0
- package/test-fixtures/strip-punctuation/05/metadata.json +6 -0
- package/test-fixtures/strip-punctuation/05/record.json +12 -0
- package/test-fixtures/strip-punctuation/98/expectedResult.json +44 -0
- package/test-fixtures/strip-punctuation/98/metadata.json +6 -0
- package/test-fixtures/strip-punctuation/98/record.json +45 -0
- package/test-fixtures/strip-punctuation/99/expectedResult.json +16 -0
- package/test-fixtures/strip-punctuation/99/metadata.json +6 -0
- package/test-fixtures/strip-punctuation/99/record.json +16 -0
- package/test-fixtures/subfield0/f01/expectedResult.json +25 -0
- package/test-fixtures/subfield0/f01/metadata.json +6 -0
- package/test-fixtures/subfield0/f01/record.json +23 -0
- package/test-fixtures/subfield0/f02/expectedResult.json +35 -0
- package/test-fixtures/subfield0/f02/metadata.json +6 -0
- package/test-fixtures/subfield0/f02/record.json +41 -0
- package/test-fixtures/subfield0/f03/expectedResult.json +21 -0
- package/test-fixtures/subfield0/f03/metadata.json +7 -0
- package/test-fixtures/subfield0/f03/record.json +24 -0
- package/test-fixtures/subfield0/v01/expectedResult.json +4 -0
- package/test-fixtures/subfield0/v01/metadata.json +6 -0
- package/test-fixtures/subfield0/v01/record.json +23 -0
- package/test-fixtures/subfield0/v02/expectedResult.json +9 -0
- package/test-fixtures/subfield0/v02/metadata.json +6 -0
- package/test-fixtures/subfield0/v02/record.json +38 -0
- package/test-fixtures/typeOfDate-008/01/expectedResult.json +3 -0
- package/test-fixtures/typeOfDate-008/01/metadata.json +4 -0
- package/test-fixtures/typeOfDate-008/01/record.json +14 -0
- package/test-fixtures/typeOfDate-008/02/expectedResult.json +4 -0
- package/test-fixtures/typeOfDate-008/02/metadata.json +4 -0
- package/test-fixtures/typeOfDate-008/02/record.json +14 -0
- package/test-fixtures/typeOfDate-008/03/expectedResult.json +14 -0
- package/test-fixtures/typeOfDate-008/03/metadata.json +5 -0
- package/test-fixtures/typeOfDate-008/03/record.json +14 -0
- package/test-fixtures/typeOfDate-008/04/expectedResult.json +14 -0
- package/test-fixtures/typeOfDate-008/04/metadata.json +5 -0
- package/test-fixtures/typeOfDate-008/04/record.json +14 -0
- package/test-fixtures/typeOfDate-008/05/expectedResult.json +14 -0
- package/test-fixtures/typeOfDate-008/05/metadata.json +5 -0
- package/test-fixtures/typeOfDate-008/05/record.json +14 -0
- package/test-fixtures/update-field-540/f01/expectedResult.json +23 -0
- package/test-fixtures/update-field-540/f01/metadata.json +6 -0
- package/test-fixtures/update-field-540/f01/record.json +23 -0
- package/test-fixtures/update-field-540/v01/expectedResult.json +7 -0
- package/test-fixtures/update-field-540/v01/metadata.json +6 -0
- package/test-fixtures/update-field-540/v01/record.json +23 -0
- package/.travis.yml +0 -10
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = _default;
|
|
7
|
+
exports.removeIndividualInferiorDatafields = removeIndividualInferiorDatafields;
|
|
8
|
+
exports.removeInferiorChains = removeInferiorChains;
|
|
9
|
+
exports.removeInferiorDatafields = removeInferiorDatafields;
|
|
10
|
+
var _debug = _interopRequireDefault(require("debug"));
|
|
11
|
+
var _removeDuplicateDataFields = require("./removeDuplicateDataFields");
|
|
12
|
+
var _subfield6Utils = require("./subfield6Utils");
|
|
13
|
+
var _utils = require("./utils");
|
|
14
|
+
var _subfield8Utils = require("./subfield8Utils");
|
|
15
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
16
|
+
// Relocated from melinda-marc-record-merge-reducers (and renamed)
|
|
17
|
+
|
|
18
|
+
// NB! This validator handles only full fields, and does not support subfield $8 removal.
|
|
19
|
+
// Also, having multiple $8 subfields in same fields is not supported.
|
|
20
|
+
// If this functionality is needed, see removeDuplicateDatafields.js for examples of subfield-only stuff.
|
|
21
|
+
const debug = (0, _debug.default)('@natlibfi/marc-record-validators-melinda:removeSubsetDataFields');
|
|
22
|
+
function _default() {
|
|
23
|
+
return {
|
|
24
|
+
description: 'Remove subset data fields. Certain exceptions apply, mainly too complited chained fields',
|
|
25
|
+
validate,
|
|
26
|
+
fix
|
|
27
|
+
};
|
|
28
|
+
function fix(record) {
|
|
29
|
+
(0, _utils.nvdebug)('Fix record: remove subset data fields', debug);
|
|
30
|
+
const res = {
|
|
31
|
+
message: [],
|
|
32
|
+
fix: [],
|
|
33
|
+
valid: true
|
|
34
|
+
};
|
|
35
|
+
removeInferiorDatafields(record, true);
|
|
36
|
+
// This can not really fail...
|
|
37
|
+
return res;
|
|
38
|
+
}
|
|
39
|
+
function validate(record) {
|
|
40
|
+
// Check max, and check number of different indexes
|
|
41
|
+
(0, _utils.nvdebug)('Validate record: remove subset data fields', debug);
|
|
42
|
+
const duplicates = removeInferiorDatafields(record, false);
|
|
43
|
+
const res = {
|
|
44
|
+
message: duplicates
|
|
45
|
+
};
|
|
46
|
+
res.valid = res.message.length < 1; // eslint-disable-line functional/immutable-data
|
|
47
|
+
return res;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function deriveInferiorChains(fields, record) {
|
|
51
|
+
/* eslint-disable */
|
|
52
|
+
let deletableStringsObject = {};
|
|
53
|
+
(0, _utils.nvdebug)(`WP1: GOT ${fields.length} field(s) for potential deletable chain derivation`);
|
|
54
|
+
fields.forEach(field => fieldDeriveChainDeletables(field));
|
|
55
|
+
function fieldDeriveChainDeletables(field) {
|
|
56
|
+
const chain = (0, _removeDuplicateDataFields.fieldToChain)(field, record);
|
|
57
|
+
if (chain.length === 0) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const chainAsString = (0, _subfield6Utils.fieldsToNormalizedString)(chain, 0, true, true);
|
|
61
|
+
|
|
62
|
+
//nvdebug(`666: ${chainAsString}`);
|
|
63
|
+
|
|
64
|
+
// Fix MRA-476 (part 1): one $6 value can be worse than the other
|
|
65
|
+
let tmp = chainAsString;
|
|
66
|
+
while (tmp.match(/ ‡6 [0-9X][0-9][0-9]-(?:XX|[0-9]+)\/[^ ]+/u)) {
|
|
67
|
+
tmp = tmp.replace(/( ‡6 [0-9X][0-9][0-9]-(?:XX|[0-9]+))\/[^ ]+/u, '$1');
|
|
68
|
+
//nvdebug(`FFS: ${tmp}`);
|
|
69
|
+
deletableStringsObject[tmp] = field;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Remove keepless versions:
|
|
73
|
+
tmp = chainAsString;
|
|
74
|
+
while (tmp.match(/ ‡9 [A-Z]+<KEEP>/)) {
|
|
75
|
+
tmp = tmp.replace(/ ‡9 [A-Z]+<KEEP>/, '');
|
|
76
|
+
deletableStringsObject[tmp] = field;
|
|
77
|
+
//nvdebug(`FFS: ${tmp}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/* eslint-enable */
|
|
82
|
+
return deletableStringsObject;
|
|
83
|
+
}
|
|
84
|
+
function isRelevantChain6(field, record) {
|
|
85
|
+
//Can't be a chain:
|
|
86
|
+
if (!(0, _subfield6Utils.fieldHasValidSubfield6)(field) && !(0, _subfield8Utils.fieldHasValidSubfield8)(field)) {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
// Too short to be a chain:
|
|
90
|
+
const chain = (0, _removeDuplicateDataFields.fieldToChain)(field, record);
|
|
91
|
+
if (chain.length < 2) {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
// No field can contains no more than one subfield $6
|
|
95
|
+
if (chain.some(f => f.subfields.filter(sf => sf.code === '6').length > 1)) {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Chainwise non-initial fields are not relevant as chains is handled through the initial/head field
|
|
100
|
+
/* eslint-disable */
|
|
101
|
+
field.tmpInferiorId = 666;
|
|
102
|
+
const result = chain[0].tmpInferiorId === 666 ? true : false;
|
|
103
|
+
delete field.tmpInferiorId;
|
|
104
|
+
/* eslint-enable */
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
function removeInferiorChains(record, fix = true) {
|
|
108
|
+
const fields = record.fields.filter(f => isRelevantChain6(f, record));
|
|
109
|
+
//nvdebug(`WP2.0: GOT ${fields.length} chain(s)`);
|
|
110
|
+
|
|
111
|
+
const deletableChainsAsKeys = deriveInferiorChains(fields, record);
|
|
112
|
+
const nChains = Object.keys(deletableChainsAsKeys).length;
|
|
113
|
+
//nvdebug(`WP2: GOT ${nChains} chain(s)`);
|
|
114
|
+
if (nChains === 0) {
|
|
115
|
+
return [];
|
|
116
|
+
}
|
|
117
|
+
(0, _utils.nvdebug)(`removeInferiorChains() has ${fields.length} fields-in-chain(s), and a list of ${nChains} deletable(s)`);
|
|
118
|
+
|
|
119
|
+
/* eslint-disable */
|
|
120
|
+
|
|
121
|
+
let deletedStringsArray = [];
|
|
122
|
+
fields.forEach(f => innerRemoveInferiorChain(f));
|
|
123
|
+
function chainContains1XX(chain) {
|
|
124
|
+
return chain.some(f => f.tag.substring(0, 1) === '1');
|
|
125
|
+
}
|
|
126
|
+
function sevenToOne(field, chain) {
|
|
127
|
+
if (!['700', '710', '711', '730'].includes(field.tag)) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
// Retag field 7XX as 1XX and fix corresponding occurrence numbers as well:
|
|
131
|
+
const pairs = (0, _subfield6Utils.fieldGetOccurrenceNumberPairs)(field, chain);
|
|
132
|
+
field.tag = `1${field.tag.substring(1)}`; // eslint-disable-line functional/immutable-data
|
|
133
|
+
// There should always be one pair, but I'm not sanity-checking this
|
|
134
|
+
pairs.forEach(pairedField => (0, _subfield6Utils.fieldSevenToOneOccurrenceNumber)(pairedField));
|
|
135
|
+
}
|
|
136
|
+
function innerRemoveInferiorChain(field) {
|
|
137
|
+
const chain = (0, _removeDuplicateDataFields.fieldToChain)(field, record);
|
|
138
|
+
if (chain.length === 0 || !(0, _removeDuplicateDataFields.sameField)(field, chain[0])) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// Better to keep inferior 1XX (vs better 7XX) than to delete 1XX!
|
|
143
|
+
if (chain.some(f => f.tag.substring(0, 1) === '1')) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
const chainAsString = (0, _subfield6Utils.fieldsToNormalizedString)(chain, 0, true, true);
|
|
147
|
+
if (chainAsString in deletableChainsAsKeys) {
|
|
148
|
+
const triggeringField = deletableChainsAsKeys[chainAsString];
|
|
149
|
+
const triggeringChain = (0, _removeDuplicateDataFields.fieldToChain)(triggeringField, record);
|
|
150
|
+
|
|
151
|
+
// 1XX may be converted to XXX. However, it should not be removed.
|
|
152
|
+
// Better to keep inferior 1XX (vs better 7XX) than to delete 1XX!
|
|
153
|
+
if (chainContains1XX(chain)) {
|
|
154
|
+
if (chainContains1XX(triggeringChain)) {
|
|
155
|
+
// This should *never* happen, but keep this as a sanity check
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
triggeringChain.forEach(f => sevenToOne(f, triggeringChain));
|
|
159
|
+
}
|
|
160
|
+
(0, _utils.nvdebug)(`iRIS6C: ${chainAsString}`);
|
|
161
|
+
const deletedString = (0, _utils.fieldsToString)(chain);
|
|
162
|
+
const message = `DEL: '${deletedString}' REASON: '${(0, _utils.fieldsToString)(triggeringChain)}'`;
|
|
163
|
+
deletedStringsArray.push(message);
|
|
164
|
+
if (fix) {
|
|
165
|
+
(0, _utils.nvdebug)(`INFERIOR $6 CHAIN REMOVAL: ${message}}`, debug);
|
|
166
|
+
chain.forEach(currField => record.removeField(currField));
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/* eslint-enable */
|
|
172
|
+
return deletedStringsArray;
|
|
173
|
+
}
|
|
174
|
+
function deriveIndividualDeletables(record) {
|
|
175
|
+
/* eslint-disable */
|
|
176
|
+
let deletableStringsArray = [];
|
|
177
|
+
record.fields.forEach(field => fieldDeriveIndividualDeletables(field));
|
|
178
|
+
function fieldDeriveIndividualDeletables(field) {
|
|
179
|
+
const fieldAsString = (0, _utils.fieldToString)(field);
|
|
180
|
+
|
|
181
|
+
// Proof-of-concept rule:
|
|
182
|
+
let tmp = fieldAsString;
|
|
183
|
+
if (field.tag.match(/^[1678]00$/u)) {
|
|
184
|
+
while (tmp.match(/, ‡e [^‡]+\.$/)) {
|
|
185
|
+
tmp = tmp.replace(/, ‡e [^‡]+\.$/, '.');
|
|
186
|
+
deletableStringsArray.push(tmp);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
// MET-381: remove occurence number TAG-00, if TAG-NN existists
|
|
190
|
+
if (field.tag === '880') {
|
|
191
|
+
tmp = fieldAsString;
|
|
192
|
+
if (tmp.match(/ ‡6 [0-9][0-9][0-9]-([?:1-9][0-9]|0[1-9])/)) {
|
|
193
|
+
tmp = tmp.replace(/( ‡6 [0-9][0-9][0-9])-[0-9]+/, '$1-00');
|
|
194
|
+
(0, _utils.nvdebug)(`MET-381: ADD TO DELETABLES: ${tmp}`);
|
|
195
|
+
deletableStringsArray.push(tmp);
|
|
196
|
+
if (tmp.match(/ ‡6 [0-9][0-9][0-9]-00\/[^ ]+ /)) {
|
|
197
|
+
tmp = tmp.replace(/( ‡6 [0-9][0-9][0-9]-00)[^ ]+/, '$1');
|
|
198
|
+
(0, _utils.nvdebug)(`MET-381: ADD TO DELETABLES: ${tmp}`);
|
|
199
|
+
deletableStringsArray.push(tmp);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// Remove keepless versions:
|
|
205
|
+
tmp = fieldAsString;
|
|
206
|
+
while (tmp.match(/ ‡9 [A-Z]+<KEEP>/)) {
|
|
207
|
+
tmp = tmp.replace(/ ‡9 [A-Z]+<KEEP>/, '');
|
|
208
|
+
deletableStringsArray.push(tmp);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/* eslint-enable */
|
|
212
|
+
return deletableStringsArray; // we should do uniq!
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
function removeIndividualInferiorDatafields(record, fix = true) {
|
|
216
|
+
// No $6 nor $8 in field
|
|
217
|
+
const deletableFieldsAsStrings = deriveIndividualDeletables(record);
|
|
218
|
+
const hits = record.fields.filter(field => isDeletableField(field));
|
|
219
|
+
const deletedFieldsAsStrings = hits.map(f => (0, _utils.fieldToString)(f));
|
|
220
|
+
if (fix) {
|
|
221
|
+
// eslint-disable-line functional/no-conditional-statements
|
|
222
|
+
hits.forEach(field => {
|
|
223
|
+
(0, _utils.nvdebug)(`Remove inferior field: ${(0, _utils.fieldToString)(field)}`);
|
|
224
|
+
record.removeField(field);
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
return deletedFieldsAsStrings;
|
|
228
|
+
function isDeletableField(field) {
|
|
229
|
+
const fieldAsString = (0, _utils.fieldToString)(field);
|
|
230
|
+
return deletableFieldsAsStrings.includes(fieldAsString);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
function removeInferiorDatafields(record, fix = true) {
|
|
234
|
+
const removables = removeIndividualInferiorDatafields(record, fix); // Lone fields
|
|
235
|
+
//const removables8 = removeDuplicateSubfield8Chains(record, fix); // Lone subfield $8 chains
|
|
236
|
+
const removables6 = removeInferiorChains(record, fix); // Lone subfield $6 chains
|
|
237
|
+
// HOW TO HANDLE $6+$8 combos?
|
|
238
|
+
|
|
239
|
+
(0, _utils.nvdebug)(`REMOVABLES:\n ${removables.join('\n ')}`);
|
|
240
|
+
(0, _utils.nvdebug)(`REMOVABLES 6:\n ${removables6.join('\n ')}`);
|
|
241
|
+
const removablesAll = removables.concat(removables6); //.concat(removables8);
|
|
242
|
+
|
|
243
|
+
return removablesAll;
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=removeInferiorDataFields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"removeInferiorDataFields.js","names":["_debug","_interopRequireDefault","require","_removeDuplicateDataFields","_subfield6Utils","_utils","_subfield8Utils","obj","__esModule","default","debug","createDebugLogger","_default","description","validate","fix","record","nvdebug","res","message","valid","removeInferiorDatafields","duplicates","length","deriveInferiorChains","fields","deletableStringsObject","forEach","field","fieldDeriveChainDeletables","chain","fieldToChain","chainAsString","fieldsToNormalizedString","tmp","match","replace","isRelevantChain6","fieldHasValidSubfield6","fieldHasValidSubfield8","some","f","subfields","filter","sf","code","tmpInferiorId","result","removeInferiorChains","deletableChainsAsKeys","nChains","Object","keys","deletedStringsArray","innerRemoveInferiorChain","chainContains1XX","tag","substring","sevenToOne","includes","pairs","fieldGetOccurrenceNumberPairs","pairedField","fieldSevenToOneOccurrenceNumber","sameField","triggeringField","triggeringChain","deletedString","fieldsToString","push","currField","removeField","deriveIndividualDeletables","deletableStringsArray","fieldDeriveIndividualDeletables","fieldAsString","fieldToString","removeIndividualInferiorDatafields","deletableFieldsAsStrings","hits","isDeletableField","deletedFieldsAsStrings","map","removables","removables6","join","removablesAll","concat"],"sources":["../src/removeInferiorDataFields.js"],"sourcesContent":["import createDebugLogger from 'debug';\nimport {fieldToChain, sameField} from './removeDuplicateDataFields';\nimport {fieldGetOccurrenceNumberPairs, fieldHasValidSubfield6, fieldSevenToOneOccurrenceNumber, fieldsToNormalizedString} from './subfield6Utils';\nimport {fieldsToString, fieldToString, nvdebug} from './utils';\nimport {fieldHasValidSubfield8} from './subfield8Utils';\n\n// Relocated from melinda-marc-record-merge-reducers (and renamed)\n\n// NB! This validator handles only full fields, and does not support subfield $8 removal.\n// Also, having multiple $8 subfields in same fields is not supported.\n// If this functionality is needed, see removeDuplicateDatafields.js for examples of subfield-only stuff.\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:removeSubsetDataFields');\n\nexport default function () {\n return {\n description: 'Remove subset data fields. Certain exceptions apply, mainly too complited chained fields',\n validate, fix\n };\n\n function fix(record) {\n nvdebug('Fix record: remove subset data fields', debug);\n const res = {message: [], fix: [], valid: true};\n removeInferiorDatafields(record, true);\n // This can not really fail...\n return res;\n }\n\n function validate(record) {\n // Check max, and check number of different indexes\n nvdebug('Validate record: remove subset data fields', debug);\n\n const duplicates = removeInferiorDatafields(record, false);\n\n const res = {message: duplicates};\n\n res.valid = res.message.length < 1; // eslint-disable-line functional/immutable-data\n return res;\n }\n}\n\n\nfunction deriveInferiorChains(fields, record) {\n /* eslint-disable */\n let deletableStringsObject = {};\n\n nvdebug(`WP1: GOT ${fields.length} field(s) for potential deletable chain derivation`);\n fields.forEach(field => fieldDeriveChainDeletables(field));\n\n function fieldDeriveChainDeletables(field) {\n const chain = fieldToChain(field, record);\n if (chain.length === 0) {\n return;\n }\n const chainAsString = fieldsToNormalizedString(chain, 0, true, true);\n\n //nvdebug(`666: ${chainAsString}`);\n\n // Fix MRA-476 (part 1): one $6 value can be worse than the other\n let tmp = chainAsString;\n while (tmp.match(/ ‡6 [0-9X][0-9][0-9]-(?:XX|[0-9]+)\\/[^ ]+/u)) {\n tmp = tmp.replace(/( ‡6 [0-9X][0-9][0-9]-(?:XX|[0-9]+))\\/[^ ]+/u, '$1');\n //nvdebug(`FFS: ${tmp}`);\n deletableStringsObject[tmp] = field;\n }\n\n // Remove keepless versions:\n tmp = chainAsString;\n while (tmp.match(/ ‡9 [A-Z]+<KEEP>/)) {\n tmp = tmp.replace(/ ‡9 [A-Z]+<KEEP>/, '');\n deletableStringsObject[tmp] = field;\n //nvdebug(`FFS: ${tmp}`);\n }\n }\n\n\n /* eslint-enable */\n return deletableStringsObject;\n}\n\nfunction isRelevantChain6(field, record) {\n //Can't be a chain:\n if (!fieldHasValidSubfield6(field) && !fieldHasValidSubfield8(field)) {\n return false;\n }\n // Too short to be a chain:\n const chain = fieldToChain(field, record);\n if (chain.length < 2) {\n return false;\n }\n // No field can contains no more than one subfield $6\n if (chain.some(f => f.subfields.filter(sf => sf.code === '6').length > 1)) {\n return false;\n }\n\n // Chainwise non-initial fields are not relevant as chains is handled through the initial/head field\n /* eslint-disable */\n field.tmpInferiorId = 666;\n const result = chain[0].tmpInferiorId === 666 ? true : false;\n delete field.tmpInferiorId;\n /* eslint-enable */\n return result;\n}\n\nexport function removeInferiorChains(record, fix = true) {\n const fields = record.fields.filter(f => isRelevantChain6(f, record));\n //nvdebug(`WP2.0: GOT ${fields.length} chain(s)`);\n\n const deletableChainsAsKeys = deriveInferiorChains(fields, record);\n const nChains = Object.keys(deletableChainsAsKeys).length;\n //nvdebug(`WP2: GOT ${nChains} chain(s)`);\n if (nChains === 0) {\n return [];\n }\n\n nvdebug(`removeInferiorChains() has ${fields.length} fields-in-chain(s), and a list of ${nChains} deletable(s)`);\n\n\n /* eslint-disable */\n\n let deletedStringsArray = [];\n fields.forEach(f => innerRemoveInferiorChain(f));\n\n function chainContains1XX(chain) {\n return chain.some(f => f.tag.substring(0, 1) === '1');\n }\n\n function sevenToOne(field, chain) {\n if (!['700', '710', '711', '730'].includes(field.tag)) {\n return;\n }\n // Retag field 7XX as 1XX and fix corresponding occurrence numbers as well:\n const pairs = fieldGetOccurrenceNumberPairs(field, chain);\n field.tag = `1${field.tag.substring(1)}`; // eslint-disable-line functional/immutable-data\n // There should always be one pair, but I'm not sanity-checking this\n pairs.forEach(pairedField => fieldSevenToOneOccurrenceNumber(pairedField));\n }\n\n function innerRemoveInferiorChain(field) {\n const chain = fieldToChain(field, record);\n if (chain.length === 0 || !sameField(field, chain[0])) {\n return;\n }\n\n // Better to keep inferior 1XX (vs better 7XX) than to delete 1XX!\n if(chain.some(f => f.tag.substring(0, 1) === '1')) {\n return;\n }\n\n const chainAsString = fieldsToNormalizedString(chain, 0, true, true);\n if (chainAsString in deletableChainsAsKeys) {\n const triggeringField = deletableChainsAsKeys[chainAsString];\n const triggeringChain = fieldToChain(triggeringField, record);\n\n // 1XX may be converted to XXX. However, it should not be removed.\n // Better to keep inferior 1XX (vs better 7XX) than to delete 1XX!\n if(chainContains1XX(chain)) {\n if (chainContains1XX(triggeringChain)) {\n // This should *never* happen, but keep this as a sanity check\n return;\n }\n triggeringChain.forEach(f => sevenToOne(f, triggeringChain));\n }\n nvdebug(`iRIS6C: ${chainAsString}`);\n const deletedString = fieldsToString(chain);\n const message = `DEL: '${deletedString}' REASON: '${fieldsToString(triggeringChain)}'`;\n deletedStringsArray.push(message);\n if (fix) {\n nvdebug(`INFERIOR $6 CHAIN REMOVAL: ${message}}`, debug);\n chain.forEach(currField => record.removeField(currField));\n }\n }\n }\n\n /* eslint-enable */\n return deletedStringsArray;\n}\n\nfunction deriveIndividualDeletables(record) {\n /* eslint-disable */\n let deletableStringsArray = [];\n\n record.fields.forEach(field => fieldDeriveIndividualDeletables(field));\n\n function fieldDeriveIndividualDeletables(field) {\n const fieldAsString = fieldToString(field);\n\n // Proof-of-concept rule:\n let tmp = fieldAsString;\n if (field.tag.match(/^[1678]00$/u)) {\n while (tmp.match(/, ‡e [^‡]+\\.$/)) {\n tmp = tmp.replace(/, ‡e [^‡]+\\.$/, '.');\n deletableStringsArray.push(tmp);\n }\n }\n // MET-381: remove occurence number TAG-00, if TAG-NN existists\n if (field.tag === '880') {\n tmp = fieldAsString;\n if (tmp.match(/ ‡6 [0-9][0-9][0-9]-([?:1-9][0-9]|0[1-9])/)) {\n tmp = tmp.replace(/( ‡6 [0-9][0-9][0-9])-[0-9]+/, '$1-00');\n nvdebug(`MET-381: ADD TO DELETABLES: ${tmp}`);\n deletableStringsArray.push(tmp);\n if (tmp.match(/ ‡6 [0-9][0-9][0-9]-00\\/[^ ]+ /)) {\n tmp = tmp.replace(/( ‡6 [0-9][0-9][0-9]-00)[^ ]+/, '$1');\n nvdebug(`MET-381: ADD TO DELETABLES: ${tmp}`);\n deletableStringsArray.push(tmp);\n }\n }\n }\n\n\n\n // Remove keepless versions:\n tmp = fieldAsString;\n while (tmp.match(/ ‡9 [A-Z]+<KEEP>/)) {\n tmp = tmp.replace(/ ‡9 [A-Z]+<KEEP>/, '');\n deletableStringsArray.push(tmp);\n }\n }\n /* eslint-enable */\n return deletableStringsArray; // we should do uniq!\n\n}\n\n\nexport function removeIndividualInferiorDatafields(record, fix = true) { // No $6 nor $8 in field\n const deletableFieldsAsStrings = deriveIndividualDeletables(record);\n const hits = record.fields.filter(field => isDeletableField(field));\n\n const deletedFieldsAsStrings = hits.map(f => fieldToString(f));\n\n if (fix) { // eslint-disable-line functional/no-conditional-statements\n hits.forEach(field => {\n nvdebug(`Remove inferior field: ${fieldToString(field)}`);\n record.removeField(field);\n });\n }\n\n return deletedFieldsAsStrings;\n\n function isDeletableField(field) {\n const fieldAsString = fieldToString(field);\n return deletableFieldsAsStrings.includes(fieldAsString);\n }\n}\n\n\nexport function removeInferiorDatafields(record, fix = true) {\n const removables = removeIndividualInferiorDatafields(record, fix); // Lone fields\n //const removables8 = removeDuplicateSubfield8Chains(record, fix); // Lone subfield $8 chains\n const removables6 = removeInferiorChains(record, fix); // Lone subfield $6 chains\n // HOW TO HANDLE $6+$8 combos?\n\n nvdebug(`REMOVABLES:\\n ${removables.join('\\n ')}`);\n nvdebug(`REMOVABLES 6:\\n ${removables6.join('\\n ')}`);\n\n const removablesAll = removables.concat(removables6); //.concat(removables8);\n\n return removablesAll;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _chai = require("chai");
|
|
4
|
+
var _marcRecord = require("@natlibfi/marc-record");
|
|
5
|
+
var _removeInferiorDataFields = _interopRequireDefault(require("./removeInferiorDataFields"));
|
|
6
|
+
var _fixura = require("@natlibfi/fixura");
|
|
7
|
+
var _fixugen = _interopRequireDefault(require("@natlibfi/fixugen"));
|
|
8
|
+
var _debug = _interopRequireDefault(require("debug"));
|
|
9
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
+
(0, _fixugen.default)({
|
|
11
|
+
callback,
|
|
12
|
+
path: [__dirname, '..', 'test-fixtures', 'remove-inferior-datafields'],
|
|
13
|
+
useMetadataFile: true,
|
|
14
|
+
recurse: false,
|
|
15
|
+
fixura: {
|
|
16
|
+
reader: _fixura.READERS.JSON
|
|
17
|
+
},
|
|
18
|
+
mocha: {
|
|
19
|
+
before: () => testValidatorFactory()
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
const debug = (0, _debug.default)('@natlibfi/marc-record-validators-melinda/removeInferiorDataFields:test');
|
|
23
|
+
async function testValidatorFactory() {
|
|
24
|
+
const validator = await (0, _removeInferiorDataFields.default)();
|
|
25
|
+
(0, _chai.expect)(validator).to.be.an('object').that.has.any.keys('description', 'validate');
|
|
26
|
+
(0, _chai.expect)(validator.description).to.be.a('string');
|
|
27
|
+
(0, _chai.expect)(validator.validate).to.be.a('function');
|
|
28
|
+
}
|
|
29
|
+
async function callback({
|
|
30
|
+
getFixture,
|
|
31
|
+
enabled = true,
|
|
32
|
+
fix = false
|
|
33
|
+
}) {
|
|
34
|
+
if (enabled === false) {
|
|
35
|
+
debug('TEST SKIPPED!');
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const validator = await (0, _removeInferiorDataFields.default)();
|
|
39
|
+
const record = new _marcRecord.MarcRecord(getFixture('record.json'));
|
|
40
|
+
const expectedResult = getFixture('expectedResult.json');
|
|
41
|
+
// console.log(expectedResult); // eslint-disable-line
|
|
42
|
+
|
|
43
|
+
if (!fix) {
|
|
44
|
+
const result = await validator.validate(record);
|
|
45
|
+
(0, _chai.expect)(result).to.eql(expectedResult);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
await validator.fix(record);
|
|
49
|
+
(0, _chai.expect)(record).to.eql(expectedResult);
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=removeInferiorDataFields.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"removeInferiorDataFields.spec.js","names":["_chai","require","_marcRecord","_removeInferiorDataFields","_interopRequireDefault","_fixura","_fixugen","_debug","obj","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","debug","createDebugLogger","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","getFixture","enabled","fix","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/removeInferiorDataFields.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './removeInferiorDataFields';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\nimport createDebugLogger from 'debug';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'remove-inferior-datafields'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/removeInferiorDataFields:test');\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n}\n\nasync function callback({getFixture, enabled = true, fix = false}) {\n if (enabled === false) {\n debug('TEST SKIPPED!');\n return;\n }\n\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,yBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AACA,IAAAM,MAAA,GAAAH,sBAAA,CAAAH,OAAA;AAAsC,SAAAG,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEtC,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,4BAA4B,CAAC;EACtEC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AACF,MAAMC,KAAK,GAAG,IAAAC,cAAiB,EAAC,wEAAwE,CAAC;AAEzG,eAAeF,oBAAoBA,CAAA,EAAG;EACpC,MAAMG,SAAS,GAAG,MAAM,IAAAC,iCAAgB,EAAC,CAAC;EAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAChD;AAEA,eAAezB,QAAQA,CAAC;EAAC2B,UAAU;EAAEC,OAAO,GAAG,IAAI;EAAEC,GAAG,GAAG;AAAK,CAAC,EAAE;EACjE,IAAID,OAAO,KAAK,KAAK,EAAE;IACrBhB,KAAK,CAAC,eAAe,CAAC;IACtB;EACF;EAEA,MAAME,SAAS,GAAG,MAAM,IAAAC,iCAAgB,EAAC,CAAC;EAC1C,MAAMe,MAAM,GAAG,IAAIC,sBAAU,CAACJ,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMK,cAAc,GAAGL,UAAU,CAAC,qBAAqB,CAAC;EACxD;;EAEA,IAAI,CAACE,GAAG,EAAE;IACR,MAAMI,MAAM,GAAG,MAAMnB,SAAS,CAACY,QAAQ,CAACI,MAAM,CAAC;IAC/C,IAAAd,YAAM,EAACiB,MAAM,CAAC,CAAChB,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMlB,SAAS,CAACe,GAAG,CAACC,MAAM,CAAC;EAC3B,IAAAd,YAAM,EAACc,MAAM,CAAC,CAACb,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;AACvC"}
|
|
@@ -1,32 +1,113 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = _default;
|
|
7
|
+
var _xml2js = require("xml2js");
|
|
8
|
+
var _nodeFetch = _interopRequireDefault(require("node-fetch"));
|
|
9
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
+
function _default({
|
|
11
|
+
endpoint,
|
|
12
|
+
prefixPattern,
|
|
13
|
+
fields
|
|
14
|
+
}) {
|
|
15
|
+
if (typeof endpoint === 'string' && prefixPattern instanceof RegExp && typeof fields === 'object') {
|
|
16
|
+
return {
|
|
17
|
+
description: 'Checks if Melinda entity references are resolvable',
|
|
18
|
+
validate
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
throw new Error('Error in validation parameters');
|
|
22
|
+
async function validate(record) {
|
|
23
|
+
const validateResult = await validateRecord(record);
|
|
24
|
+
return validateResult;
|
|
25
|
+
}
|
|
26
|
+
function validateRecord(record) {
|
|
27
|
+
const removedPrefixes = [];
|
|
28
|
+
|
|
29
|
+
// Filter matching field keys from record.fields
|
|
30
|
+
const subfields = record.fields.reduce((prev, current) => {
|
|
31
|
+
Object.keys(fields).forEach(key => {
|
|
32
|
+
if (key === current.tag) {
|
|
33
|
+
// eslint-disable-line functional/no-conditional-statements
|
|
34
|
+
prev.push(current); // eslint-disable-line functional/immutable-data
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
return prev;
|
|
39
|
+
}, []);
|
|
40
|
+
|
|
41
|
+
// Filter matching objects from subfields
|
|
42
|
+
const matchingTags = [...subfields].reduce((prev, current) => {
|
|
43
|
+
Object.keys(fields).forEach(key => {
|
|
44
|
+
if (key === current.tag) {
|
|
45
|
+
// eslint-disable-line functional/no-conditional-statements
|
|
46
|
+
current.subfields.filter(item => {
|
|
47
|
+
if (Object.values(fields[key]).filter(value => value === item.code)[0]) {
|
|
48
|
+
// eslint-disable-line functional/no-conditional-statements
|
|
49
|
+
prev.push({
|
|
50
|
+
tag: current.tag,
|
|
51
|
+
code: item.code,
|
|
52
|
+
value: item.value
|
|
53
|
+
}); // eslint-disable-line functional/immutable-data
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return prev;
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
return prev;
|
|
61
|
+
}, []);
|
|
62
|
+
|
|
63
|
+
// Matching prefixPattern is removed from object value field.
|
|
64
|
+
matchingTags.forEach(obj => {
|
|
65
|
+
if (prefixPattern.test(obj.value)) {
|
|
66
|
+
// eslint-disable-line functional/no-conditional-statements
|
|
67
|
+
obj.value = obj.value.replace(prefixPattern, ''); // eslint-disable-line functional/immutable-data
|
|
68
|
+
removedPrefixes.push(obj); // eslint-disable-line functional/immutable-data
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
return resolveValidation(removedPrefixes);
|
|
73
|
+
}
|
|
74
|
+
function resolveValidation(removedPrefixes) {
|
|
75
|
+
// If matching prefixPatterns found make an API call
|
|
76
|
+
if (removedPrefixes.length > 0) {
|
|
77
|
+
return validateMatchingTags(removedPrefixes).then(result => result);
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
valid: true,
|
|
81
|
+
messages: []
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
async function validateMatchingTags(tags) {
|
|
85
|
+
const resolved = await Promise.all(tags.map(obj => getData(obj.value).then(valid => ({
|
|
86
|
+
valid,
|
|
87
|
+
...obj
|
|
88
|
+
}))));
|
|
89
|
+
if (resolved.every(value => value.valid === true)) {
|
|
90
|
+
return {
|
|
91
|
+
valid: true,
|
|
92
|
+
messages: []
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
return {
|
|
96
|
+
valid: false,
|
|
97
|
+
messages: resolved.map(obj => `Field ${obj.tag}$${obj.code} with value ${obj.value} is not resolvable`)
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
async function getData(recID) {
|
|
101
|
+
const queryParam = '?operation=searchRetrieve&maximumRecords=2&version=1&query=rec.id=';
|
|
102
|
+
const response = await (0, _nodeFetch.default)(`${endpoint}${queryParam}${recID}`);
|
|
103
|
+
const xml = await response.text();
|
|
104
|
+
return new Promise(resolve => {
|
|
105
|
+
(0, _xml2js.parseString)(xml, (err, result) => {
|
|
106
|
+
const record = result['zs:searchRetrieveResponse']['zs:records'].slice(-1)?.[0];
|
|
107
|
+
const position = parseInt(record?.['zs:record'].slice(-1)?.[0]['zs:recordPosition'][0], 10);
|
|
108
|
+
resolve(position === 1 && !err);
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
}
|
|
32
113
|
//# sourceMappingURL=resolvable-ext-references-melinda.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"resolvable-ext-references-melinda.js","names":["_xml2js","require","_nodeFetch","_interopRequireDefault","obj","__esModule","default","_default","endpoint","prefixPattern","fields","RegExp","description","validate","Error","record","validateResult","validateRecord","removedPrefixes","subfields","reduce","prev","current","Object","keys","forEach","key","tag","push","matchingTags","filter","item","values","value","code","test","replace","resolveValidation","length","validateMatchingTags","then","result","valid","messages","tags","resolved","Promise","all","map","getData","every","recID","queryParam","response","fetch","xml","text","resolve","parseString","err","slice","position","parseInt"],"sources":["../src/resolvable-ext-references-melinda.js"],"sourcesContent":["import {parseString} from 'xml2js';\nimport fetch from 'node-fetch';\n\nexport default function ({endpoint, prefixPattern, fields}) {\n if (typeof endpoint === 'string' && prefixPattern instanceof RegExp && typeof fields === 'object') {\n return {\n description: 'Checks if Melinda entity references are resolvable',\n validate\n };\n }\n\n throw new Error('Error in validation parameters');\n\n async function validate(record) {\n const validateResult = await validateRecord(record);\n return validateResult;\n }\n\n function validateRecord(record) {\n const removedPrefixes = [];\n\n // Filter matching field keys from record.fields\n const subfields = record.fields.reduce((prev, current) => {\n Object.keys(fields).forEach(key => {\n if (key === current.tag) { // eslint-disable-line functional/no-conditional-statements\n prev.push(current); // eslint-disable-line functional/immutable-data\n }\n });\n return prev;\n }, []);\n\n // Filter matching objects from subfields\n const matchingTags = [...subfields].reduce((prev, current) => {\n Object.keys(fields).forEach(key => {\n if (key === current.tag) { // eslint-disable-line functional/no-conditional-statements\n current.subfields.filter(item => {\n if (Object.values(fields[key]).filter(value => value === item.code)[0]) { // eslint-disable-line functional/no-conditional-statements\n prev.push({tag: current.tag, code: item.code, value: item.value}); // eslint-disable-line functional/immutable-data\n }\n\n return prev;\n });\n }\n });\n return prev;\n }, []);\n\n // Matching prefixPattern is removed from object value field.\n matchingTags.forEach(obj => {\n if (prefixPattern.test(obj.value)) { // eslint-disable-line functional/no-conditional-statements\n obj.value = obj.value.replace(prefixPattern, ''); // eslint-disable-line functional/immutable-data\n removedPrefixes.push(obj); // eslint-disable-line functional/immutable-data\n }\n });\n return resolveValidation(removedPrefixes);\n }\n\n function resolveValidation(removedPrefixes) {\n // If matching prefixPatterns found make an API call\n if (removedPrefixes.length > 0) {\n return validateMatchingTags(removedPrefixes).then(result => result);\n }\n\n return {valid: true, messages: []};\n }\n\n async function validateMatchingTags(tags) {\n const resolved = await Promise.all(tags.map(obj => getData(obj.value).then(valid => ({valid, ...obj}))));\n\n if (resolved.every(value => value.valid === true)) {\n return {valid: true, messages: []};\n }\n\n return {valid: false, messages: resolved.map(obj => `Field ${obj.tag}$${obj.code} with value ${obj.value} is not resolvable`)};\n }\n\n async function getData(recID) {\n const queryParam = '?operation=searchRetrieve&maximumRecords=2&version=1&query=rec.id=';\n\n const response = await fetch(`${endpoint}${queryParam}${recID}`);\n\n const xml = await response.text();\n\n return new Promise(resolve => {\n parseString(xml, (err, result) => {\n const record = result['zs:searchRetrieveResponse']['zs:records'].slice(-1)?.[0];\n const position = parseInt(record?.['zs:record'].slice(-1)?.[0]['zs:recordPosition'][0], 10);\n resolve(position === 1 && !err);\n });\n });\n }\n}\n"],"mappings":"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"}
|