@natlibfi/marc-record-validators-melinda 11.2.2-alpha.1 → 11.2.2
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/dist/access-rights.spec.js +1 -1
- package/dist/access-rights.spec.js.map +1 -1
- package/dist/addMissingField041.js.map +1 -1
- package/dist/addMissingField041.spec.js +1 -1
- package/dist/addMissingField041.spec.js.map +1 -1
- package/dist/addMissingField336.js.map +1 -1
- package/dist/addMissingField336.spec.js +1 -1
- package/dist/addMissingField336.spec.js.map +1 -1
- package/dist/addMissingField337.js.map +1 -1
- package/dist/addMissingField337.spec.js +1 -1
- package/dist/addMissingField337.spec.js.map +1 -1
- package/dist/addMissingField338.js.map +1 -1
- package/dist/addMissingField338.spec.js +1 -1
- package/dist/addMissingField338.spec.js.map +1 -1
- package/dist/cyrillux-usemarcon-replacement.js +82 -22
- package/dist/cyrillux-usemarcon-replacement.js.map +1 -1
- package/dist/cyrillux-usemarcon-replacement.spec.js +1 -1
- package/dist/cyrillux-usemarcon-replacement.spec.js.map +1 -1
- package/dist/double-commas.spec.js +1 -1
- package/dist/double-commas.spec.js.map +1 -1
- package/dist/duplicates-ind1.js.map +1 -1
- package/dist/duplicates-ind1.spec.js +1 -1
- package/dist/duplicates-ind1.spec.js.map +1 -1
- package/dist/empty-fields.js.map +1 -1
- package/dist/empty-fields.spec.js +1 -1
- package/dist/empty-fields.spec.js.map +1 -1
- package/dist/ending-punctuation.js +1 -1
- package/dist/ending-punctuation.js.map +1 -1
- package/dist/ending-punctuation.spec.js +1 -1
- package/dist/ending-punctuation.spec.js.map +1 -1
- package/dist/ending-whitespace.js.map +1 -1
- package/dist/ending-whitespace.spec.js +1 -1
- package/dist/ending-whitespace.spec.js.map +1 -1
- package/dist/field-008-18-34-character-groups.js +1 -1
- package/dist/field-008-18-34-character-groups.js.map +1 -1
- package/dist/field-008-18-34-character-groups.spec.js +1 -1
- package/dist/field-008-18-34-character-groups.spec.js.map +1 -1
- package/dist/field-505-separators.js +1 -1
- package/dist/field-505-separators.js.map +1 -1
- package/dist/field-505-separators.spec.js +1 -1
- package/dist/field-505-separators.spec.js.map +1 -1
- package/dist/field-521-fix.js +1 -1
- package/dist/field-521-fix.js.map +1 -1
- package/dist/field-521-fix.spec.js +1 -1
- package/dist/field-521-fix.spec.js.map +1 -1
- package/dist/field-exclusion.js.map +1 -1
- package/dist/field-exclusion.spec.js +1 -1
- package/dist/field-exclusion.spec.js.map +1 -1
- package/dist/field-structure.js.map +1 -1
- package/dist/field-structure.spec.js +1 -1
- package/dist/field-structure.spec.js.map +1 -1
- package/dist/fields-present.spec.js +1 -1
- package/dist/fields-present.spec.js.map +1 -1
- package/dist/fix-33X.js +1 -1
- package/dist/fix-33X.js.map +1 -1
- package/dist/fix-33X.spec.js +1 -1
- package/dist/fix-33X.spec.js.map +1 -1
- package/dist/fix-country-codes.js.map +1 -1
- package/dist/fix-country-codes.spec.js +1 -1
- package/dist/fix-country-codes.spec.js.map +1 -1
- package/dist/fix-language-codes.js +1 -1
- package/dist/fix-language-codes.js.map +1 -1
- package/dist/fix-language-codes.spec.js +1 -1
- package/dist/fix-language-codes.spec.js.map +1 -1
- package/dist/fixRelatorTerms.js +6 -3
- package/dist/fixRelatorTerms.js.map +1 -1
- package/dist/fixRelatorTerms.spec.js +1 -1
- package/dist/fixRelatorTerms.spec.js.map +1 -1
- package/dist/fixed-fields.js.map +1 -1
- package/dist/fixed-fields.spec.js +1 -1
- package/dist/fixed-fields.spec.js.map +1 -1
- package/dist/identical-fields.js.map +1 -1
- package/dist/identical-fields.spec.js +1 -1
- package/dist/identical-fields.spec.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/indicator-fixes.js +17 -0
- package/dist/indicator-fixes.js.map +1 -1
- package/dist/indicator-fixes.spec.js +1 -1
- package/dist/indicator-fixes.spec.js.map +1 -1
- package/dist/isbn-issn.js +1 -1
- package/dist/isbn-issn.js.map +1 -1
- package/dist/isbn-issn.spec.js +1 -1
- package/dist/isbn-issn.spec.js.map +1 -1
- package/dist/item-language.js +1 -1
- package/dist/item-language.js.map +1 -1
- package/dist/item-language.spec.js +1 -1
- package/dist/item-language.spec.js.map +1 -1
- package/dist/mergeField500Lisapainokset.js.map +1 -1
- package/dist/mergeField500Lisapainokset.spec.js +1 -1
- package/dist/mergeField500Lisapainokset.spec.js.map +1 -1
- package/dist/mergeRelatorTermFields.js +1 -1
- package/dist/mergeRelatorTermFields.js.map +1 -1
- package/dist/mergeRelatorTermFields.spec.js +1 -1
- package/dist/mergeRelatorTermFields.spec.js.map +1 -1
- package/dist/multiple-subfield-0.js.map +1 -1
- package/dist/multiple-subfield-0.spec.js +1 -1
- package/dist/multiple-subfield-0.spec.js.map +1 -1
- package/dist/non-breaking-space.js.map +1 -1
- package/dist/non-breaking-space.spec.js +1 -1
- package/dist/non-breaking-space.spec.js.map +1 -1
- package/dist/normalize-dashes.js +1 -1
- package/dist/normalize-dashes.js.map +1 -1
- package/dist/normalize-dashes.spec.js +1 -1
- package/dist/normalize-dashes.spec.js.map +1 -1
- package/dist/normalize-identifiers.js +1 -1
- package/dist/normalize-identifiers.js.map +1 -1
- package/dist/normalize-identifiers.spec.js +1 -1
- package/dist/normalize-identifiers.spec.js.map +1 -1
- package/dist/normalize-qualifying-information.js +1 -1
- package/dist/normalize-qualifying-information.js.map +1 -1
- package/dist/normalize-qualifying-information.spec.js +1 -1
- package/dist/normalize-qualifying-information.spec.js.map +1 -1
- package/dist/normalize-utf8-diacritics.js +1 -1
- package/dist/normalize-utf8-diacritics.js.map +1 -1
- package/dist/normalize-utf8-diacritics.spec.js +1 -1
- package/dist/normalize-utf8-diacritics.spec.js.map +1 -1
- package/dist/normalizeFieldForComparison.js +1 -1
- package/dist/normalizeFieldForComparison.js.map +1 -1
- package/dist/normalizeSubfieldValueForComparison.js +1 -1
- package/dist/normalizeSubfieldValueForComparison.js.map +1 -1
- package/dist/prepublicationUtils.js +1 -1
- package/dist/prepublicationUtils.js.map +1 -1
- package/dist/punctuation/index.js +1 -1
- package/dist/punctuation/index.js.map +1 -1
- package/dist/punctuation/rules/index.js +1 -1
- package/dist/punctuation/rules/index.js.map +1 -1
- package/dist/punctuation.spec.js +1 -1
- package/dist/punctuation.spec.js.map +1 -1
- package/dist/punctuation2.js +1 -1
- package/dist/punctuation2.js.map +1 -1
- package/dist/punctuation2.spec.js +1 -1
- package/dist/punctuation2.spec.js.map +1 -1
- package/dist/reindexSubfield6OccurenceNumbers.js +1 -1
- package/dist/reindexSubfield6OccurenceNumbers.js.map +1 -1
- package/dist/reindexSubfield6OccurenceNumbers.spec.js +1 -1
- package/dist/reindexSubfield6OccurenceNumbers.spec.js.map +1 -1
- package/dist/removeDuplicateDataFields.js +1 -1
- package/dist/removeDuplicateDataFields.js.map +1 -1
- package/dist/removeDuplicateDataFields.spec.js +1 -1
- package/dist/removeDuplicateDataFields.spec.js.map +1 -1
- package/dist/removeInferiorDataFields.js +1 -1
- package/dist/removeInferiorDataFields.js.map +1 -1
- package/dist/removeInferiorDataFields.spec.js +1 -1
- package/dist/removeInferiorDataFields.spec.js.map +1 -1
- package/dist/resolvable-ext-references-melinda.js +1 -1
- package/dist/resolvable-ext-references-melinda.js.map +1 -1
- package/dist/resolvable-ext-references-melinda.spec.js +1 -1
- package/dist/resolvable-ext-references-melinda.spec.js.map +1 -1
- package/dist/resolveOrphanedSubfield6s.js +1 -1
- package/dist/resolveOrphanedSubfield6s.js.map +1 -1
- package/dist/resolveOrphanedSubfield6s.spec.js +1 -1
- package/dist/resolveOrphanedSubfield6s.spec.js.map +1 -1
- package/dist/sanitize-vocabulary-source-codes.js +5 -1
- package/dist/sanitize-vocabulary-source-codes.js.map +1 -1
- package/dist/sanitize-vocabulary-source-codes.spec.js +1 -1
- package/dist/sanitize-vocabulary-source-codes.spec.js.map +1 -1
- package/dist/sort-tags.spec.js +1 -1
- package/dist/sort-tags.spec.js.map +1 -1
- package/dist/sortFields.js +1 -1
- package/dist/sortFields.js.map +1 -1
- package/dist/sortFields.spec.js +1 -1
- package/dist/sortFields.spec.js.map +1 -1
- package/dist/sortRelatorTerms.js +1 -1
- package/dist/sortRelatorTerms.js.map +1 -1
- package/dist/sortRelatorTerms.spec.js +1 -1
- package/dist/sortRelatorTerms.spec.js.map +1 -1
- package/dist/sortSubfields.js +1 -1
- package/dist/sortSubfields.js.map +1 -1
- package/dist/sortSubfields.spec.js +1 -1
- package/dist/sortSubfields.spec.js.map +1 -1
- package/dist/stripPunctuation.js.map +1 -1
- package/dist/stripPunctuation.spec.js +1 -1
- package/dist/stripPunctuation.spec.js.map +1 -1
- package/dist/subfield-exclusion.js.map +1 -1
- package/dist/subfield-exclusion.spec.js +1 -1
- package/dist/subfield-exclusion.spec.js.map +1 -1
- package/dist/subfield6Utils.js.map +1 -1
- package/dist/subfield8Utils.js.map +1 -1
- package/dist/subfieldValueNormalizations.js +1 -1
- package/dist/subfieldValueNormalizations.js.map +1 -1
- package/dist/subfieldValueNormalizations.spec.js +1 -1
- package/dist/subfieldValueNormalizations.spec.js.map +1 -1
- package/dist/sync-007-and-300.js +1 -1
- package/dist/sync-007-and-300.js.map +1 -1
- package/dist/sync-007-and-300.spec.js +1 -1
- package/dist/sync-007-and-300.spec.js.map +1 -1
- package/dist/typeOfDate-008.js +1 -1
- package/dist/typeOfDate-008.js.map +1 -1
- package/dist/typeOfDate-008.spec.js +1 -1
- package/dist/typeOfDate-008.spec.js.map +1 -1
- package/dist/unicode-decomposition.js.map +1 -1
- package/dist/unicode-decomposition.spec.js +1 -1
- package/dist/unicode-decomposition.spec.js.map +1 -1
- package/dist/update-field-540.spec.js +1 -1
- package/dist/update-field-540.spec.js.map +1 -1
- package/dist/urn.js +1 -1
- package/dist/urn.js.map +1 -1
- package/dist/urn.spec.js +1 -1
- package/dist/urn.spec.js.map +1 -1
- package/dist/utils.js +17 -0
- package/dist/utils.js.map +1 -1
- package/package.json +2 -2
- package/src/cyrillux-usemarcon-replacement.js +87 -24
- package/src/fixRelatorTerms.js +5 -2
- package/src/indicator-fixes.js +19 -0
- package/src/sanitize-vocabulary-source-codes.js +4 -0
- package/src/utils.js +16 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f11/expectedResult.json +3 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f11/record.json +8 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f12/expectedResult.json +32 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f12/metadata.json +6 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f12/record.json +30 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f13/expectedResult.json +38 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f13/metadata.json +6 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f13/record.json +29 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f14/expectedResult.json +42 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f14/metadata.json +6 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f14/record.json +33 -0
- package/test-fixtures/indicator-fixes/09/expectedResult.json +10 -0
- package/test-fixtures/indicator-fixes/09/metadata.json +4 -0
- package/test-fixtures/indicator-fixes/09/record.json +11 -0
- package/test-fixtures/sanitize-vocabulary-source-codes/f04/expectedResult.json +74 -0
- package/test-fixtures/sanitize-vocabulary-source-codes/f04/metadata.json +8 -0
- package/test-fixtures/sanitize-vocabulary-source-codes/f04/record.json +75 -0
- package/test-fixtures/sanitize-vocabulary-source-codes/v04/expectedResult.json +5 -0
- package/test-fixtures/sanitize-vocabulary-source-codes/v04/metadata.json +8 -0
- package/test-fixtures/sanitize-vocabulary-source-codes/v04/record.json +75 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sortSubfields.js","names":["_clone","_interopRequireDefault","require","_debug","_utils","obj","__esModule","default","debug","createDebugLogger","debugDev","extend","defaultSortOrderStringFinns","defaultSortOrderStringOthers","defaultSortOrderFinns","split","defaultSortOrderOthers","_default","tagPattern","description","validate","fix","getRelevantFields","record","datafields","fields","filter","f","subfields","regexp","RegExp","test","tag","res","message","valid","relevantFields","forEach","field","sortAdjacentSubfields","clonedField","clone","clonedFieldAsString","fieldToString","fieldAsString","push","length","sortOrderForX00","sortOrderForX10","sortOrderFor7XX","sortOrderFor246","subfieldSortOrder","getSubfieldSortOrder","entry","currEntry","sortOrder","nvdebug","swapSubfields","loopAgain","some","sf","index","currPos","getPosition","prevPos","tmp","subfield","indexOf","code","includes","value","twoBeforeZero","sf2","externalSortOrder","finnishWay","controlSubfieldOrder","sortOrderForField","defaultSortOrder","subfieldOrder"],"sources":["../src/sortSubfields.js"],"sourcesContent":["// Author(s): Nicholas Volk\n\nimport clone from 'clone';\nimport createDebugLogger from 'debug';\nimport {fieldToString, nvdebug} from './utils';\n\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:sortSubfields');\n//const debugData = debug.extend('data');\nconst debugDev = debug.extend('dev');\n\nconst defaultSortOrderStringFinns = '8673abcdefghijklmnopqrstuvwxyz420159'; // NB! We Finns like $2 before $0 in 6XX...\nconst defaultSortOrderStringOthers = '8673abcdefghijklmnopqrstuvwxyz402159';\n\nconst defaultSortOrderFinns = defaultSortOrderStringFinns.split('');\nconst defaultSortOrderOthers = defaultSortOrderStringOthers.split('');\n\n\nexport default function (tagPattern) {\n\n return {\n description: 'Swap adjacent subfields',\n validate, fix\n };\n\n function getRelevantFields(record, tagPattern) {\n const datafields = record.fields.filter(f => f.subfields);\n if (!tagPattern) {\n return datafields;\n }\n\n const regexp = new RegExp(tagPattern, 'u');\n return datafields.filter(f => regexp.test(f.tag));\n }\n\n function fix(record, tagPattern) {\n const res = {message: [], fix: [], valid: true};\n\n const relevantFields = getRelevantFields(record, tagPattern);\n\n relevantFields.forEach(field => {\n sortAdjacentSubfields(field);\n });\n\n return res;\n }\n\n function validate(record) {\n const res = {message: []};\n\n const relevantFields = getRelevantFields(record, tagPattern);\n\n relevantFields.forEach(field => {\n const clonedField = clone(field);\n sortAdjacentSubfields(clonedField);\n const clonedFieldAsString = fieldToString(clonedField);\n const fieldAsString = fieldToString(field);\n if (fieldAsString !== clonedFieldAsString) { // eslint-disable-line functional/no-conditional-statements\n res.message.push(clonedFieldAsString); // eslint-disable-line functional/immutable-data\n }\n });\n\n res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data\n return res;\n }\n}\n\n\n// X00, X10, X11 and X130 could also for their own sets...\n// (ouch! sometimes $c comes after $d...): LoC: 100 0# ‡a Black Foot, ‡c Chief, ‡d d. 1877 ‡c (Spirit)\nconst sortOrderForX00 = ['6', 'i', 'a', 'b', 'c', 'q', 'd', 'e', 't', 'u', 'l', 'f', 'x', 'y', 'z', '0', '5', '9']; // skip $g. Can't remember why, though...\nconst sortOrderForX10 = ['6', 'i', 'a', 'b', 't', 'n', 'e', 'v', 'w', 'x', 'y', 'z', '0', '5', '9']; // somewhat iffy\nconst sortOrderFor7XX = ['8', '6', '7', 'i', 'a', 's', 't', 'b', 'c', 'd', 'm', 'h', 'k', 'o', 'x', 'z', 'g', 'q', 'w'];\nconst sortOrderFor246 = ['i', 'a', 'b', 'n', 'p', 'f', '5', '9']; // Used by field 946 as well\n\n// List *only* exceptional order here. Otherwise default order is used.\nconst subfieldSortOrder = [\n {'tag': '017', 'sortOrder': ['i', 'a', 'b', 'd']},\n {'tag': '028', 'sortOrder': ['b', 'a', 'q']}, // National convention\n //{'tag': '031', 'sortOrder': ['a', 'b', 'c', 'm', 'e', 'd']}, // utter guesswork\n {'tag': '040', 'sortOrder': ['8', '6', 'a', 'b', 'e', 'c', 'd', 'x']},\n {'tag': '041', 'sortOrder': ['8', '6', 'a', 'd', 'j', 'p', 'h', 'e', 'g', 'm']}, // guesswork\n {'tag': '048', 'sortOrder': ['8', '6', 'b', 'a']},\n {'tag': '100', 'sortOrder': sortOrderForX00},\n {'tag': '110', 'sortOrder': sortOrderForX10},\n {'tag': '111', 'sortOrder': ['a', 'n', 'd', 'c', 'e', 'g', 'j']},\n {'tag': '130', 'sortOrder': ['a', 'n', 'p', 'k', 'l']},\n {'tag': '240', 'sortOrder': ['a', 'm', 'n', 'p', 's', 'l', '2', '0', '1', '5', '9']},\n {'tag': '245', 'sortOrder': ['6', 'a', 'b', 'n', 'p', 'k', 'f', 'c']},\n {'tag': '246', 'sortOrder': sortOrderFor246},\n {'tag': '382', 'sortOrder': ['a']},\n {'tag': '385', 'sortOrder': ['8', 'm', 'n', 'a', '2', '0']},\n {'tag': '386', 'sortOrder': ['8', 'm', 'n', 'a']},\n {'tag': '490', 'sortOrder': ['a', 'x', 'y', 'v', 'l']},\n {'tag': '505', 'sortOrder': ['a']},\n {'tag': '526', 'sortOrder': ['i', 'a', 'b', 'x', 'z']},\n {'tag': '540', 'sortOrder': ['a', 'b', 'c', 'd', 'f', '2', 'u']},\n {'tag': '600', 'sortOrder': sortOrderForX00},\n {'tag': '610', 'sortOrder': sortOrderForX10},\n {'tag': '611', 'sortOrder': ['a', 'n', 'd', 'c', 'e', 'g', 'j']},\n {'tag': '650', 'sortOrder': ['a', 'x', 'y', 'z']},\n {'tag': '700', 'sortOrder': sortOrderForX00},\n {'tag': '710', 'sortOrder': sortOrderForX10},\n {'tag': '711', 'sortOrder': ['a', 'n', 'd', 'c', 'e', 'g', 'j']},\n {'tag': '760', 'sortOrder': sortOrderFor7XX},\n {'tag': '762', 'sortOrder': sortOrderFor7XX},\n {'tag': '765', 'sortOrder': sortOrderFor7XX},\n {'tag': '767', 'sortOrder': sortOrderFor7XX},\n {'tag': '770', 'sortOrder': sortOrderFor7XX},\n {'tag': '772', 'sortOrder': sortOrderFor7XX},\n {'tag': '773', 'sortOrder': sortOrderFor7XX},\n {'tag': '774', 'sortOrder': sortOrderFor7XX},\n {'tag': '775', 'sortOrder': sortOrderFor7XX},\n {'tag': '776', 'sortOrder': sortOrderFor7XX},\n {'tag': '777', 'sortOrder': sortOrderFor7XX},\n {'tag': '780', 'sortOrder': sortOrderFor7XX},\n {'tag': '785', 'sortOrder': sortOrderFor7XX},\n {'tag': '786', 'sortOrder': sortOrderFor7XX},\n {'tag': '787', 'sortOrder': sortOrderFor7XX},\n {'tag': '788', 'sortOrder': sortOrderFor7XX},\n {'tag': '800', 'sortOrder': sortOrderForX00},\n {'tag': '810', 'sortOrder': sortOrderForX10},\n {'tag': '811', 'sortOrder': ['a', 'n', 'd', 'c', 'e', 'g', 'j']},\n {'tag': '830', 'sortOrder': ['a', 'n', 'x', 'v']}, // INCOMPLETE, SAME AS 490? APPARENTLY NOT...\n {'tag': '880', 'sortOrder': ['6', 'a']},\n {'tag': '946', 'sortOrder': sortOrderFor246},\n {'tag': 'LOW', 'sortOrder': ['a', 'b', 'c', 'l', 'h']},\n {'tag': 'SID', 'sortOrder': ['c', 'b']} // Hack, so that default order is not used\n];\n\nfunction getSubfieldSortOrder(field) {\n const entry = subfieldSortOrder.filter(currEntry => field.tag === currEntry.tag);\n if (entry.length > 0 && 'sortOrder' in entry[0]) {\n debugDev(`sort order for ${field.tag}: ${entry[0].sortOrder}`);\n return entry[0].sortOrder;\n }\n nvdebug(`WARNING!\\tNo subfield order found for ${field.tag}.`);\n return [];\n}\n\n\nfunction swapSubfields(field, sortOrder) {\n if (!field.subfields) {\n return;\n }\n\n const loopAgain = field.subfields.some((sf, index) => {\n if (index === 0) {\n return false;\n }\n const currPos = getPosition(sf, sortOrder);\n const prevPos = getPosition(field.subfields[index - 1], sortOrder);\n if (currPos === -1 || prevPos === -1 || currPos >= prevPos) {\n return false;\n }\n // Swap:\n const tmp = field.subfields[index - 1];\n field.subfields[index - 1] = sf; // eslint-disable-line functional/immutable-data\n field.subfields[index] = tmp; // eslint-disable-line functional/immutable-data\n return true;\n });\n\n if (loopAgain) {\n return swapSubfields(field, sortOrder);\n }\n\n return;\n\n function getPosition(subfield, sortOrder) {\n // Magic exception that *always* comes first, used by Aleph in linking overlong fields\n if (sortOrder.indexOf('9') > -1 && subfield.code === '9' && ['^', '^^'].includes(subfield.value)) {\n return -0.5; // normal \"best value\" is 0, and \"worst value\" is N\n }\n return sortOrder.indexOf(subfield.code);\n }\n}\n\n\nfunction twoBeforeZero(field) {\n const sf2 = field.subfields.filter(sf => sf.code === '2');\n if (sf2.length !== 1) {\n return true; // both true and false are ok here\n }\n // MRA-465: gcipplatform (field 753)\n // rdasco (344), creatorbio (353), gbd (668), lsch (eg. 385)\n if (['creatorbio', 'gbd', 'gcipplatform', 'lscsh', 'rdasco'].includes(sf2[0].value)) {\n return false;\n }\n return true;\n}\n\nexport function sortAdjacentSubfields(field, externalSortOrder = []) {\n if (!field.subfields) {\n return field;\n }\n // Features:\n // - Swap only sort adjacent pairs.\n // - No sorting over unlisted subfield codes. Thus a given subfield can not shift to wrong side of 700$t...\n\n // Implement: 880 field should use values from $6...\n\n // Should we support multiple sort orders per field?\n\n // Try to handle control subfield order. This is not 100% fool proof. Control subfields are pretty stable, though.\n // However, there are exceptions (eg. $9 ^^ comes first and $2 $0 is a Finnish convention...)\n\n const finnishWay = twoBeforeZero(field);\n const controlSubfieldOrder = finnishWay ? ['8', '6', '7', '3', 'a', '4', '2', '0', '1', '5', '9'] : ['8', '6', '7', '3', 'a', '4', '0', '2', '1', '5', '9'];\n swapSubfields(field, controlSubfieldOrder);\n\n const sortOrderForField = externalSortOrder.length > 0 ? externalSortOrder : getSubfieldSortOrder(field);\n //nvdebug(`INTERMEDIATE SUBFIELD ORDER FOR ${field.tag}: ${sortOrderForField.join(', ')}`);\n\n const defaultSortOrder = finnishWay ? defaultSortOrderFinns : defaultSortOrderOthers; // $2 vs $0\n const subfieldOrder = sortOrderForField.length > 0 ? sortOrderForField : defaultSortOrder;\n //nvdebug(`FINAL SUBFIELD ORDER (FINNISH=${finnishWay}) FOR ${field.tag}: ${subfieldOrder.join(', ')}`);\n //if (sortOrder === null) { return field; } //// Currently always sort..\n //nvdebug(`IN: ${fieldToString(field)}`);\n swapSubfields(field, subfieldOrder);\n //nvdebug(`OUT: ${fieldToString(field)}`);\n\n return field;\n}\n\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"sortSubfields.js","names":["_clone","_interopRequireDefault","require","_debug","_utils","e","__esModule","default","debug","createDebugLogger","debugDev","extend","defaultSortOrderStringFinns","defaultSortOrderStringOthers","defaultSortOrderFinns","split","defaultSortOrderOthers","_default","tagPattern","description","validate","fix","getRelevantFields","record","datafields","fields","filter","f","subfields","regexp","RegExp","test","tag","res","message","valid","relevantFields","forEach","field","sortAdjacentSubfields","clonedField","clone","clonedFieldAsString","fieldToString","fieldAsString","push","length","sortOrderForX00","sortOrderForX10","sortOrderFor7XX","sortOrderFor246","subfieldSortOrder","getSubfieldSortOrder","entry","currEntry","sortOrder","nvdebug","swapSubfields","loopAgain","some","sf","index","currPos","getPosition","prevPos","tmp","subfield","indexOf","code","includes","value","twoBeforeZero","sf2","externalSortOrder","finnishWay","controlSubfieldOrder","sortOrderForField","defaultSortOrder","subfieldOrder"],"sources":["../src/sortSubfields.js"],"sourcesContent":["// Author(s): Nicholas Volk\n\nimport clone from 'clone';\nimport createDebugLogger from 'debug';\nimport {fieldToString, nvdebug} from './utils';\n\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:sortSubfields');\n//const debugData = debug.extend('data');\nconst debugDev = debug.extend('dev');\n\nconst defaultSortOrderStringFinns = '8673abcdefghijklmnopqrstuvwxyz420159'; // NB! We Finns like $2 before $0 in 6XX...\nconst defaultSortOrderStringOthers = '8673abcdefghijklmnopqrstuvwxyz402159';\n\nconst defaultSortOrderFinns = defaultSortOrderStringFinns.split('');\nconst defaultSortOrderOthers = defaultSortOrderStringOthers.split('');\n\n\nexport default function (tagPattern) {\n\n return {\n description: 'Swap adjacent subfields',\n validate, fix\n };\n\n function getRelevantFields(record, tagPattern) {\n const datafields = record.fields.filter(f => f.subfields);\n if (!tagPattern) {\n return datafields;\n }\n\n const regexp = new RegExp(tagPattern, 'u');\n return datafields.filter(f => regexp.test(f.tag));\n }\n\n function fix(record, tagPattern) {\n const res = {message: [], fix: [], valid: true};\n\n const relevantFields = getRelevantFields(record, tagPattern);\n\n relevantFields.forEach(field => {\n sortAdjacentSubfields(field);\n });\n\n return res;\n }\n\n function validate(record) {\n const res = {message: []};\n\n const relevantFields = getRelevantFields(record, tagPattern);\n\n relevantFields.forEach(field => {\n const clonedField = clone(field);\n sortAdjacentSubfields(clonedField);\n const clonedFieldAsString = fieldToString(clonedField);\n const fieldAsString = fieldToString(field);\n if (fieldAsString !== clonedFieldAsString) { // eslint-disable-line functional/no-conditional-statements\n res.message.push(clonedFieldAsString); // eslint-disable-line functional/immutable-data\n }\n });\n\n res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data\n return res;\n }\n}\n\n\n// X00, X10, X11 and X130 could also for their own sets...\n// (ouch! sometimes $c comes after $d...): LoC: 100 0# ‡a Black Foot, ‡c Chief, ‡d d. 1877 ‡c (Spirit)\nconst sortOrderForX00 = ['6', 'i', 'a', 'b', 'c', 'q', 'd', 'e', 't', 'u', 'l', 'f', 'x', 'y', 'z', '0', '5', '9']; // skip $g. Can't remember why, though...\nconst sortOrderForX10 = ['6', 'i', 'a', 'b', 't', 'n', 'e', 'v', 'w', 'x', 'y', 'z', '0', '5', '9']; // somewhat iffy\nconst sortOrderFor7XX = ['8', '6', '7', 'i', 'a', 's', 't', 'b', 'c', 'd', 'm', 'h', 'k', 'o', 'x', 'z', 'g', 'q', 'w'];\nconst sortOrderFor246 = ['i', 'a', 'b', 'n', 'p', 'f', '5', '9']; // Used by field 946 as well\n\n// List *only* exceptional order here. Otherwise default order is used.\nconst subfieldSortOrder = [\n {'tag': '017', 'sortOrder': ['i', 'a', 'b', 'd']},\n {'tag': '028', 'sortOrder': ['b', 'a', 'q']}, // National convention\n //{'tag': '031', 'sortOrder': ['a', 'b', 'c', 'm', 'e', 'd']}, // utter guesswork\n {'tag': '040', 'sortOrder': ['8', '6', 'a', 'b', 'e', 'c', 'd', 'x']},\n {'tag': '041', 'sortOrder': ['8', '6', 'a', 'd', 'j', 'p', 'h', 'e', 'g', 'm']}, // guesswork\n {'tag': '048', 'sortOrder': ['8', '6', 'b', 'a']},\n {'tag': '100', 'sortOrder': sortOrderForX00},\n {'tag': '110', 'sortOrder': sortOrderForX10},\n {'tag': '111', 'sortOrder': ['a', 'n', 'd', 'c', 'e', 'g', 'j']},\n {'tag': '130', 'sortOrder': ['a', 'n', 'p', 'k', 'l']},\n {'tag': '240', 'sortOrder': ['a', 'm', 'n', 'p', 's', 'l', '2', '0', '1', '5', '9']},\n {'tag': '245', 'sortOrder': ['6', 'a', 'b', 'n', 'p', 'k', 'f', 'c']},\n {'tag': '246', 'sortOrder': sortOrderFor246},\n {'tag': '382', 'sortOrder': ['a']},\n {'tag': '385', 'sortOrder': ['8', 'm', 'n', 'a', '2', '0']},\n {'tag': '386', 'sortOrder': ['8', 'm', 'n', 'a']},\n {'tag': '490', 'sortOrder': ['a', 'x', 'y', 'v', 'l']},\n {'tag': '505', 'sortOrder': ['a']},\n {'tag': '526', 'sortOrder': ['i', 'a', 'b', 'x', 'z']},\n {'tag': '540', 'sortOrder': ['a', 'b', 'c', 'd', 'f', '2', 'u']},\n {'tag': '600', 'sortOrder': sortOrderForX00},\n {'tag': '610', 'sortOrder': sortOrderForX10},\n {'tag': '611', 'sortOrder': ['a', 'n', 'd', 'c', 'e', 'g', 'j']},\n {'tag': '650', 'sortOrder': ['a', 'x', 'y', 'z']},\n {'tag': '700', 'sortOrder': sortOrderForX00},\n {'tag': '710', 'sortOrder': sortOrderForX10},\n {'tag': '711', 'sortOrder': ['a', 'n', 'd', 'c', 'e', 'g', 'j']},\n {'tag': '760', 'sortOrder': sortOrderFor7XX},\n {'tag': '762', 'sortOrder': sortOrderFor7XX},\n {'tag': '765', 'sortOrder': sortOrderFor7XX},\n {'tag': '767', 'sortOrder': sortOrderFor7XX},\n {'tag': '770', 'sortOrder': sortOrderFor7XX},\n {'tag': '772', 'sortOrder': sortOrderFor7XX},\n {'tag': '773', 'sortOrder': sortOrderFor7XX},\n {'tag': '774', 'sortOrder': sortOrderFor7XX},\n {'tag': '775', 'sortOrder': sortOrderFor7XX},\n {'tag': '776', 'sortOrder': sortOrderFor7XX},\n {'tag': '777', 'sortOrder': sortOrderFor7XX},\n {'tag': '780', 'sortOrder': sortOrderFor7XX},\n {'tag': '785', 'sortOrder': sortOrderFor7XX},\n {'tag': '786', 'sortOrder': sortOrderFor7XX},\n {'tag': '787', 'sortOrder': sortOrderFor7XX},\n {'tag': '788', 'sortOrder': sortOrderFor7XX},\n {'tag': '800', 'sortOrder': sortOrderForX00},\n {'tag': '810', 'sortOrder': sortOrderForX10},\n {'tag': '811', 'sortOrder': ['a', 'n', 'd', 'c', 'e', 'g', 'j']},\n {'tag': '830', 'sortOrder': ['a', 'n', 'x', 'v']}, // INCOMPLETE, SAME AS 490? APPARENTLY NOT...\n {'tag': '880', 'sortOrder': ['6', 'a']},\n {'tag': '946', 'sortOrder': sortOrderFor246},\n {'tag': 'LOW', 'sortOrder': ['a', 'b', 'c', 'l', 'h']},\n {'tag': 'SID', 'sortOrder': ['c', 'b']} // Hack, so that default order is not used\n];\n\nfunction getSubfieldSortOrder(field) {\n const entry = subfieldSortOrder.filter(currEntry => field.tag === currEntry.tag);\n if (entry.length > 0 && 'sortOrder' in entry[0]) {\n debugDev(`sort order for ${field.tag}: ${entry[0].sortOrder}`);\n return entry[0].sortOrder;\n }\n nvdebug(`WARNING!\\tNo subfield order found for ${field.tag}.`);\n return [];\n}\n\n\nfunction swapSubfields(field, sortOrder) {\n if (!field.subfields) {\n return;\n }\n\n const loopAgain = field.subfields.some((sf, index) => {\n if (index === 0) {\n return false;\n }\n const currPos = getPosition(sf, sortOrder);\n const prevPos = getPosition(field.subfields[index - 1], sortOrder);\n if (currPos === -1 || prevPos === -1 || currPos >= prevPos) {\n return false;\n }\n // Swap:\n const tmp = field.subfields[index - 1];\n field.subfields[index - 1] = sf; // eslint-disable-line functional/immutable-data\n field.subfields[index] = tmp; // eslint-disable-line functional/immutable-data\n return true;\n });\n\n if (loopAgain) {\n return swapSubfields(field, sortOrder);\n }\n\n return;\n\n function getPosition(subfield, sortOrder) {\n // Magic exception that *always* comes first, used by Aleph in linking overlong fields\n if (sortOrder.indexOf('9') > -1 && subfield.code === '9' && ['^', '^^'].includes(subfield.value)) {\n return -0.5; // normal \"best value\" is 0, and \"worst value\" is N\n }\n return sortOrder.indexOf(subfield.code);\n }\n}\n\n\nfunction twoBeforeZero(field) {\n const sf2 = field.subfields.filter(sf => sf.code === '2');\n if (sf2.length !== 1) {\n return true; // both true and false are ok here\n }\n // MRA-465: gcipplatform (field 753)\n // rdasco (344), creatorbio (353), gbd (668), lsch (eg. 385)\n if (['creatorbio', 'gbd', 'gcipplatform', 'lscsh', 'rdasco'].includes(sf2[0].value)) {\n return false;\n }\n return true;\n}\n\nexport function sortAdjacentSubfields(field, externalSortOrder = []) {\n if (!field.subfields) {\n return field;\n }\n // Features:\n // - Swap only sort adjacent pairs.\n // - No sorting over unlisted subfield codes. Thus a given subfield can not shift to wrong side of 700$t...\n\n // Implement: 880 field should use values from $6...\n\n // Should we support multiple sort orders per field?\n\n // Try to handle control subfield order. This is not 100% fool proof. Control subfields are pretty stable, though.\n // However, there are exceptions (eg. $9 ^^ comes first and $2 $0 is a Finnish convention...)\n\n const finnishWay = twoBeforeZero(field);\n const controlSubfieldOrder = finnishWay ? ['8', '6', '7', '3', 'a', '4', '2', '0', '1', '5', '9'] : ['8', '6', '7', '3', 'a', '4', '0', '2', '1', '5', '9'];\n swapSubfields(field, controlSubfieldOrder);\n\n const sortOrderForField = externalSortOrder.length > 0 ? externalSortOrder : getSubfieldSortOrder(field);\n //nvdebug(`INTERMEDIATE SUBFIELD ORDER FOR ${field.tag}: ${sortOrderForField.join(', ')}`);\n\n const defaultSortOrder = finnishWay ? defaultSortOrderFinns : defaultSortOrderOthers; // $2 vs $0\n const subfieldOrder = sortOrderForField.length > 0 ? sortOrderForField : defaultSortOrder;\n //nvdebug(`FINAL SUBFIELD ORDER (FINNISH=${finnishWay}) FOR ${field.tag}: ${subfieldOrder.join(', ')}`);\n //if (sortOrder === null) { return field; } //// Currently always sort..\n //nvdebug(`IN: ${fieldToString(field)}`);\n swapSubfields(field, subfieldOrder);\n //nvdebug(`OUT: ${fieldToString(field)}`);\n\n return field;\n}\n\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -6,7 +6,7 @@ var _sortSubfields = _interopRequireDefault(require("./sortSubfields"));
|
|
|
6
6
|
var _fixura = require("@natlibfi/fixura");
|
|
7
7
|
var _fixugen = _interopRequireDefault(require("@natlibfi/fixugen"));
|
|
8
8
|
var _debug = _interopRequireDefault(require("debug"));
|
|
9
|
-
function _interopRequireDefault(
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
10
|
(0, _fixugen.default)({
|
|
11
11
|
callback,
|
|
12
12
|
path: [__dirname, '..', 'test-fixtures', 'sort-subfields'],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sortSubfields.spec.js","names":["_chai","require","_marcRecord","_sortSubfields","_interopRequireDefault","_fixura","_fixugen","_debug","
|
|
1
|
+
{"version":3,"file":"sortSubfields.spec.js","names":["_chai","require","_marcRecord","_sortSubfields","_interopRequireDefault","_fixura","_fixugen","_debug","e","__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","tagPattern","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/sortSubfields.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './sortSubfields';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\nimport createDebugLogger from 'debug';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'sort-subfields'],\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/sortSubfields: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, tagPattern = 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, tagPattern);\n expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record, tagPattern);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,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,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEtC,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,gBAAgB,CAAC;EAC1DC,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,6DAA6D,CAAC;AAE9F,eAAeF,oBAAoBA,CAAA,EAAG;EACpC,MAAMG,SAAS,GAAG,MAAM,IAAAC,sBAAgB,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,KAAK;EAAEC,UAAU,GAAG;AAAK,CAAC,EAAE;EACrF,IAAIF,OAAO,KAAK,KAAK,EAAE;IACrBhB,KAAK,CAAC,eAAe,CAAC;IACtB;EACF;EAEA,MAAME,SAAS,GAAG,MAAM,IAAAC,sBAAgB,EAAC,CAAC;EAC1C,MAAMgB,MAAM,GAAG,IAAIC,sBAAU,CAACL,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMM,cAAc,GAAGN,UAAU,CAAC,qBAAqB,CAAC;EACxD;;EAEA,IAAI,CAACE,GAAG,EAAE;IACR,MAAMK,MAAM,GAAG,MAAMpB,SAAS,CAACY,QAAQ,CAACK,MAAM,EAAED,UAAU,CAAC;IAC3D,IAAAd,YAAM,EAACkB,MAAM,CAAC,CAACjB,EAAE,CAACkB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMnB,SAAS,CAACe,GAAG,CAACE,MAAM,EAAED,UAAU,CAAC;EACvC,IAAAd,YAAM,EAACe,MAAM,CAAC,CAACd,EAAE,CAACkB,GAAG,CAACF,cAAc,CAAC;AACvC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripPunctuation.js","names":["_punctuation","require","_utils","_default","description","validate","fix","record","nvdebug","res","message","valid","fields","forEach","f","fieldStripPunctuation","fieldsNeedingModification","filter","fieldNeedsModification","values","map","fieldToString","newValues","fieldGetFixedString","messages","val","i","length"],"sources":["../src/stripPunctuation.js"],"sourcesContent":["/*\n* stripPunctuation.js -- try and remove a marc field punctuation (based on and reverse of punctuation2.js)\n*\n* Author(s): Nicholas Volk <nicholas.volk@helsinki.fi>\n*\n*/\n\nimport {fieldGetFixedString, fieldNeedsModification, fieldStripPunctuation} from './punctuation2';\n// import createDebugLogger from 'debug';\nimport {fieldToString, nvdebug} from './utils';\n\n// const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/punctuation2');\n\nexport default function () {\n return {\n description: 'Strip punctuation to data fields',\n validate, fix\n };\n\n function fix(record) {\n nvdebug('Strip punctuation to data fields: fixer');\n const res = {message: [], fix: [], valid: true};\n record.fields.forEach(f => fieldStripPunctuation(f));\n return res;\n }\n\n function validate(record) {\n nvdebug('Strip punctuation to data fields: validate');\n\n const fieldsNeedingModification = record.fields.filter(f => fieldNeedsModification(f, false));\n\n const values = fieldsNeedingModification.map(f => fieldToString(f));\n const newValues = fieldsNeedingModification.map(f => fieldGetFixedString(f, false));\n\n const messages = values.map((val, i) => `'${val}' => '${newValues[i]}'`);\n\n const res = {message: messages};\n\n res.valid = res.message.length < 1; // eslint-disable-line functional/immutable-data\n return res;\n }\n}\n"],"mappings":";;;;;;AAOA,IAAAA,YAAA,GAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AATA;AACA;AACA;AACA;AACA;AACA;;AAGA;;AAGA;;AAEe,SAAAE,SAAA,EAAY;EACzB,OAAO;IACLC,WAAW,EAAE,kCAAkC;IAC/CC,QAAQ;IAAEC;EACZ,CAAC;EAED,SAASA,GAAGA,CAACC,MAAM,EAAE;IACnB,IAAAC,cAAO,EAAC,yCAAyC,CAAC;IAClD,MAAMC,GAAG,GAAG;MAACC,OAAO,EAAE,EAAE;MAAEJ,GAAG,EAAE,EAAE;MAAEK,KAAK,EAAE;IAAI,CAAC;IAC/CJ,MAAM,CAACK,MAAM,CAACC,OAAO,CAACC,CAAC,IAAI,IAAAC,kCAAqB,EAACD,CAAC,CAAC,CAAC;IACpD,OAAOL,GAAG;EACZ;EAEA,SAASJ,QAAQA,CAACE,MAAM,EAAE;IACxB,IAAAC,cAAO,EAAC,4CAA4C,CAAC;IAErD,MAAMQ,yBAAyB,GAAGT,MAAM,CAACK,MAAM,CAACK,MAAM,CAACH,CAAC,IAAI,IAAAI,mCAAsB,EAACJ,CAAC,EAAE,KAAK,CAAC,CAAC;IAE7F,MAAMK,MAAM,GAAGH,yBAAyB,CAACI,GAAG,CAACN,CAAC,IAAI,IAAAO,oBAAa,EAACP,CAAC,CAAC,CAAC;IACnE,MAAMQ,SAAS,GAAGN,yBAAyB,CAACI,GAAG,CAACN,CAAC,IAAI,IAAAS,gCAAmB,EAACT,CAAC,EAAE,KAAK,CAAC,CAAC;IAEnF,MAAMU,QAAQ,GAAGL,MAAM,CAACC,GAAG,CAAC,CAACK,GAAG,EAAEC,CAAC,
|
|
1
|
+
{"version":3,"file":"stripPunctuation.js","names":["_punctuation","require","_utils","_default","description","validate","fix","record","nvdebug","res","message","valid","fields","forEach","f","fieldStripPunctuation","fieldsNeedingModification","filter","fieldNeedsModification","values","map","fieldToString","newValues","fieldGetFixedString","messages","val","i","length"],"sources":["../src/stripPunctuation.js"],"sourcesContent":["/*\n* stripPunctuation.js -- try and remove a marc field punctuation (based on and reverse of punctuation2.js)\n*\n* Author(s): Nicholas Volk <nicholas.volk@helsinki.fi>\n*\n*/\n\nimport {fieldGetFixedString, fieldNeedsModification, fieldStripPunctuation} from './punctuation2';\n// import createDebugLogger from 'debug';\nimport {fieldToString, nvdebug} from './utils';\n\n// const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/punctuation2');\n\nexport default function () {\n return {\n description: 'Strip punctuation to data fields',\n validate, fix\n };\n\n function fix(record) {\n nvdebug('Strip punctuation to data fields: fixer');\n const res = {message: [], fix: [], valid: true};\n record.fields.forEach(f => fieldStripPunctuation(f));\n return res;\n }\n\n function validate(record) {\n nvdebug('Strip punctuation to data fields: validate');\n\n const fieldsNeedingModification = record.fields.filter(f => fieldNeedsModification(f, false));\n\n const values = fieldsNeedingModification.map(f => fieldToString(f));\n const newValues = fieldsNeedingModification.map(f => fieldGetFixedString(f, false));\n\n const messages = values.map((val, i) => `'${val}' => '${newValues[i]}'`);\n\n const res = {message: messages};\n\n res.valid = res.message.length < 1; // eslint-disable-line functional/immutable-data\n return res;\n }\n}\n"],"mappings":";;;;;;AAOA,IAAAA,YAAA,GAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AATA;AACA;AACA;AACA;AACA;AACA;;AAGA;;AAGA;;AAEe,SAAAE,SAAA,EAAY;EACzB,OAAO;IACLC,WAAW,EAAE,kCAAkC;IAC/CC,QAAQ;IAAEC;EACZ,CAAC;EAED,SAASA,GAAGA,CAACC,MAAM,EAAE;IACnB,IAAAC,cAAO,EAAC,yCAAyC,CAAC;IAClD,MAAMC,GAAG,GAAG;MAACC,OAAO,EAAE,EAAE;MAAEJ,GAAG,EAAE,EAAE;MAAEK,KAAK,EAAE;IAAI,CAAC;IAC/CJ,MAAM,CAACK,MAAM,CAACC,OAAO,CAACC,CAAC,IAAI,IAAAC,kCAAqB,EAACD,CAAC,CAAC,CAAC;IACpD,OAAOL,GAAG;EACZ;EAEA,SAASJ,QAAQA,CAACE,MAAM,EAAE;IACxB,IAAAC,cAAO,EAAC,4CAA4C,CAAC;IAErD,MAAMQ,yBAAyB,GAAGT,MAAM,CAACK,MAAM,CAACK,MAAM,CAACH,CAAC,IAAI,IAAAI,mCAAsB,EAACJ,CAAC,EAAE,KAAK,CAAC,CAAC;IAE7F,MAAMK,MAAM,GAAGH,yBAAyB,CAACI,GAAG,CAACN,CAAC,IAAI,IAAAO,oBAAa,EAACP,CAAC,CAAC,CAAC;IACnE,MAAMQ,SAAS,GAAGN,yBAAyB,CAACI,GAAG,CAACN,CAAC,IAAI,IAAAS,gCAAmB,EAACT,CAAC,EAAE,KAAK,CAAC,CAAC;IAEnF,MAAMU,QAAQ,GAAGL,MAAM,CAACC,GAAG,CAAC,CAACK,GAAG,EAAEC,CAAC,KAAK,IAAID,GAAG,SAASH,SAAS,CAACI,CAAC,CAAC,GAAG,CAAC;IAExE,MAAMjB,GAAG,GAAG;MAACC,OAAO,EAAEc;IAAQ,CAAC;IAE/Bf,GAAG,CAACE,KAAK,GAAGF,GAAG,CAACC,OAAO,CAACiB,MAAM,GAAG,CAAC,CAAC,CAAC;IACpC,OAAOlB,GAAG;EACZ;AACF","ignoreList":[]}
|
|
@@ -6,7 +6,7 @@ var _stripPunctuation = _interopRequireDefault(require("./stripPunctuation"));
|
|
|
6
6
|
var _fixura = require("@natlibfi/fixura");
|
|
7
7
|
var _fixugen = _interopRequireDefault(require("@natlibfi/fixugen"));
|
|
8
8
|
var _debug = _interopRequireDefault(require("debug"));
|
|
9
|
-
function _interopRequireDefault(
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
10
|
(0, _fixugen.default)({
|
|
11
11
|
callback,
|
|
12
12
|
path: [__dirname, '..', 'test-fixtures', 'strip-punctuation'],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripPunctuation.spec.js","names":["_chai","require","_marcRecord","_stripPunctuation","_interopRequireDefault","_fixura","_fixugen","_debug","
|
|
1
|
+
{"version":3,"file":"stripPunctuation.spec.js","names":["_chai","require","_marcRecord","_stripPunctuation","_interopRequireDefault","_fixura","_fixugen","_debug","e","__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/stripPunctuation.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './stripPunctuation';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\nimport createDebugLogger from 'debug';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'strip-punctuation'],\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/stripPunctuation: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,iBAAA,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,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEtC,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,mBAAmB,CAAC;EAC7DC,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,gEAAgE,CAAC;AAEjG,eAAeF,oBAAoBA,CAAA,EAAG;EACpC,MAAMG,SAAS,GAAG,MAAM,IAAAC,yBAAgB,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,yBAAgB,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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subfield-exclusion.js","names":["confSpec","tag","type","mandatory","ind1","ind2","subfields","code","value","forEach","obj","fun","Object","entries","isRegExp","re","RegExp","_default","config","Array","isArray","TypeError","configValid","description","validate","record","excludeSubfields","fix","checkMandatory","key","val","configMatchesSpec","data","spec","Error","subObj","subKey","subVal","conf","res","message","valid","confObj","found","get","element","every","confKey","confField","test","subField","excluded","elemSub","subFieldCodeFine","subFieldValueFine","push","sf","removeSubfield","length","removeField"],"sources":["../src/subfield-exclusion.js"],"sourcesContent":["// Tag (RegExp): Pattern to match the field's tags Mandatory\n// ind1 (RegExp): Pattern to match the field's ind1 property\n// ind2 (RegExp): Pattern to match the field's ind2 property\n// subfields (Array<Object>): An array of objects with the following properties (Mandatory):\n// // code (RegExp): Pattern to match the subfield's code Mandatory\n// // value (RegExp): Pattern to match the subfield's value\n\n// Configuration specification\nconst confSpec = {\n tag: { // Pattern to match the field's tags\n type: 'RegExp',\n mandatory: true\n },\n ind1: { // Pattern to match the field's ind1 property.\n type: 'RegExp' // Array<Indicator>\n },\n ind2: { // Pattern to match the field's ind2 property.\n type: 'RegExp' // Array<Indicator>\n },\n subfields: { // An array of objects with the following properties\n code: {\n type: 'RegExp',\n mandatory: true\n },\n value: {\n type: 'RegExp'\n },\n mandatory: true\n }\n};\n\nfunction forEach(obj, fun) {\n Object.entries(obj).forEach(fun);\n}\n\nfunction isRegExp(re) {\n return re instanceof RegExp;\n}\n\nexport default function (config) {\n if (!Array.isArray(config)) {\n throw new TypeError('Configuration array not provided');\n }\n\n configValid(config);\n\n return {\n description:\n 'Checks that the record does not contain the configured subfields',\n validate: record => excludeSubfields(record, config, false),\n fix: record => excludeSubfields(record, config, true)\n };\n\n /// /////////////////////////////////////////\n // These check that configuration is valid\n function configValid(config) {\n config.forEach(obj => {\n checkMandatory(confSpec, obj);\n\n forEach(obj, ([key, val]) => {\n configMatchesSpec(val, key, confSpec);\n });\n });\n }\n\n // Recursive validator\n function configMatchesSpec(data, key, spec) {\n // Field not found in configuration spec\n if (!spec[key]) {\n throw new Error(`Configuration not valid - unidentified value: ${key}`);\n }\n\n // If configuration type does not match type in configuration spec\n if (typeof data !== spec[key].type &&\n (spec[key].type === 'RegExp' && !isRegExp(data))) {\n throw new Error(`Configuration not valid - invalid data type for: ${key}`);\n }\n\n // Check subfields recursively\n if (key === 'subfields') { // eslint-disable-line functional/no-conditional-statements\n forEach(data, ([, subObj]) => {\n // Console.log(\"subObj: \", subObj, \" type: \", typeof subObj, !(Array.isArray(subObj)))\n if (typeof subObj === 'object' && !Array.isArray(subObj)) { // eslint-disable-line functional/no-conditional-statements\n checkMandatory(spec[key], subObj);\n\n forEach(subObj, ([subKey, subVal]) => {\n configMatchesSpec(subVal, subKey, spec[key]);\n });\n } else {\n throw new TypeError(`Configuration not valid - subfield: ${subObj} not object`);\n }\n });\n }\n }\n\n function checkMandatory(spec, obj) {\n // Check if all mandatory fields are present\n forEach(spec, ([key, val]) => {\n if (val.mandatory && typeof obj[key] === 'undefined') {\n throw new Error(`Configuration not valid - missing mandatory element: ${key}`);\n }\n });\n }\n /// /////////////////////////////////////////\n\n /// /////////////////////////////////////////\n // These check that record is valid\n function excludeSubfields(record, conf, fix) {\n const res = {message: [], valid: true};\n\n // Parse trough every element of config array\n conf.forEach(confObj => {\n const found = record.get(confObj.tag); // Find matching record fields based on mandatory tag\n\n // Check if some of found record fields matches all configuration fields\n found.forEach(element => {\n // Compare each found element against each configuration object\n if (Object.entries(confObj).every(([confKey, confField]) => {\n // Tag already checked at .get(), subfields later\n if (confKey === 'tag' || confKey === 'subfields') {\n return true;\n }\n\n // Configuration object is RegExp and record value matches it\n if (element[confKey] && isRegExp(confField) && confField.test(element[confKey])) {\n return true;\n }\n\n // Configuration object not found from found element\n return false;\n })) { // eslint-disable-line functional/no-conditional-statements\n // All configuration fields match, check if some subfields should be excluded.\n confObj.subfields.forEach(subField => {\n const excluded = [];\n\n element.subfields.forEach(elemSub => {\n // Check if subfield matches configuration spec\n const subFieldCodeFine = subField.code && elemSub.code && subField.code.test(elemSub.code);\n const subFieldValueFine = subField.value && elemSub.value && subField.value.test(elemSub.value);\n if (subFieldCodeFine && (typeof subField.value === 'undefined' || subFieldValueFine)) {\n if (fix) { // eslint-disable-line functional/no-conditional-statements\n excluded.push(elemSub); // eslint-disable-line functional/immutable-data\n } else { // eslint-disable-line functional/no-conditional-statements\n res.message.push(`Subfield $${element.tag}$$${elemSub.code}should be excluded`); // eslint-disable-line functional/immutable-data\n }\n }\n });\n\n excluded.forEach(sf => record.removeSubfield(sf, element));\n // If no subfields remains, the whole field will be removed as well:\n if (element.subfields && element.subfields.length === 0) { // eslint-disable-line functional/no-conditional-statements\n record.removeField(element);\n }\n });\n }\n });\n });\n\n // Fix does not send response\n if (!fix) {\n if (res.message.length > 0) { // eslint-disable-line functional/no-conditional-statements\n res.valid = false; // eslint-disable-line functional/immutable-data\n }\n\n return res;\n }\n // Res.fix.push('Field $' + element.tag + ' excluded');\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"subfield-exclusion.js","names":["confSpec","tag","type","mandatory","ind1","ind2","subfields","code","value","forEach","obj","fun","Object","entries","isRegExp","re","RegExp","_default","config","Array","isArray","TypeError","configValid","description","validate","record","excludeSubfields","fix","checkMandatory","key","val","configMatchesSpec","data","spec","Error","subObj","subKey","subVal","conf","res","message","valid","confObj","found","get","element","every","confKey","confField","test","subField","excluded","elemSub","subFieldCodeFine","subFieldValueFine","push","sf","removeSubfield","length","removeField"],"sources":["../src/subfield-exclusion.js"],"sourcesContent":["// Tag (RegExp): Pattern to match the field's tags Mandatory\n// ind1 (RegExp): Pattern to match the field's ind1 property\n// ind2 (RegExp): Pattern to match the field's ind2 property\n// subfields (Array<Object>): An array of objects with the following properties (Mandatory):\n// // code (RegExp): Pattern to match the subfield's code Mandatory\n// // value (RegExp): Pattern to match the subfield's value\n\n// Configuration specification\nconst confSpec = {\n tag: { // Pattern to match the field's tags\n type: 'RegExp',\n mandatory: true\n },\n ind1: { // Pattern to match the field's ind1 property.\n type: 'RegExp' // Array<Indicator>\n },\n ind2: { // Pattern to match the field's ind2 property.\n type: 'RegExp' // Array<Indicator>\n },\n subfields: { // An array of objects with the following properties\n code: {\n type: 'RegExp',\n mandatory: true\n },\n value: {\n type: 'RegExp'\n },\n mandatory: true\n }\n};\n\nfunction forEach(obj, fun) {\n Object.entries(obj).forEach(fun);\n}\n\nfunction isRegExp(re) {\n return re instanceof RegExp;\n}\n\nexport default function (config) {\n if (!Array.isArray(config)) {\n throw new TypeError('Configuration array not provided');\n }\n\n configValid(config);\n\n return {\n description:\n 'Checks that the record does not contain the configured subfields',\n validate: record => excludeSubfields(record, config, false),\n fix: record => excludeSubfields(record, config, true)\n };\n\n /// /////////////////////////////////////////\n // These check that configuration is valid\n function configValid(config) {\n config.forEach(obj => {\n checkMandatory(confSpec, obj);\n\n forEach(obj, ([key, val]) => {\n configMatchesSpec(val, key, confSpec);\n });\n });\n }\n\n // Recursive validator\n function configMatchesSpec(data, key, spec) {\n // Field not found in configuration spec\n if (!spec[key]) {\n throw new Error(`Configuration not valid - unidentified value: ${key}`);\n }\n\n // If configuration type does not match type in configuration spec\n if (typeof data !== spec[key].type &&\n (spec[key].type === 'RegExp' && !isRegExp(data))) {\n throw new Error(`Configuration not valid - invalid data type for: ${key}`);\n }\n\n // Check subfields recursively\n if (key === 'subfields') { // eslint-disable-line functional/no-conditional-statements\n forEach(data, ([, subObj]) => {\n // Console.log(\"subObj: \", subObj, \" type: \", typeof subObj, !(Array.isArray(subObj)))\n if (typeof subObj === 'object' && !Array.isArray(subObj)) { // eslint-disable-line functional/no-conditional-statements\n checkMandatory(spec[key], subObj);\n\n forEach(subObj, ([subKey, subVal]) => {\n configMatchesSpec(subVal, subKey, spec[key]);\n });\n } else {\n throw new TypeError(`Configuration not valid - subfield: ${subObj} not object`);\n }\n });\n }\n }\n\n function checkMandatory(spec, obj) {\n // Check if all mandatory fields are present\n forEach(spec, ([key, val]) => {\n if (val.mandatory && typeof obj[key] === 'undefined') {\n throw new Error(`Configuration not valid - missing mandatory element: ${key}`);\n }\n });\n }\n /// /////////////////////////////////////////\n\n /// /////////////////////////////////////////\n // These check that record is valid\n function excludeSubfields(record, conf, fix) {\n const res = {message: [], valid: true};\n\n // Parse trough every element of config array\n conf.forEach(confObj => {\n const found = record.get(confObj.tag); // Find matching record fields based on mandatory tag\n\n // Check if some of found record fields matches all configuration fields\n found.forEach(element => {\n // Compare each found element against each configuration object\n if (Object.entries(confObj).every(([confKey, confField]) => {\n // Tag already checked at .get(), subfields later\n if (confKey === 'tag' || confKey === 'subfields') {\n return true;\n }\n\n // Configuration object is RegExp and record value matches it\n if (element[confKey] && isRegExp(confField) && confField.test(element[confKey])) {\n return true;\n }\n\n // Configuration object not found from found element\n return false;\n })) { // eslint-disable-line functional/no-conditional-statements\n // All configuration fields match, check if some subfields should be excluded.\n confObj.subfields.forEach(subField => {\n const excluded = [];\n\n element.subfields.forEach(elemSub => {\n // Check if subfield matches configuration spec\n const subFieldCodeFine = subField.code && elemSub.code && subField.code.test(elemSub.code);\n const subFieldValueFine = subField.value && elemSub.value && subField.value.test(elemSub.value);\n if (subFieldCodeFine && (typeof subField.value === 'undefined' || subFieldValueFine)) {\n if (fix) { // eslint-disable-line functional/no-conditional-statements\n excluded.push(elemSub); // eslint-disable-line functional/immutable-data\n } else { // eslint-disable-line functional/no-conditional-statements\n res.message.push(`Subfield $${element.tag}$$${elemSub.code}should be excluded`); // eslint-disable-line functional/immutable-data\n }\n }\n });\n\n excluded.forEach(sf => record.removeSubfield(sf, element));\n // If no subfields remains, the whole field will be removed as well:\n if (element.subfields && element.subfields.length === 0) { // eslint-disable-line functional/no-conditional-statements\n record.removeField(element);\n }\n });\n }\n });\n });\n\n // Fix does not send response\n if (!fix) {\n if (res.message.length > 0) { // eslint-disable-line functional/no-conditional-statements\n res.valid = false; // eslint-disable-line functional/immutable-data\n }\n\n return res;\n }\n // Res.fix.push('Field $' + element.tag + ' excluded');\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var _chai = require("chai");
|
|
4
4
|
var _marcRecord = require("@natlibfi/marc-record");
|
|
5
5
|
var _subfieldExclusion = _interopRequireDefault(require("../src/subfield-exclusion"));
|
|
6
|
-
function _interopRequireDefault(
|
|
6
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
7
7
|
//import chaiAsPromised from 'chai-as-promised';
|
|
8
8
|
|
|
9
9
|
//chai.use(chaiAsPromised);
|
|
@@ -1 +1 @@
|
|
|
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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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"subfield-exclusion.spec.js","names":["_chai","require","_marcRecord","_subfieldExclusion","_interopRequireDefault","e","__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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","ignoreList":[]}
|