@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/subfield-exclusion.spec.js"],"names":["expect","chai","use","chaiAsPromised","describe","it","config","tag","subfields","code","validator","to","be","an","that","has","any","keys","description","a","validate","ind2","value","rejectedWith","Error","unidentified","recordValid","MarcRecord","leader","fields","ind1","recordInvalid","recordInvalidFixed","result","eql","valid","message","fix","equalsTo","configInd","recordIndInvalid","recordIndInvalidFixed"],"mappings":"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","file":"subfield-exclusion.spec.js","sourcesContent":["/**\n *\n * @licstart The following is the entire license notice for the JavaScript code in this file.\n *\n * MARC record validators used in Melinda\n *\n * Copyright (C) 2014-2018 University Of Helsinki (The National Library Of Finland)\n *\n * This file is part of marc-record-validators-melinda\n *\n * marc-record-validators-melinda program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * marc-record-validators-melinda is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n * @licend The above is the entire license notice\n * for the JavaScript code in this file.\n *\n */\n\n/* eslint-disable no-undef, max-nested-callbacks, no-unused-expressions */\n\n'use strict';\n\nimport chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/subfield-exclusion';\n\nconst {expect} = chai;\nchai.use(chaiAsPromised);\n\n// Factory validation\ndescribe('subfield-exclusion', () => {\n\tdescribe('#validate: Check configuration validation', () => {\n\t\tit('Creates a validator from simple config', async () => {\n\t\t\tconst config = [{\n\t\t\t\ttag: /^500$/,\n\t\t\t\tsubfields: [{code: /4/}]\n\t\t\t}];\n\n\t\t\tconst validator = await validatorFactory(config);\n\t\t\texpect(validator)\n\t\t\t\t.to.be.an('object')\n\t\t\t\t.that.has.any.keys('description', 'validate');\n\n\t\t\texpect(validator.description).to.be.a('string');\n\t\t\texpect(validator.validate).to.be.a('function');\n\t\t});\n\n\t\tit('Creates a validator from complex config', async () => {\n\t\t\tconst config = [{\n\t\t\t\ttag: /^210$/,\n\t\t\t\tind2: /\\s/,\n\t\t\t\tsubfields: [{\n\t\t\t\t\tcode: /2/,\n\t\t\t\t\tvalue: /.+/\n\t\t\t\t}]\n\t\t\t}];\n\n\t\t\tconst validator = await validatorFactory(config);\n\t\t\texpect(validator)\n\t\t\t\t.to.be.an('object')\n\t\t\t\t.that.has.any.keys('description', 'validate');\n\n\t\t\texpect(validator.description).to.be.a('string');\n\t\t\texpect(validator.validate).to.be.a('function');\n\t\t});\n\n\t\tit('Fails to create a validator from invalid config - subfields missing', async () => {\n\t\t\tconst config = [{\n\t\t\t\ttag: /^210$/\n\t\t\t}];\n\n\t\t\tawait expect(validatorFactory(config)).to.be.rejectedWith(Error, 'Configuration not valid - missing mandatory element: subfields');\n\t\t});\n\n\t\tit('Fails to create a validator from invalid config - tag', async () => {\n\t\t\tconst config = [{\n\t\t\t\ttag: '500',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: /9/, value: /^(?!FENNI<KEEP>).*$/}\n\t\t\t\t]\n\t\t\t}];\n\n\t\t\tawait expect(validatorFactory(config)).to.be.rejectedWith(Error, 'Configuration not valid - invalid data type for: tag');\n\t\t});\n\n\t\tit('Fails to create a validator from invalid config - missing array', async () => {\n\t\t\tconst config = {\n\t\t\t\ttag: '500',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: /9/, value: /^(?!FENNI<KEEP>).*$/}\n\t\t\t\t]\n\t\t\t};\n\n\t\t\tawait expect(validatorFactory(config)).to.be.rejectedWith(Error, 'Configuration array not provided');\n\t\t});\n\n\t\tit('Fails to create a validator from invalid config - code', async () => {\n\t\t\tconst config = [{\n\t\t\t\ttag: /^500$/,\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 9, value: /^(?!FENNI<KEEP>).*$/}\n\t\t\t\t]\n\t\t\t}];\n\n\t\t\tawait expect(validatorFactory(config)).to.be.rejectedWith(Error, 'Configuration not valid - invalid data type for: code');\n\t\t});\n\n\t\tit('Fails to create a validator from invalid config - value', async () => {\n\t\t\tconst config = [{\n\t\t\t\ttag: /^500$/,\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: /9/, value: 'Fenni'}\n\t\t\t\t]\n\t\t\t}];\n\n\t\t\tawait expect(validatorFactory(config)).to.be.rejectedWith(Error, 'Configuration not valid - invalid data type for: value');\n\t\t});\n\n\t\tit('Fails to create a validator from invalid config - missing mandatory: tag', async () => {\n\t\t\tconst config = [{\n\t\t\t\tvalue: /^500$/,\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: /9/, value: /^(?!FENNI<KEEP>).*$/}\n\t\t\t\t]\n\t\t\t}];\n\n\t\t\tawait expect(validatorFactory(config)).to.be.rejectedWith(Error, 'Configuration not valid - missing mandatory element: tag');\n\t\t});\n\n\t\tit('Fails to create a validator from invalid config - missing mandatory: tag', async () => {\n\t\t\tconst config = [{\n\t\t\t\tvalue: /^500$/,\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: /9/, value: /^(?!FENNI<KEEP>).*$/}\n\t\t\t\t]\n\t\t\t}];\n\n\t\t\tawait expect(validatorFactory(config)).to.be.rejectedWith(Error, 'Configuration not valid - missing mandatory element: tag');\n\t\t});\n\n\t\tit('Fails to create a validator from invalid config - subfield not object: array', async () => {\n\t\t\tconst config = [{\n\t\t\t\ttag: /^500$/,\n\t\t\t\tsubfields: [\n\t\t\t\t\t['/9/', '/^(?!FENNI<KEEP>).*$/'],\n\t\t\t\t\t{value: /^(?!FENNI<KEEP>).*$/}\n\t\t\t\t]\n\t\t\t}];\n\n\t\t\tawait expect(validatorFactory(config)).to.be.rejectedWith(Error, 'Configuration not valid - subfield: /9/,/^(?!FENNI<KEEP>).*$/ not object');\n\t\t});\n\n\t\tit('Fails to create a validator from invalid config - subfield not object: string', async () => {\n\t\t\tconst config = [{\n\t\t\t\ttag: /^500$/,\n\t\t\t\tsubfields: [\n\t\t\t\t\t'/9/',\n\t\t\t\t\t'/^(?!FENNI<KEEP>).*$/',\n\t\t\t\t\t{value: /^(?!FENNI<KEEP>).*$/}\n\t\t\t\t]\n\t\t\t}];\n\n\t\t\tawait expect(validatorFactory(config)).to.be.rejectedWith(Error, 'Configuration not valid - subfield: /9/ not object');\n\t\t});\n\n\t\tit('Fails to create a validator from invalid config - missing mandatory: subfield.code', async () => {\n\t\t\tconst config = [{\n\t\t\t\ttag: /^500$/,\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: /9/, value: /^(?!FENNI<KEEP>).*$/},\n\t\t\t\t\t{value: /^(?!FENNI<KEEP>).*$/}\n\t\t\t\t]\n\t\t\t}];\n\n\t\t\tawait expect(validatorFactory(config)).to.be.rejectedWith(Error, 'Configuration not valid - missing mandatory element: code');\n\t\t});\n\n\t\tit('Fails to create a validator from invalid config - unidentified field: unidentified', async () => {\n\t\t\tconst config = [{\n\t\t\t\ttag: /^500$/,\n\t\t\t\tunidentified: /^500$/,\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: /9/, value: /^(?!FENNI<KEEP>).*$/},\n\t\t\t\t\t{value: /^(?!FENNI<KEEP>).*$/}\n\t\t\t\t]\n\t\t\t}];\n\n\t\t\tawait expect(validatorFactory(config)).to.be.rejectedWith(Error, 'Configuration not valid - unidentified value: unidentified');\n\t\t});\n\t});\n\n\t// Simple configuration https://github.com/NatLibFi/marc-record-validators-melinda/issues/46\n\tdescribe('#validate: Simple configuration (spec)', () => {\n\t\tconst config = [{\n\t\t\ttag: /^100$/,\n\t\t\tsubfields: [{code: /4/}]\n\t\t}];\n\n\t\tconst recordValid = new MarcRecord({\n\t\t\tleader: 'foo',\n\t\t\tfields: [{\n\t\t\t\ttag: '100',\n\t\t\t\tind1: ' ',\n\t\t\t\tind2: ' ',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Foo Bar'}\n\t\t\t\t]\n\t\t\t}, {\n\t\t\t\ttag: '245',\n\t\t\t\tind1: ' ',\n\t\t\t\tind2: ' ',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Fubar'}\n\t\t\t\t]\n\t\t\t}]\n\t\t});\n\n\t\tconst recordInvalid = new MarcRecord({\n\t\t\tleader: 'foo',\n\t\t\tfields: [{\n\t\t\t\ttag: '100',\n\t\t\t\tind1: ' ',\n\t\t\t\tind2: ' ',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Foo Bar'},\n\t\t\t\t\t{code: '4', value: 'att'}\n\t\t\t\t]\n\t\t\t}, {\n\t\t\t\ttag: '245',\n\t\t\t\tind1: ' ',\n\t\t\t\tind2: ' ',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Fubar'}\n\t\t\t\t]\n\t\t\t}]\n\t\t});\n\n\t\tconst recordInvalidFixed = new MarcRecord({\n\t\t\tleader: 'foo',\n\t\t\tfields: [{\n\t\t\t\ttag: '100',\n\t\t\t\tind1: ' ',\n\t\t\t\tind2: ' ',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Foo Bar'}\n\t\t\t\t]\n\t\t\t}, {\n\t\t\t\ttag: '245',\n\t\t\t\tind1: ' ',\n\t\t\t\tind2: ' ',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Fubar'}\n\t\t\t\t]\n\t\t\t}]\n\t\t});\n\n\t\tit('Finds the record valid (spec)', async () => {\n\t\t\tconst validator = await validatorFactory(config);\n\t\t\tconst result = await validator.validate(recordValid);\n\t\t\texpect(result).to.eql({valid: true, message: []});\n\t\t});\n\n\t\tit('Finds the record invalid (spec)', async () => {\n\t\t\tconst validator = await validatorFactory(config);\n\t\t\tconst result = await validator.validate(recordInvalid);\n\t\t\texpect(result).to.eql({valid: false, message: ['Subfield $100$$4should be excluded']});\n\t\t});\n\n\t\tit('Repairs invalid record', async () => {\n\t\t\tconst validator = await validatorFactory(config);\n\t\t\tawait validator.fix(recordInvalid);\n\t\t\texpect(recordInvalid.equalsTo(recordInvalidFixed)).to.eql(true);\n\t\t});\n\t});\n\n\t// Complex configuration https://github.com/NatLibFi/marc-record-validators-melinda/issues/46\n\tdescribe('#validate: Complex configuration (spec)', () => {\n\t\tconst config = [{\n\t\t\ttag: /^210$/,\n\t\t\tind2: /\\s/,\n\t\t\tsubfields: [\n\t\t\t\t{code: /2/, value: /.+/}\n\t\t\t]\n\t\t}];\n\n\t\tconst recordValid = new MarcRecord({\n\t\t\tleader: 'foo',\n\t\t\tfields: [{\n\t\t\t\ttag: '210',\n\t\t\t\tind1: ' ',\n\t\t\t\tind2: ' ',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Foo'}\n\t\t\t\t]\n\t\t\t}, {\n\t\t\t\ttag: '245',\n\t\t\t\tind1: ' ',\n\t\t\t\tind2: ' ',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Fubar'}\n\t\t\t\t]\n\t\t\t}]\n\t\t});\n\n\t\tconst recordInvalid = new MarcRecord({\n\t\t\tleader: 'foo',\n\t\t\tfields: [{\n\t\t\t\ttag: '210',\n\t\t\t\tind1: ' ',\n\t\t\t\tind2: ' ',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Foo'},\n\t\t\t\t\t{code: '2', value: 'dnlm'}\n\t\t\t\t]\n\t\t\t}, {\n\t\t\t\ttag: '245',\n\t\t\t\tind1: ' ',\n\t\t\t\tind2: ' ',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Fubar'}\n\t\t\t\t]\n\t\t\t}]\n\t\t});\n\n\t\tconst recordInvalidFixed = new MarcRecord({\n\t\t\tleader: 'foo',\n\t\t\tfields: [{\n\t\t\t\ttag: '210',\n\t\t\t\tind1: ' ',\n\t\t\t\tind2: ' ',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Foo'}\n\t\t\t\t]\n\t\t\t}, {\n\t\t\t\ttag: '245',\n\t\t\t\tind1: ' ',\n\t\t\t\tind2: ' ',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Fubar'}\n\t\t\t\t]\n\t\t\t}]\n\t\t});\n\n\t\tit('Finds the record valid (spec)', async () => {\n\t\t\tconst validator = await validatorFactory(config);\n\t\t\tconst result = await validator.validate(recordValid);\n\t\t\texpect(result).to.eql({valid: true, message: []});\n\t\t});\n\n\t\tit('Finds the record invalid (spec)', async () => {\n\t\t\tconst validator = await validatorFactory(config);\n\t\t\tconst result = await validator.validate(recordInvalid);\n\t\t\texpect(result).to.eql({valid: false, message: ['Subfield $210$$2should be excluded']});\n\t\t});\n\n\t\tit('Repairs invalid record', async () => {\n\t\t\tconst validator = await validatorFactory(config);\n\t\t\tawait validator.fix(recordInvalid);\n\t\t\texpect(recordInvalid.equalsTo(recordInvalidFixed)).to.eql(true);\n\t\t});\n\t});\n\n\t// More special cases to increase coverage\n\tdescribe('#validate: Custom configuration', () => {\n\t\tconst configInd = [{\n\t\t\ttag: /^500$/,\n\t\t\tind1: /^8$/,\n\t\t\tind2: /^4$/,\n\t\t\tsubfields: [\n\t\t\t\t{code: /2/, value: /.+/}\n\t\t\t]\n\t\t}];\n\n\t\tconst recordValid = new MarcRecord({\n\t\t\tleader: 'foo',\n\t\t\tfields: [{\n\t\t\t\ttag: '210',\n\t\t\t\tind1: ' ',\n\t\t\t\tind2: ' ',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Foo'}\n\t\t\t\t]\n\t\t\t}, {\n\t\t\t\ttag: '500',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Foo'},\n\t\t\t\t\t{code: '2', value: 'dnlm'}\n\t\t\t\t]\n\t\t\t}]\n\t\t});\n\n\t\tconst recordIndInvalid = new MarcRecord({\n\t\t\tleader: 'foo',\n\t\t\tfields: [{\n\t\t\t\ttag: '245',\n\t\t\t\tind1: ' ',\n\t\t\t\tind2: ' ',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Fubar'}\n\t\t\t\t]\n\t\t\t}, {\n\t\t\t\ttag: '500',\n\t\t\t\tind1: '8',\n\t\t\t\tind2: '4',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Foo'},\n\t\t\t\t\t{code: '2', value: 'dnlm'}\n\t\t\t\t]\n\t\t\t}]\n\t\t});\n\n\t\tconst recordIndInvalidFixed = new MarcRecord({\n\t\t\tleader: 'foo',\n\t\t\tfields: [{\n\t\t\t\ttag: '245',\n\t\t\t\tind1: ' ',\n\t\t\t\tind2: ' ',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Fubar'}\n\t\t\t\t]\n\t\t\t}, {\n\t\t\t\ttag: '500',\n\t\t\t\tind1: '8',\n\t\t\t\tind2: '4',\n\t\t\t\tsubfields: [\n\t\t\t\t\t{code: 'a', value: 'Foo'}\n\t\t\t\t]\n\t\t\t}]\n\t\t});\n\n\t\tit('Finds the record valid - Ind1&Ind2', async () => {\n\t\t\tconst validator = await validatorFactory(configInd);\n\t\t\tconst result = await validator.validate(recordValid);\n\t\t\texpect(result).to.eql({valid: true, message: []});\n\t\t});\n\n\t\tit('Finds the record invalid - Ind', async () => {\n\t\t\tconst validator = await validatorFactory(configInd);\n\t\t\tconst result = await validator.validate(recordIndInvalid);\n\t\t\texpect(result).to.eql({valid: false, message: ['Subfield $500$$2should be excluded']});\n\t\t});\n\n\t\tit('Repairs invalid record', async () => {\n\t\t\tconst validator = await validatorFactory(configInd);\n\t\t\tawait validator.fix(recordIndInvalid);\n\t\t\texpect(recordIndInvalid.equalsTo(recordIndInvalidFixed)).to.eql(true);\n\t\t});\n\t});\n});\n"]}
|
|
1
|
+
{"version":3,"file":"subfield-exclusion.spec.js","names":["_chai","require","_marcRecord","_subfieldExclusion","_interopRequireDefault","obj","__esModule","default","describe","it","config","tag","subfields","code","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","ind2","value","error","with","property","unidentified","recordValid","MarcRecord","leader","fields","ind1","recordInvalid","recordInvalidFixed","result","eql","valid","message","fix","equalsTo","recordOriginal","recordModified","configInd","recordIndInvalid","recordIndInvalidFixed"],"sources":["../src/subfield-exclusion.spec.js"],"sourcesContent":["import {expect} from 'chai';\n//import chaiAsPromised from 'chai-as-promised';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/subfield-exclusion';\n\n//chai.use(chaiAsPromised);\n\n// Factory validation\ndescribe('subfield-exclusion', () => {\n describe('#validate: Check configuration validation', () => {\n it('Creates a validator from simple config', async () => {\n const config = [\n {\n tag: /^500$/u,\n subfields: [{code: /4/u}]\n }\n ];\n\n const validator = await validatorFactory(config);\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\n it('Creates a validator from complex config', async () => {\n const config = [\n {\n tag: /^210$/u,\n ind2: /\\s/u,\n subfields: [\n {\n code: /2/u,\n value: /.+/u\n }\n ]\n }\n ];\n\n const validator = await validatorFactory(config);\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\n it('Fails to create a validator from invalid config - subfields missing', () => {\n const config = [\n {\n tag: /^210$/u\n }\n ];\n\n try {\n validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - missing mandatory element: subfields');\n }\n });\n\n it('Fails to create a validator from invalid config - tag', () => {\n const config = [\n {\n tag: '500',\n subfields: [{code: /9/u, value: /^(?!FENNI<KEEP>).*$/u}]\n }\n ];\n\n try {\n validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - invalid data type for: tag');\n }\n });\n\n it('Fails to create a validator from invalid config - missing array', () => {\n const config = {\n tag: '500',\n subfields: [{code: /9/u, value: /^(?!FENNI<KEEP>).*$/u}]\n };\n\n try {\n validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration array not provided');\n }\n });\n\n it('Fails to create a validator from invalid config - code', () => {\n const config = [\n {\n tag: /^500$/u,\n subfields: [{code: 9, value: /^(?!FENNI<KEEP>).*$/u}]\n }\n ];\n\n try {\n validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - invalid data type for: code');\n }\n });\n\n it('Fails to create a validator from invalid config - value', () => {\n const config = [\n {\n tag: /^500$/u,\n subfields: [{code: /9/u, value: 'Fenni'}]\n }\n ];\n\n try {\n validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - invalid data type for: value');\n }\n });\n\n\n it('Fails to create a validator from invalid config - missing mandatory: tag', () => {\n const config = [\n {\n value: /^500$/u,\n subfields: [{code: /9/u, value: /^(?!FENNI<KEEP>).*$/u}]\n }\n ];\n\n try {\n validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - missing mandatory element: tag');\n }\n });\n\n it('Fails to create a validator from invalid config - subfield not object: array', () => {\n const config = [\n {\n tag: /^500$/u,\n subfields: [\n ['/9/', '/^(?!FENNI<KEEP>).*$/'],\n {value: /^(?!FENNI<KEEP>).*$/u}\n ]\n }\n ];\n\n try {\n validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - subfield: /9/,/^(?!FENNI<KEEP>).*$/ not object');\n }\n });\n\n it('Fails to create a validator from invalid config - subfield not object: string', () => {\n const config = [\n {\n tag: /^500$/u,\n subfields: [\n '/9/',\n '/^(?!FENNI<KEEP>).*$/',\n {value: /^(?!FENNI<KEEP>).*$/u}\n ]\n }\n ];\n\n try {\n validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - subfield: /9/ not object');\n }\n });\n\n it('Fails to create a validator from invalid config - missing mandatory: subfield.code', () => {\n const config = [\n {\n tag: /^500$/u,\n subfields: [\n {code: /9/u, value: /^(?!FENNI<KEEP>).*$/u},\n {value: /^(?!FENNI<KEEP>).*$/u}\n ]\n }\n ];\n\n try {\n validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - missing mandatory element: code');\n }\n });\n\n it('Fails to create a validator from invalid config - unidentified field: unidentified', () => {\n const config = [\n {\n tag: /^500$/u,\n unidentified: /^500$/u,\n subfields: [\n {code: /9/u, value: /^(?!FENNI<KEEP>).*$/u},\n {value: /^(?!FENNI<KEEP>).*$/u}\n ]\n }\n ];\n\n try {\n validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - unidentified value: unidentified');\n }\n });\n });\n\n // Simple configuration https://github.com/NatLibFi/marc-record-validators-melinda/issues/46\n describe('#validate: Simple configuration (spec)', () => {\n const config = [\n {\n tag: /^100$/u,\n subfields: [{code: /4/u}]\n }\n ];\n\n const recordValid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '100',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Foo Bar'}]\n }, {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n const recordInvalid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '100',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar'},\n {code: '4', value: 'att'}\n ]\n }, {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n const recordInvalidFixed = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '100',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Foo Bar'}]\n }, {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n it('Finds the record valid (spec)', async () => {\n const validator = await validatorFactory(config);\n const result = await validator.validate(recordValid);\n expect(result).to.eql({valid: true, message: []});\n });\n\n it('Finds the record invalid (spec)', async () => {\n const validator = await validatorFactory(config);\n const result = await validator.validate(recordInvalid);\n expect(result).to.eql({valid: false, message: ['Subfield $100$$4should be excluded']});\n });\n\n it('Repairs invalid record', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalid);\n expect(recordInvalid.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n });\n\n\n describe('#validate: Remove only subfield -> remove field as well', () => {\n const config = [\n {\n tag: /^041$/u,\n subfields: [{code: /^[ad]$/u, value: /^zxx$/u}]\n }\n ];\n\n const recordOriginal = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'zxx'}]\n }, {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n const recordModified = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n it('Finds the record with 041$a zxx invalid (spec)', async () => {\n const validator = await validatorFactory(config);\n const result = await validator.validate(recordOriginal);\n expect(result).to.eql({valid: false, message: ['Subfield $041$$ashould be excluded']});\n });\n\n it('Repairs invalid record', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordOriginal);\n expect(recordOriginal.equalsTo(recordModified)).to.eql(true);\n });\n });\n\n // Complex configuration https://github.com/NatLibFi/marc-record-validators-melinda/issues/46\n describe('#validate: Complex configuration (spec)', () => {\n const config = [\n {\n tag: /^210$/u,\n ind2: /\\s/u,\n subfields: [{code: /2/u, value: /.+/u}]\n }\n ];\n\n const recordValid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '210',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Foo'}]\n }, {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n const recordInvalid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '210',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo'},\n {code: '2', value: 'dnlm'}\n ]\n }, {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n const recordInvalidFixed = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '210',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Foo'}]\n }, {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n it('Finds the record valid (spec)', async () => {\n const validator = await validatorFactory(config);\n const result = await validator.validate(recordValid);\n expect(result).to.eql({valid: true, message: []});\n });\n\n it('Finds the record invalid (spec)', async () => {\n const validator = await validatorFactory(config);\n const result = await validator.validate(recordInvalid);\n expect(result).to.eql({valid: false, message: ['Subfield $210$$2should be excluded']});\n });\n\n it('Repairs invalid record', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalid);\n expect(recordInvalid.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n });\n\n // More special cases to increase coverage\n describe('#validate: Custom configuration', () => {\n const configInd = [\n {\n tag: /^500$/u,\n ind1: /^8$/u,\n ind2: /^4$/u,\n subfields: [{code: /2/u, value: /.+/u}]\n }\n ];\n\n const recordValid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '210',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Foo'}]\n }, {\n tag: '500',\n subfields: [\n {code: 'a', value: 'Foo'},\n {code: '2', value: 'dnlm'}\n ]\n }\n ]\n });\n\n const recordIndInvalid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '500',\n ind1: '8',\n ind2: '4',\n subfields: [\n {code: 'a', value: 'Foo'},\n {code: '2', value: 'dnlm'}\n ]\n }\n ]\n });\n\n const recordIndInvalidFixed = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '500',\n ind1: '8',\n ind2: '4',\n subfields: [{code: 'a', value: 'Foo'}]\n }\n ]\n });\n\n it('Finds the record valid - Ind1&Ind2', async () => {\n const validator = await validatorFactory(configInd);\n const result = await validator.validate(recordValid);\n expect(result).to.eql({valid: true, message: []});\n });\n\n it('Finds the record invalid - Ind', async () => {\n const validator = await validatorFactory(configInd);\n const result = await validator.validate(recordIndInvalid);\n expect(result).to.eql({valid: false, message: ['Subfield $500$$2should be excluded']});\n });\n\n it('Repairs invalid record', async () => {\n const validator = await validatorFactory(configInd);\n await validator.fix(recordIndInvalid);\n expect(recordIndInvalid.equalsTo(recordIndInvalidFixed)).to.eql(true);\n });\n });\n});\n"],"mappings":"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"}
|
|
@@ -0,0 +1,457 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.fieldGetMaxSubfield6OccurrenceNumberAsInteger = fieldGetMaxSubfield6OccurrenceNumberAsInteger;
|
|
7
|
+
exports.fieldGetOccurrenceNumberPairs = fieldGetOccurrenceNumberPairs;
|
|
8
|
+
exports.fieldGetOccurrenceNumbers = fieldGetOccurrenceNumbers;
|
|
9
|
+
exports.fieldGetUnambiguousOccurrenceNumber = fieldGetUnambiguousOccurrenceNumber;
|
|
10
|
+
exports.fieldGetUnambiguousTag = fieldGetUnambiguousTag;
|
|
11
|
+
exports.fieldHasOccurrenceNumber = fieldHasOccurrenceNumber;
|
|
12
|
+
exports.fieldHasValidSubfield6 = fieldHasValidSubfield6;
|
|
13
|
+
exports.fieldHasWantedTagAndOccurrenceNumber = fieldHasWantedTagAndOccurrenceNumber;
|
|
14
|
+
exports.fieldIsFirstFieldInChain = fieldIsFirstFieldInChain;
|
|
15
|
+
exports.fieldResetOccurrenceNumber = fieldResetOccurrenceNumber;
|
|
16
|
+
exports.fieldSevenToOneOccurrenceNumber = fieldSevenToOneOccurrenceNumber;
|
|
17
|
+
exports.fieldToNormalizedString = fieldToNormalizedString;
|
|
18
|
+
exports.fieldsGetOccurrenceNumbers = fieldsGetOccurrenceNumbers;
|
|
19
|
+
exports.fieldsToNormalizedString = fieldsToNormalizedString;
|
|
20
|
+
exports.get6s = get6s;
|
|
21
|
+
exports.getAllLinkedSubfield6Fields = getAllLinkedSubfield6Fields;
|
|
22
|
+
exports.intToOccurrenceNumberString = intToOccurrenceNumberString;
|
|
23
|
+
exports.is7XX = is7XX;
|
|
24
|
+
exports.isFirstLinkedSubfield6Field = isFirstLinkedSubfield6Field;
|
|
25
|
+
exports.isValidSubfield6 = isValidSubfield6;
|
|
26
|
+
exports.recordGetMaxSubfield6OccurrenceNumberAsInteger = recordGetMaxSubfield6OccurrenceNumberAsInteger;
|
|
27
|
+
exports.recordGetSubfield6ChainHeads = recordGetSubfield6ChainHeads;
|
|
28
|
+
exports.subfield6GetOccurrenceNumber = subfield6GetOccurrenceNumber;
|
|
29
|
+
exports.subfield6GetOccurrenceNumberAsInteger = subfield6GetOccurrenceNumberAsInteger;
|
|
30
|
+
exports.subfield6HasWantedTagAndOccurrenceNumber = subfield6HasWantedTagAndOccurrenceNumber;
|
|
31
|
+
exports.subfield6ResetOccurrenceNumber = subfield6ResetOccurrenceNumber;
|
|
32
|
+
var _subfield8Utils = require("./subfield8Utils");
|
|
33
|
+
var _utils = require("./utils");
|
|
34
|
+
// import createDebugLogger from 'debug';
|
|
35
|
+
// const debug = createDebugLogger('@natlibfi/marc-record-validator-melinda/subfield6Utils');
|
|
36
|
+
|
|
37
|
+
// NB! Subfield 6 is non-repeatable and it should always comes first!
|
|
38
|
+
// NB! Index size should always be 2 (preceding 0 required for 01..09) However, support for 100+ was added on 2023-02-27.
|
|
39
|
+
// NB! Index value '00' are left as they are (is not paired/indexed/whatever.
|
|
40
|
+
const sf6Regexp = /^[0-9][0-9][0-9]-(?:[0-9][0-9]|[1-9][0-9]+)(?:[^0-9].*)?$/u;
|
|
41
|
+
function isValidSubfield6(subfield) {
|
|
42
|
+
if (subfield.code !== '6') {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
return subfield.value.match(sf6Regexp);
|
|
46
|
+
}
|
|
47
|
+
function subfield6GetTag(subfield) {
|
|
48
|
+
if (isValidSubfield6(subfield)) {
|
|
49
|
+
return subfield.value.substring(0, 3);
|
|
50
|
+
}
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
function subfield6GetOccurrenceNumber(subfield) {
|
|
54
|
+
if (isValidSubfield6(subfield)) {
|
|
55
|
+
// Skip "TAG-" prefix. 2023-02-20: removed 2-digit requirement from here...
|
|
56
|
+
return subfield.value.substring(4).replace(/\D.*$/u, '');
|
|
57
|
+
}
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
function subfield6GetOccurrenceNumberAsInteger(subfield) {
|
|
61
|
+
const index = subfield6GetOccurrenceNumber(subfield);
|
|
62
|
+
if (index === undefined || index === '00') {
|
|
63
|
+
return 0;
|
|
64
|
+
}
|
|
65
|
+
const result = parseInt(index, 10);
|
|
66
|
+
//nvdebug(`SF6: ${subfield.value} => ${index} => ${result}`, debug);
|
|
67
|
+
return result;
|
|
68
|
+
}
|
|
69
|
+
function subfield6ResetOccurrenceNumber(subfield, occurrenceNumber) {
|
|
70
|
+
if (!isValidSubfield6(subfield)) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const occurrenceNumberAsString = typeof occurrenceNumber === 'number' ? intToOccurrenceNumberString(occurrenceNumber) : occurrenceNumber;
|
|
74
|
+
const newValue = subfield.value.substring(0, 4) + occurrenceNumberAsString + subfield6GetTail(subfield); // eslint-disable-line functional/immutable-data
|
|
75
|
+
//nvdebug(`Set subfield $6 value from ${subfieldToString(subfield)} to ${newValue}`);
|
|
76
|
+
subfield.value = newValue; // eslint-disable-line functional/immutable-data
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function subfield6GetTail(subfield) {
|
|
80
|
+
if (isValidSubfield6(subfield)) {
|
|
81
|
+
// Skip "TAG-" prefix. 2023-02-20: removed 2-digit requirement from here...
|
|
82
|
+
return subfield.value.replace(/^\d+-\d+/u, '');
|
|
83
|
+
}
|
|
84
|
+
return '';
|
|
85
|
+
}
|
|
86
|
+
function subfield6HasWantedTagAndOccurrenceNumber(subfield, tagAndOccurrenceNumber) {
|
|
87
|
+
if (subfield.code !== '6') {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
// We could also use generic code and go getTag()+'-'+getIndex() instead of regexp...
|
|
91
|
+
const key = subfield.value.replace(/^([0-9][0-9][0-9]-[0-9][0-9]+).*$/u, '$1'); // eslint-disable-line prefer-named-capture-group
|
|
92
|
+
(0, _utils.nvdebug)(` Compare '${key}' vs '${tagAndOccurrenceNumber}'`);
|
|
93
|
+
return key === tagAndOccurrenceNumber;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// <= SUBFIELD, FIELD =>
|
|
97
|
+
|
|
98
|
+
function fieldGetUnambiguousTag(field) {
|
|
99
|
+
const tags = field.subfields.filter(sf => subfield6GetTag(sf));
|
|
100
|
+
if (tags.length === 1) {
|
|
101
|
+
(0, _utils.nvdebug)(` GOT ${tags.length} tag(s): ${(0, _utils.subfieldToString)(tags[0])}`);
|
|
102
|
+
return subfield6GetTag(tags[0]);
|
|
103
|
+
}
|
|
104
|
+
return undefined;
|
|
105
|
+
}
|
|
106
|
+
function fieldGetUnambiguousOccurrenceNumber(field) {
|
|
107
|
+
const occurrenceNumbers = field.subfields.filter(sf => subfield6GetOccurrenceNumber(sf));
|
|
108
|
+
if (occurrenceNumbers.length === 1) {
|
|
109
|
+
return subfield6GetOccurrenceNumber(occurrenceNumbers[0]);
|
|
110
|
+
}
|
|
111
|
+
return undefined;
|
|
112
|
+
}
|
|
113
|
+
function fieldHasOccurrenceNumber(field, occurrenceNumber) {
|
|
114
|
+
//nvdebug(`${occurrenceNumber} vs ${fieldToString(field)}`);
|
|
115
|
+
return field.subfields && field.subfields.some(sf => subfield6GetOccurrenceNumber(sf) === occurrenceNumber);
|
|
116
|
+
}
|
|
117
|
+
function fieldResetOccurrenceNumber(field, newOccurrenceNumber, oldOccurrenceNumber = undefined) {
|
|
118
|
+
field.subfields.forEach(subfield => innerReset(subfield));
|
|
119
|
+
function innerReset(subfield) {
|
|
120
|
+
// (Optional) Check that this is really the occurrence number we wan't to reseot
|
|
121
|
+
if (oldOccurrenceNumber !== undefined) {
|
|
122
|
+
const currOccurrenceNumber = subfield6GetOccurrenceNumber(subfield);
|
|
123
|
+
if (currOccurrenceNumber !== oldOccurrenceNumber) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
subfield6ResetOccurrenceNumber(subfield, newOccurrenceNumber);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
function intToOccurrenceNumberString(i) {
|
|
131
|
+
return i < 10 ? `0${i}` : `${i}`;
|
|
132
|
+
}
|
|
133
|
+
function fieldGetMaxSubfield6OccurrenceNumberAsInteger(field) {
|
|
134
|
+
// used by reducer!
|
|
135
|
+
//nvdebug(`Checking subfields $6 from ${JSON.stringify(field)}`);
|
|
136
|
+
const sf6s = field.subfields ? field.subfields.filter(subfield => isValidSubfield6(subfield)) : [];
|
|
137
|
+
if (sf6s.length === 0) {
|
|
138
|
+
return 0;
|
|
139
|
+
}
|
|
140
|
+
// There should always be one, but here we check every subfield.
|
|
141
|
+
//nvdebug(`Got ${field.subfields} $6-subfield(s) from ${JSON.stringify(field)}`, debug);
|
|
142
|
+
const vals = sf6s.map(sf => subfield6GetOccurrenceNumberAsInteger(sf));
|
|
143
|
+
return Math.max(...vals);
|
|
144
|
+
}
|
|
145
|
+
function fieldHasWantedTagAndOccurrenceNumber(field, tagAndOccurrenceNumber) {
|
|
146
|
+
return field.subfields && field.subfields.some(sf => subfield6HasWantedTagAndOccurrenceNumber(sf, tagAndOccurrenceNumber));
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/*
|
|
150
|
+
export function getFieldsWithGivenOccurrenceNumberSubfield6(record, occurrenceNumberAsString) {
|
|
151
|
+
const record.fields.filter(field => field
|
|
152
|
+
|
|
153
|
+
function fieldHasIndex(field, index) {
|
|
154
|
+
if (!field.subfields) {
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
return field.subfields.find(sf => isValidSubfield6(sf) && subfieldGetOccurrenceNumber6(sf) === index);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
*/
|
|
161
|
+
|
|
162
|
+
function fieldHasValidSubfield6(field) {
|
|
163
|
+
return field.subfields && field.subfields.some(sf => isValidSubfield6(sf));
|
|
164
|
+
}
|
|
165
|
+
function isSubfield6Pair(field, otherField) {
|
|
166
|
+
// No need to log this:
|
|
167
|
+
//nvdebug(`LOOK for $6-pair:\n ${fieldToString(field)}\n ${fieldToString(otherField)}`);
|
|
168
|
+
if (!fieldHasValidSubfield6(field) || !fieldHasValidSubfield6(otherField)) {
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
if (!tagsArePairable6(field.tag, otherField.tag)) {
|
|
172
|
+
//nvdebug(` FAILED. REASON: TAGS NOT PAIRABLE!`);
|
|
173
|
+
return false;
|
|
174
|
+
}
|
|
175
|
+
const fieldIndex = fieldGetUnambiguousOccurrenceNumber(field);
|
|
176
|
+
if (fieldIndex === undefined || fieldIndex === '00') {
|
|
177
|
+
//nvdebug(` FAILED. REASON: NO INDEX FOUND`);
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
const otherFieldIndex = fieldGetUnambiguousOccurrenceNumber(otherField);
|
|
181
|
+
if (fieldIndex !== otherFieldIndex) {
|
|
182
|
+
//nvdebug(` FAILURE: INDEXES: ${fieldIndex} vs ${otherFieldIndex}`);
|
|
183
|
+
return false;
|
|
184
|
+
}
|
|
185
|
+
if (fieldGetUnambiguousTag(field) !== otherField.tag || field.tag !== fieldGetUnambiguousTag(otherField)) {
|
|
186
|
+
//nvdebug(` FAILURE: TAG vs $6 TAG`);
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
return true;
|
|
190
|
+
function tagsArePairable6(tag1, tag2) {
|
|
191
|
+
// How to do XOR operation in one line? Well, this is probably more readable...
|
|
192
|
+
if (tag1 === '880' && tag2 === '880') {
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
if (tag1 !== '880' && tag2 !== '880') {
|
|
196
|
+
return false;
|
|
197
|
+
}
|
|
198
|
+
return true;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
function subfieldSevenToOneOccurrenceNumber(subfield) {
|
|
202
|
+
if (subfield.code !== '6' || subfield.value.substring(0, 1) !== '7') {
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
subfield.value = `1${subfield.value.substring(1)}`; // eslint-disable-line functional/immutable-data
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
function fieldSevenToOneOccurrenceNumber(field) {
|
|
209
|
+
if (field.tag !== '880') {
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
field.subfields.forEach(sf => subfieldSevenToOneOccurrenceNumber(sf));
|
|
213
|
+
}
|
|
214
|
+
function fieldGetOccurrenceNumberPairs(field, candFields) {
|
|
215
|
+
// NB! TAG!=880 returns 880 fields, TAG==880 returns non-880 field
|
|
216
|
+
//nvdebug(` Trying to finds pair for ${fieldToString(field)} in ${candFields.length} fields`);
|
|
217
|
+
const pairs = candFields.filter(otherField => isSubfield6Pair(field, otherField));
|
|
218
|
+
if (pairs.length === 0) {
|
|
219
|
+
(0, _utils.nvdebug)(`NO PAIRS FOUND FOR '${(0, _utils.fieldToString)(field)}'`);
|
|
220
|
+
return pairs;
|
|
221
|
+
}
|
|
222
|
+
(0, _utils.nvdebug)(`${pairs.length} PAIR(S) FOUND FOR '${(0, _utils.fieldToString)(field)}'`);
|
|
223
|
+
pairs.forEach(pairedField => (0, _utils.nvdebug)(` '${(0, _utils.fieldToString)(pairedField)}'`));
|
|
224
|
+
return pairs;
|
|
225
|
+
}
|
|
226
|
+
function fieldGetOccurrenceNumbers(field) {
|
|
227
|
+
/* eslint-disable */
|
|
228
|
+
let occurrenceNumbers = [];
|
|
229
|
+
field.subfields?.forEach(sf => subfieldExtractOccurrenceNumber(sf));
|
|
230
|
+
function subfieldExtractOccurrenceNumber(sf) {
|
|
231
|
+
if (!isValidSubfield6(sf)) {
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
const occurrenceNumber = subfield6GetOccurrenceNumber(sf);
|
|
235
|
+
if (occurrenceNumber === '00' || occurrenceNumbers.includes(occurrenceNumber)) {
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
occurrenceNumbers.push(occurrenceNumber);
|
|
239
|
+
}
|
|
240
|
+
/* eslint-enable */
|
|
241
|
+
return occurrenceNumbers;
|
|
242
|
+
}
|
|
243
|
+
function fieldsGetOccurrenceNumbers(fields) {
|
|
244
|
+
/* eslint-disable */
|
|
245
|
+
let occurrenceNumbers = [];
|
|
246
|
+
fields.forEach(f => fieldProcessOccurrenceNumbers(f));
|
|
247
|
+
function fieldProcessOccurrenceNumbers(f) {
|
|
248
|
+
const newOccurrenceNumbers = fieldGetOccurrenceNumbers(f);
|
|
249
|
+
newOccurrenceNumbers.forEach(occurrenceNumber => {
|
|
250
|
+
if (!occurrenceNumbers.includes(occurrenceNumber)) {
|
|
251
|
+
occurrenceNumbers.push(occurrenceNumber);
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
/* eslint-enable */
|
|
256
|
+
return occurrenceNumbers;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/*
|
|
260
|
+
export function fieldGetSubfield6Pair(field, record) {
|
|
261
|
+
const pairedFields = record.fields.filter(otherField => isSubfield6Pair(field, otherField));
|
|
262
|
+
if (pairedFields.length !== 1) {
|
|
263
|
+
return undefined;
|
|
264
|
+
}
|
|
265
|
+
// NB! It is theoretically possible to have multiple pairable 880 fields (one for each encoding)
|
|
266
|
+
nvdebug(`fieldGetSubfield6Pair(): ${fieldToString(field)} => ${fieldToString(pairedFields[0])}`);
|
|
267
|
+
return pairedFields[0];
|
|
268
|
+
}
|
|
269
|
+
*/
|
|
270
|
+
|
|
271
|
+
/*
|
|
272
|
+
export function pairAndStringify6(field, record) {
|
|
273
|
+
const pair6 = fieldGetSubfield6Pair(field, record);
|
|
274
|
+
if (!pair6) {
|
|
275
|
+
return fieldToNormalizedString(field);
|
|
276
|
+
}
|
|
277
|
+
return fieldsToNormalizedString([field, pair6]);
|
|
278
|
+
}
|
|
279
|
+
*/
|
|
280
|
+
|
|
281
|
+
// Frequencly list for $6 subfields in 1XX/7XX fields:
|
|
282
|
+
// 231115 100
|
|
283
|
+
// 183832 700
|
|
284
|
+
// 28773 710
|
|
285
|
+
// 2047 711
|
|
286
|
+
// 661 110
|
|
287
|
+
// 341 111
|
|
288
|
+
// 284 130
|
|
289
|
+
// 63 730
|
|
290
|
+
// Thus there's a real risk of ending up with, say, identical 100 vs 700 chains.
|
|
291
|
+
// Semi-hackily support 1XX/7XX-version: 7XX can be deleted if corresponding 1XX exists:
|
|
292
|
+
|
|
293
|
+
function is7XX(tag) {
|
|
294
|
+
return ['700', '710', '711', '730'].includes(tag);
|
|
295
|
+
}
|
|
296
|
+
function normalizeEntryTag(tag) {
|
|
297
|
+
if (tag.match(/^[17](?:00|10|11|30)$/u)) {
|
|
298
|
+
return `X${tag.substring(1)}`;
|
|
299
|
+
}
|
|
300
|
+
return tag;
|
|
301
|
+
}
|
|
302
|
+
function subfieldToNormalizedString(sf, tag, targetLinkingNumber = 0, normalizeOccurrenceNumber = false, normalizeEntryTagBoolean = false) {
|
|
303
|
+
// targetLinkingNumber refers to $8.
|
|
304
|
+
// normalizeEntryTagBoolean refers to 1XX/7XX tag values in subfield $6 value.
|
|
305
|
+
if (isValidSubfield6(sf)) {
|
|
306
|
+
// && targetLinkingNumber === 0) {
|
|
307
|
+
// 1XX/7XX (entry tag) normalization:
|
|
308
|
+
const tag2 = normalizeEntryTagBoolean ? normalizeEntryTag(tag) : tag;
|
|
309
|
+
const occurrenceNumber = normalizeOccurrenceNumber ? 'XX' : subfield6GetOccurrenceNumber(sf);
|
|
310
|
+
// If we are normalizing a $8 chain, don't normalize $6 occurrence number!
|
|
311
|
+
// Replace $6 occurrence number with XX:
|
|
312
|
+
return ` ‡${sf.code} ${tag2}-${occurrenceNumber}${subfield6GetTail(sf)}`;
|
|
313
|
+
}
|
|
314
|
+
if ((0, _subfield8Utils.isValidSubfield8)(sf)) {
|
|
315
|
+
const currLinkingNumber = (0, _subfield8Utils.getSubfield8LinkingNumber)(sf); //getSubfield8Index(sf);
|
|
316
|
+
if (targetLinkingNumber > 0 && currLinkingNumber === targetLinkingNumber) {
|
|
317
|
+
// For $8 we should only XX the index we are looking at...
|
|
318
|
+
const normVal = sf.value.replace(/^[0-9]+/u, 'XX');
|
|
319
|
+
return ` ‡${sf.code} ${normVal}`;
|
|
320
|
+
}
|
|
321
|
+
return ''; // Other $8 subfields are meaningless in this context
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
return ` ${(0, _utils.subfieldToString)(sf)}`; // `‡${sf.code} ${sf.value}`;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
function fieldToNormalizedString(field, targetLinkingNumber = 0, normalizeOccurrenceNumber = false, normalizeEntryTagBoolean = false) {
|
|
328
|
+
if ('subfields' in field) {
|
|
329
|
+
const tag2 = normalizeEntryTagBoolean ? normalizeEntryTag(field.tag) : field.tag;
|
|
330
|
+
return `${tag2} ${field.ind1}${field.ind2}${formatAndNormalizeSubfields(field)}`;
|
|
331
|
+
}
|
|
332
|
+
return `${field.tag} ${field.value}`;
|
|
333
|
+
function formatAndNormalizeSubfields(field) {
|
|
334
|
+
return field.subfields.map(sf => subfieldToNormalizedString(sf, field.tag, targetLinkingNumber, normalizeOccurrenceNumber, normalizeEntryTagBoolean)).join('');
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
function guessTargetLinkingNumber(fields, defaultTargetLinkingNumber) {
|
|
338
|
+
if (defaultTargetLinkingNumber !== 0) {
|
|
339
|
+
return defaultTargetLinkingNumber;
|
|
340
|
+
}
|
|
341
|
+
const linkingNumbers = (0, _subfield8Utils.fieldsGetAllSubfield8LinkingNumbers)(fields);
|
|
342
|
+
return linkingNumbers.length === 1 ? linkingNumbers[0] : 0; // eslint-disable-line no-param-reassign
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
function fieldsToNormalizedString(fields, defaultTargetLinkingNumber = 0, normalizeOccurrenceNumber = false, normalizeEntryTag = false) {
|
|
346
|
+
const targetLinkingNumber = guessTargetLinkingNumber(fields, defaultTargetLinkingNumber);
|
|
347
|
+
(0, _utils.nvdebug)(`fieldsToNormalizedString: OCC: ${normalizeOccurrenceNumber}`);
|
|
348
|
+
const strings = fields.map(field => fieldToNormalizedString(field, targetLinkingNumber, normalizeOccurrenceNumber, normalizeEntryTag));
|
|
349
|
+
strings.sort(); // eslint-disable-line functional/immutable-data
|
|
350
|
+
return strings.join('\t__SEPARATOR__\t');
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
/*
|
|
354
|
+
|
|
355
|
+
export function removeField6IfNeeded(field, record, fieldsAsString) {
|
|
356
|
+
const pairField = fieldGetSubfield6Pair(field, record);
|
|
357
|
+
const asString = pairField ? fieldsToNormalizedString([field, pairField]) : fieldToNormalizedString(field);
|
|
358
|
+
nvdebug(`SOURCE: ${asString} -- REALITY: ${fieldToString(field)}`);
|
|
359
|
+
const tmp = pairField ? fieldToString(pairField) : 'HUTI';
|
|
360
|
+
nvdebug(`PAIR: ${tmp}`);
|
|
361
|
+
nvdebug(`BASE:\n ${fieldsAsString.join('\n ')}`);
|
|
362
|
+
if (!fieldsAsString.includes(asString)) {
|
|
363
|
+
return;
|
|
364
|
+
}
|
|
365
|
+
nvdebug(`Duplicate $6 removal: ${fieldToString(field)}`);
|
|
366
|
+
record.removeField(field);
|
|
367
|
+
|
|
368
|
+
if (pairField === undefined) {
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
nvdebug(`Duplicate $6 removal (pair): ${fieldToString(pairField)}`);
|
|
372
|
+
record.removeField(pairField);
|
|
373
|
+
}
|
|
374
|
+
*/
|
|
375
|
+
|
|
376
|
+
function getFirstField(record, fields) {
|
|
377
|
+
const fieldsAsStrings = fields.map(field => (0, _utils.fieldToString)(field));
|
|
378
|
+
//record.fields.forEach((field, i) => nvdebug(`${i}:\t${fieldToString(field)}`));
|
|
379
|
+
//nvdebug(`getFirstField: ${fieldsAsStrings.join('\t')}`);
|
|
380
|
+
const i = record.fields.findIndex(field => fieldsAsStrings.includes((0, _utils.fieldToString)(field)));
|
|
381
|
+
if (i > -1) {
|
|
382
|
+
const field = record.fields[i];
|
|
383
|
+
//nvdebug(`1st F: ${i + 1}/${record.fields.length} ${fieldToString(field)}`);
|
|
384
|
+
return field;
|
|
385
|
+
}
|
|
386
|
+
return undefined;
|
|
387
|
+
}
|
|
388
|
+
function isRelevantSubfield6Chain(fields) {
|
|
389
|
+
if (fields.length < 2) {
|
|
390
|
+
// 1 non-880-field and 1+ 880 fields
|
|
391
|
+
return false;
|
|
392
|
+
}
|
|
393
|
+
const non880 = fields.filter(f => f.tag !== '880');
|
|
394
|
+
if (non880.length !== 1) {
|
|
395
|
+
return false;
|
|
396
|
+
}
|
|
397
|
+
const linkingNumbers = (0, _subfield8Utils.fieldsGetAllSubfield8LinkingNumbers)(fields);
|
|
398
|
+
if (linkingNumbers.length !== 0) {
|
|
399
|
+
return false;
|
|
400
|
+
}
|
|
401
|
+
return fields.every(f => (0, _utils.fieldHasSubfield)(f, '6'));
|
|
402
|
+
}
|
|
403
|
+
function fieldIsFirstFieldInChain(field, chain, record) {
|
|
404
|
+
// Interpretation of first: position of field in record (however, we might have a duplicate field. See tests...)
|
|
405
|
+
const firstField = getFirstField(record, chain);
|
|
406
|
+
if (firstField) {
|
|
407
|
+
return (0, _utils.fieldToString)(field) === (0, _utils.fieldToString)(firstField);
|
|
408
|
+
}
|
|
409
|
+
return false;
|
|
410
|
+
}
|
|
411
|
+
function getAllLinkedSubfield6Fields(field, record) {
|
|
412
|
+
const fields = get6s(field, record);
|
|
413
|
+
const moreFields = (0, _subfield8Utils.add8s)(fields, record);
|
|
414
|
+
|
|
415
|
+
// Currently we don't handle fields with more than one $6 and/or $8 subfield.
|
|
416
|
+
if (moreFields.length > fields.length) {
|
|
417
|
+
return []; // Don't fix!
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
return moreFields;
|
|
421
|
+
}
|
|
422
|
+
function isFirstLinkedSubfield6Field(field, record) {
|
|
423
|
+
if (!field.subfields) {
|
|
424
|
+
// Is not a datafield
|
|
425
|
+
return false;
|
|
426
|
+
}
|
|
427
|
+
const chain = getAllLinkedSubfield6Fields(field, record);
|
|
428
|
+
if (!isRelevantSubfield6Chain(chain)) {
|
|
429
|
+
(0, _utils.nvdebug)(`Rejected 6: ${(0, _utils.fieldsToString)(chain)}`);
|
|
430
|
+
return false;
|
|
431
|
+
}
|
|
432
|
+
return fieldIsFirstFieldInChain(field, chain, record);
|
|
433
|
+
}
|
|
434
|
+
function recordGetSubfield6ChainHeads(record) {
|
|
435
|
+
return record.fields.filter(field => isFirstLinkedSubfield6Field(field, record));
|
|
436
|
+
}
|
|
437
|
+
function recordGetMaxSubfield6OccurrenceNumberAsInteger(record) {
|
|
438
|
+
// Should we cache the value here?
|
|
439
|
+
const vals = record.fields.map(field => fieldGetMaxSubfield6OccurrenceNumberAsInteger(field));
|
|
440
|
+
return Math.max(...vals);
|
|
441
|
+
}
|
|
442
|
+
function get6s(field, candidateFields) {
|
|
443
|
+
// NB! Convert field to fields!!!
|
|
444
|
+
// Get all fields with given occurence number
|
|
445
|
+
const sixes = field.subfields.filter(sf => isValidSubfield6(sf));
|
|
446
|
+
if (sixes.length === 0) {
|
|
447
|
+
return [field];
|
|
448
|
+
}
|
|
449
|
+
(0, _utils.nvdebug)(`SIXES: ${sixes.length}`);
|
|
450
|
+
const occurrenceNumbers = sixes.map(sf => subfield6GetOccurrenceNumber(sf)).filter(value => value !== undefined && value !== '00');
|
|
451
|
+
(0, _utils.nvdebug)(occurrenceNumbers.join(' -- '));
|
|
452
|
+
const relevantFields = candidateFields.filter(f => occurrenceNumbers.some(o => fieldHasOccurrenceNumber(f, o)));
|
|
453
|
+
(0, _utils.nvdebug)(`${(0, _utils.fieldToString)(field)}: $6-RELFIELDS FOUND: ${relevantFields.length}...`);
|
|
454
|
+
relevantFields.forEach(f => (0, _utils.nvdebug)((0, _utils.fieldToString)(f)));
|
|
455
|
+
return relevantFields;
|
|
456
|
+
}
|
|
457
|
+
//# sourceMappingURL=subfield6Utils.js.map
|