@natlibfi/marc-record-validators-melinda 10.15.2-alpha.1 → 10.15.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/ending-punctuation.js +0 -5
- package/dist/ending-punctuation.js.map +1 -1
- package/dist/ending-punctuation.spec.js +0 -8
- package/dist/ending-punctuation.spec.js.map +1 -1
- package/dist/field-505-separators.js +0 -2
- package/dist/field-505-separators.js.map +1 -1
- package/dist/field-521-fix.js +0 -1
- package/dist/field-521-fix.js.map +1 -1
- package/dist/field-exclusion.js +0 -3
- package/dist/field-exclusion.js.map +1 -1
- package/dist/field-exclusion.spec.js +0 -2
- package/dist/field-exclusion.spec.js.map +1 -1
- package/dist/fixRelatorTerms.js +1 -2
- package/dist/fixRelatorTerms.js.map +1 -1
- package/dist/identical-fields.js +0 -1
- package/dist/identical-fields.js.map +1 -1
- package/dist/indicator-fixes.js +0 -7
- package/dist/indicator-fixes.js.map +1 -1
- package/dist/isbn-issn.js +0 -3
- package/dist/isbn-issn.js.map +1 -1
- package/dist/item-language.js +0 -1
- package/dist/item-language.js.map +1 -1
- package/dist/mergeField500Lisapainokset.js +0 -3
- package/dist/mergeField500Lisapainokset.js.map +1 -1
- package/dist/mergeRelatorTermFields.js +1 -2
- package/dist/mergeRelatorTermFields.js.map +1 -1
- package/dist/normalize-identifiers.js +2 -0
- package/dist/normalize-identifiers.js.map +1 -1
- package/dist/normalize-qualifying-information.js +0 -1
- package/dist/normalize-qualifying-information.js.map +1 -1
- package/dist/normalize-utf8-diacritics.js +1 -0
- package/dist/normalize-utf8-diacritics.js.map +1 -1
- package/dist/normalizeFieldForComparison.js +0 -6
- package/dist/normalizeFieldForComparison.js.map +1 -1
- package/dist/prepublicationUtils.js +0 -1
- package/dist/prepublicationUtils.js.map +1 -1
- package/dist/punctuation/index.js +0 -9
- package/dist/punctuation/index.js.map +1 -1
- package/dist/punctuation2.js +0 -9
- package/dist/punctuation2.js.map +1 -1
- package/dist/reindexSubfield6OccurenceNumbers.js +0 -1
- package/dist/reindexSubfield6OccurenceNumbers.js.map +1 -1
- package/dist/removeDuplicateDataFields.js +0 -6
- package/dist/removeDuplicateDataFields.js.map +1 -1
- package/dist/removeInferiorDataFields.js +1 -2
- package/dist/removeInferiorDataFields.js.map +1 -1
- package/dist/resolvable-ext-references-melinda.js +0 -3
- package/dist/resolvable-ext-references-melinda.js.map +1 -1
- package/dist/resolveOrphanedSubfield6s.js +0 -2
- package/dist/resolveOrphanedSubfield6s.js.map +1 -1
- package/dist/sanitize-vocabulary-source-codes.js +1 -0
- package/dist/sanitize-vocabulary-source-codes.js.map +1 -1
- package/dist/sort-tags.js +0 -1
- package/dist/sort-tags.js.map +1 -1
- package/dist/sortFields.js +1 -1
- package/dist/sortFields.js.map +1 -1
- package/dist/sortRelatorTerms.js +1 -1
- package/dist/sortRelatorTerms.js.map +1 -1
- package/dist/sortSubfields.js +0 -3
- package/dist/sortSubfields.js.map +1 -1
- package/dist/subfield-exclusion.js +0 -4
- package/dist/subfield-exclusion.js.map +1 -1
- package/dist/subfield-exclusion.spec.js +1 -0
- package/dist/subfield-exclusion.spec.js.map +1 -1
- package/dist/subfield6Utils.js +0 -6
- package/dist/subfield6Utils.js.map +1 -1
- package/dist/subfield8Utils.js +0 -2
- package/dist/subfield8Utils.js.map +1 -1
- package/dist/subfieldValueNormalizations.js +0 -1
- package/dist/subfieldValueNormalizations.js.map +1 -1
- package/dist/sync-007-and-300.js +1 -2
- package/dist/sync-007-and-300.js.map +1 -1
- package/dist/unicode-decomposition.js +0 -1
- package/dist/unicode-decomposition.js.map +1 -1
- package/dist/update-field-540.js +1 -1
- package/dist/update-field-540.js.map +1 -1
- package/dist/urn.js +0 -1
- package/dist/urn.js.map +1 -1
- package/dist/utils.js +0 -1
- package/dist/utils.js.map +1 -1
- package/package.json +10 -10
- package/src/removeInferiorDataFields.js +1 -1
- package/test-fixtures/remove-inferior-datafields/f12/metadata.json +1 -1
|
@@ -56,7 +56,6 @@ function field505FixSubfieldA(field) {
|
|
|
56
56
|
a.value = a.value.replace(/ ; /ug, ' -- '); // eslint-disable-line functional/immutable-data
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
|
-
|
|
60
59
|
function field505FixSubfieldTRG(field) {
|
|
61
60
|
// Modify subfield if next subfield is $t:
|
|
62
61
|
const subfieldsThatWillBeModified = field.subfields.filter((sf, i) => i + 1 < field.subfields.length && field.subfields[i + 1].code === 't');
|
|
@@ -65,7 +64,6 @@ function field505FixSubfieldTRG(field) {
|
|
|
65
64
|
sf.value = sf.value.replace(/ ;$/u, ' --'); // eslint-disable-line functional/immutable-data
|
|
66
65
|
}
|
|
67
66
|
}
|
|
68
|
-
|
|
69
67
|
function fix505(field) {
|
|
70
68
|
if (field.tag !== '505' || !field.subfields) {
|
|
71
69
|
return field;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-505-separators.js","names":["_clone","_interopRequireDefault","require","_utils","obj","__esModule","default","_default","description","validate","fix","record","fields","forEach","field","fix505","res","message","valid","validateField","length","orig","fieldToString","normalizedField","clone","mod","push","field505FixSubfieldA","a","subfields","filter","sf","code","fixSubfieldA","value","replace","field505FixSubfieldTRG","subfieldsThatWillBeModified","i","fixSubfieldThatPrecedesT","tag"],"sources":["../src/field-505-separators.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport clone from 'clone';\nimport {fieldToString} from './utils';\n\n// Author(s): Nicholas Volk\nexport default function () {\n\n return {\n description: 'Normalize \" ; \" separators as \" -- \"',\n validate, fix\n };\n\n function fix(record) {\n record.fields.forEach(field => {\n fix505(field);\n });\n\n const res = {message: [], fix: [], valid: true};\n return res;\n }\n\n function validate(record) {\n const res = {message: []};\n\n record.fields?.forEach(field => {\n validateField(field, res);\n });\n\n res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data\n return res;\n }\n\n function validateField(field, res) {\n const orig = fieldToString(field);\n\n const normalizedField = fix505(clone(field));\n const mod = fieldToString(normalizedField);\n if (orig !== mod) { // Fail as the input is \"broken\"/\"crap\"/sumthing\n res.message.push(`'TODO: ${orig}' => '${mod}'`); // eslint-disable-line functional/immutable-data\n return;\n }\n return;\n }\n}\n\n\nfunction field505FixSubfieldA(field) {\n const a = field.subfields.filter(sf => sf.code === 'a');\n\n a.forEach(sf => fixSubfieldA(sf));\n\n function fixSubfieldA(a) {\n a.value = a.value.replace(/ ; /ug, ' -- '); // eslint-disable-line functional/immutable-data\n }\n}\n\nfunction field505FixSubfieldTRG(field) {\n // Modify subfield if next subfield is $t:\n const subfieldsThatWillBeModified = field.subfields.filter((sf, i) => i + 1 < field.subfields.length && field.subfields[i + 1].code === 't');\n\n subfieldsThatWillBeModified.forEach(sf => fixSubfieldThatPrecedesT(sf));\n\n function fixSubfieldThatPrecedesT(sf) {\n sf.value = sf.value.replace(/ ;$/u, ' --'); // eslint-disable-line functional/immutable-data\n }\n}\n\nfunction fix505(field) {\n if (field.tag !== '505' || !field.subfields) {\n return field;\n }\n field505FixSubfieldTRG(field);\n field505FixSubfieldA(field);\n return field;\n}\n"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAAsC,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAFtC;;AAIA;AACe,SAAAG,SAAA,EAAY;EAEzB,OAAO;IACLC,WAAW,EAAE,sCAAsC;IACnDC,QAAQ;IAAEC;EACZ,CAAC;EAED,SAASA,GAAGA,CAACC,MAAM,EAAE;IACnBA,MAAM,CAACC,MAAM,CAACC,OAAO,CAACC,KAAK,IAAI;MAC7BC,MAAM,CAACD,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,MAAME,GAAG,GAAG;MAACC,OAAO,EAAE,EAAE;MAAEP,GAAG,EAAE,EAAE;MAAEQ,KAAK,EAAE;IAAI,CAAC;IAC/C,OAAOF,GAAG;EACZ;EAEA,SAASP,QAAQA,CAACE,MAAM,EAAE;IACxB,MAAMK,GAAG,GAAG;MAACC,OAAO,EAAE;IAAE,CAAC;IAEzBN,MAAM,CAACC,MAAM,EAAEC,OAAO,CAACC,KAAK,IAAI;MAC9BK,aAAa,CAACL,KAAK,EAAEE,GAAG,CAAC;IAC3B,CAAC,CAAC;IAEFA,GAAG,CAACE,KAAK,GAAG,EAAEF,GAAG,CAACC,OAAO,CAACG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;IACxC,OAAOJ,GAAG;EACZ;EAEA,SAASG,aAAaA,CAACL,KAAK,EAAEE,GAAG,EAAE;IACjC,MAAMK,IAAI,GAAG,IAAAC,oBAAa,EAACR,KAAK,CAAC;IAEjC,MAAMS,eAAe,GAAGR,MAAM,CAAC,IAAAS,cAAK,EAACV,KAAK,CAAC,CAAC;IAC5C,MAAMW,GAAG,GAAG,IAAAH,oBAAa,EAACC,eAAe,CAAC;IAC1C,IAAIF,IAAI,KAAKI,GAAG,EAAE;MAAE;MAClBT,GAAG,CAACC,OAAO,CAACS,IAAI,CAAE,UAASL,IAAK,SAAQI,GAAI,GAAE,CAAC,CAAC,CAAC;MACjD;IACF;IACA;EACF;AACF;AAGA,SAASE,oBAAoBA,CAACb,KAAK,EAAE;EACnC,MAAMc,CAAC,GAAGd,KAAK,CAACe,SAAS,CAACC,MAAM,CAACC,EAAE,IAAIA,EAAE,CAACC,IAAI,KAAK,GAAG,CAAC;EAEvDJ,CAAC,CAACf,OAAO,CAACkB,EAAE,IAAIE,YAAY,CAACF,EAAE,CAAC,CAAC;EAEjC,SAASE,YAAYA,CAACL,CAAC,EAAE;IACvBA,CAAC,CAACM,KAAK,GAAGN,CAAC,CAACM,KAAK,CAACC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;EAC9C;AACF
|
|
1
|
+
{"version":3,"file":"field-505-separators.js","names":["_clone","_interopRequireDefault","require","_utils","obj","__esModule","default","_default","description","validate","fix","record","fields","forEach","field","fix505","res","message","valid","validateField","length","orig","fieldToString","normalizedField","clone","mod","push","field505FixSubfieldA","a","subfields","filter","sf","code","fixSubfieldA","value","replace","field505FixSubfieldTRG","subfieldsThatWillBeModified","i","fixSubfieldThatPrecedesT","tag"],"sources":["../src/field-505-separators.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport clone from 'clone';\nimport {fieldToString} from './utils';\n\n// Author(s): Nicholas Volk\nexport default function () {\n\n return {\n description: 'Normalize \" ; \" separators as \" -- \"',\n validate, fix\n };\n\n function fix(record) {\n record.fields.forEach(field => {\n fix505(field);\n });\n\n const res = {message: [], fix: [], valid: true};\n return res;\n }\n\n function validate(record) {\n const res = {message: []};\n\n record.fields?.forEach(field => {\n validateField(field, res);\n });\n\n res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data\n return res;\n }\n\n function validateField(field, res) {\n const orig = fieldToString(field);\n\n const normalizedField = fix505(clone(field));\n const mod = fieldToString(normalizedField);\n if (orig !== mod) { // Fail as the input is \"broken\"/\"crap\"/sumthing\n res.message.push(`'TODO: ${orig}' => '${mod}'`); // eslint-disable-line functional/immutable-data\n return;\n }\n return;\n }\n}\n\n\nfunction field505FixSubfieldA(field) {\n const a = field.subfields.filter(sf => sf.code === 'a');\n\n a.forEach(sf => fixSubfieldA(sf));\n\n function fixSubfieldA(a) {\n a.value = a.value.replace(/ ; /ug, ' -- '); // eslint-disable-line functional/immutable-data\n }\n}\n\nfunction field505FixSubfieldTRG(field) {\n // Modify subfield if next subfield is $t:\n const subfieldsThatWillBeModified = field.subfields.filter((sf, i) => i + 1 < field.subfields.length && field.subfields[i + 1].code === 't');\n\n subfieldsThatWillBeModified.forEach(sf => fixSubfieldThatPrecedesT(sf));\n\n function fixSubfieldThatPrecedesT(sf) {\n sf.value = sf.value.replace(/ ;$/u, ' --'); // eslint-disable-line functional/immutable-data\n }\n}\n\nfunction fix505(field) {\n if (field.tag !== '505' || !field.subfields) {\n return field;\n }\n field505FixSubfieldTRG(field);\n field505FixSubfieldA(field);\n return field;\n}\n"],"mappings":"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"}
|
package/dist/field-521-fix.js
CHANGED
|
@@ -64,7 +64,6 @@ function fixSubfieldA(a) {
|
|
|
64
64
|
// MET-332:
|
|
65
65
|
replace(/^(Ikäsuositus) ([0-9])/u, '$1: $2'); // eslint-disable-line prefer-named-capture-group, functional/immutable-data
|
|
66
66
|
}
|
|
67
|
-
|
|
68
67
|
function fixSubfieldAInternalPunctuation(field) {
|
|
69
68
|
const a = field.subfields.filter(sf => sf.code === 'a');
|
|
70
69
|
a.forEach(sf => fixSubfieldA(sf));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-521-fix.js","names":["_clone","_interopRequireDefault","require","_utils","obj","__esModule","default","_default","description","validate","fix","record","fields","forEach","field","fix521","res","message","valid","validateField","length","orig","fieldToString","normalizedField","clone","mod","push","fixSubfieldA","a","value","replace","fixSubfieldAInternalPunctuation","subfields","filter","sf","code","getIndicator1","match","undefined","fixIndicator1","ind1","tag"],"sources":["../src/field-521-fix.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport clone from 'clone';\nimport {fieldToString} from './utils';\n\n// Author(s): Nicholas Volk\nexport default function () {\n\n return {\n description: 'Various fixes for field 521',\n validate, fix\n };\n\n function fix(record) {\n record.fields.forEach(field => {\n fix521(field);\n });\n // Fix always succeeds (even when it really does not):\n const res = {message: [], fix: [], valid: true};\n return res;\n }\n\n function validate(record) {\n const res = {message: []};\n\n // Actual parsing of all fields\n /*\n if (!record.fields) {\n return false;\n }\n */\n\n record.fields?.forEach(field => {\n validateField(field, res);\n });\n\n res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data\n return res;\n }\n\n function validateField(field, res) {\n const orig = fieldToString(field);\n\n const normalizedField = fix521(clone(field));\n const mod = fieldToString(normalizedField);\n if (orig !== mod) { // Fail as the input is \"broken\"/\"crap\"/sumthing\n res.message.push(`'TODO: ${orig}' => '${mod}'`); // eslint-disable-line functional/immutable-data\n return;\n }\n return;\n }\n}\n\nfunction fixSubfieldA(a) {\n a.value = a.value. // eslint-disable-line functional/immutable-data\n // MET-332:\n replace(/^(Ikäsuositus) ([0-9])/u, '$1: $2'); // eslint-disable-line prefer-named-capture-group, functional/immutable-data\n}\n\nfunction fixSubfieldAInternalPunctuation(field) {\n const a = field.subfields.filter(sf => sf.code === 'a');\n\n a.forEach(sf => fixSubfieldA(sf));\n}\n\nfunction getIndicator1(field) {\n const [a] = field.subfields.filter(sf => sf.code === 'a');\n if (a) {\n if (a.value.match(/^Ikäsuositus/u)) {\n return '1';\n }\n }\n return undefined;\n}\n\nfunction fixIndicator1(field) {\n const value = getIndicator1(field);\n if (value) {\n field.ind1 = value; // eslint-disable-line functional/immutable-data\n return;\n }\n\n}\n\nfunction fix521(field) {\n if (field.tag !== '521' || !field.subfields) {\n return field;\n }\n fixIndicator1(field);\n fixSubfieldAInternalPunctuation(field);\n return field;\n}\n\n"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAAsC,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAFtC;;AAIA;AACe,SAAAG,SAAA,EAAY;EAEzB,OAAO;IACLC,WAAW,EAAE,6BAA6B;IAC1CC,QAAQ;IAAEC;EACZ,CAAC;EAED,SAASA,GAAGA,CAACC,MAAM,EAAE;IACnBA,MAAM,CAACC,MAAM,CAACC,OAAO,CAACC,KAAK,IAAI;MAC7BC,MAAM,CAACD,KAAK,CAAC;IACf,CAAC,CAAC;IACF;IACA,MAAME,GAAG,GAAG;MAACC,OAAO,EAAE,EAAE;MAAEP,GAAG,EAAE,EAAE;MAAEQ,KAAK,EAAE;IAAI,CAAC;IAC/C,OAAOF,GAAG;EACZ;EAEA,SAASP,QAAQA,CAACE,MAAM,EAAE;IACxB,MAAMK,GAAG,GAAG;MAACC,OAAO,EAAE;IAAE,CAAC;;IAEzB;IACA;AACJ;AACA;AACA;AACA;;IAEIN,MAAM,CAACC,MAAM,EAAEC,OAAO,CAACC,KAAK,IAAI;MAC9BK,aAAa,CAACL,KAAK,EAAEE,GAAG,CAAC;IAC3B,CAAC,CAAC;IAEFA,GAAG,CAACE,KAAK,GAAG,EAAEF,GAAG,CAACC,OAAO,CAACG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;IACxC,OAAOJ,GAAG;EACZ;EAEA,SAASG,aAAaA,CAACL,KAAK,EAAEE,GAAG,EAAE;IACjC,MAAMK,IAAI,GAAG,IAAAC,oBAAa,EAACR,KAAK,CAAC;IAEjC,MAAMS,eAAe,GAAGR,MAAM,CAAC,IAAAS,cAAK,EAACV,KAAK,CAAC,CAAC;IAC5C,MAAMW,GAAG,GAAG,IAAAH,oBAAa,EAACC,eAAe,CAAC;IAC1C,IAAIF,IAAI,KAAKI,GAAG,EAAE;MAAE;MAClBT,GAAG,CAACC,OAAO,CAACS,IAAI,CAAE,UAASL,IAAK,SAAQI,GAAI,GAAE,CAAC,CAAC,CAAC;MACjD;IACF;IACA;EACF;AACF;AAEA,SAASE,YAAYA,CAACC,CAAC,EAAE;EACvBA,CAAC,CAACC,KAAK,GAAGD,CAAC,CAACC,KAAK;EAAE;EACjB;EACAC,OAAO,CAAC,yBAAyB,EAAE,QAAQ,CAAC,CAAC,CAAC;AAClD
|
|
1
|
+
{"version":3,"file":"field-521-fix.js","names":["_clone","_interopRequireDefault","require","_utils","obj","__esModule","default","_default","description","validate","fix","record","fields","forEach","field","fix521","res","message","valid","validateField","length","orig","fieldToString","normalizedField","clone","mod","push","fixSubfieldA","a","value","replace","fixSubfieldAInternalPunctuation","subfields","filter","sf","code","getIndicator1","match","undefined","fixIndicator1","ind1","tag"],"sources":["../src/field-521-fix.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport clone from 'clone';\nimport {fieldToString} from './utils';\n\n// Author(s): Nicholas Volk\nexport default function () {\n\n return {\n description: 'Various fixes for field 521',\n validate, fix\n };\n\n function fix(record) {\n record.fields.forEach(field => {\n fix521(field);\n });\n // Fix always succeeds (even when it really does not):\n const res = {message: [], fix: [], valid: true};\n return res;\n }\n\n function validate(record) {\n const res = {message: []};\n\n // Actual parsing of all fields\n /*\n if (!record.fields) {\n return false;\n }\n */\n\n record.fields?.forEach(field => {\n validateField(field, res);\n });\n\n res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data\n return res;\n }\n\n function validateField(field, res) {\n const orig = fieldToString(field);\n\n const normalizedField = fix521(clone(field));\n const mod = fieldToString(normalizedField);\n if (orig !== mod) { // Fail as the input is \"broken\"/\"crap\"/sumthing\n res.message.push(`'TODO: ${orig}' => '${mod}'`); // eslint-disable-line functional/immutable-data\n return;\n }\n return;\n }\n}\n\nfunction fixSubfieldA(a) {\n a.value = a.value. // eslint-disable-line functional/immutable-data\n // MET-332:\n replace(/^(Ikäsuositus) ([0-9])/u, '$1: $2'); // eslint-disable-line prefer-named-capture-group, functional/immutable-data\n}\n\nfunction fixSubfieldAInternalPunctuation(field) {\n const a = field.subfields.filter(sf => sf.code === 'a');\n\n a.forEach(sf => fixSubfieldA(sf));\n}\n\nfunction getIndicator1(field) {\n const [a] = field.subfields.filter(sf => sf.code === 'a');\n if (a) {\n if (a.value.match(/^Ikäsuositus/u)) {\n return '1';\n }\n }\n return undefined;\n}\n\nfunction fixIndicator1(field) {\n const value = getIndicator1(field);\n if (value) {\n field.ind1 = value; // eslint-disable-line functional/immutable-data\n return;\n }\n\n}\n\nfunction fix521(field) {\n if (field.tag !== '521' || !field.subfields) {\n return field;\n }\n fixIndicator1(field);\n fixSubfieldAInternalPunctuation(field);\n return field;\n}\n\n"],"mappings":"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"}
|
package/dist/field-exclusion.js
CHANGED
|
@@ -182,7 +182,6 @@ function _default(config) {
|
|
|
182
182
|
|
|
183
183
|
// Configuration object not found from found element
|
|
184
184
|
}
|
|
185
|
-
|
|
186
185
|
return false;
|
|
187
186
|
})) {
|
|
188
187
|
// All configuration fields match, element should be excluded.
|
|
@@ -195,7 +194,6 @@ function _default(config) {
|
|
|
195
194
|
}
|
|
196
195
|
}
|
|
197
196
|
});
|
|
198
|
-
|
|
199
197
|
excluded.forEach(field => record.removeField(field));
|
|
200
198
|
});
|
|
201
199
|
|
|
@@ -205,7 +203,6 @@ function _default(config) {
|
|
|
205
203
|
// eslint-disable-line functional/no-conditional-statements
|
|
206
204
|
res.valid = false; // eslint-disable-line functional/immutable-data
|
|
207
205
|
}
|
|
208
|
-
|
|
209
206
|
return res;
|
|
210
207
|
}
|
|
211
208
|
// Res.fix.push('Field $' + element.tag + ' excluded');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-exclusion.js","names":["confSpec","tag","type","mandatory","value","excl","ind1","ind2","subfields","code","dependencies","leader","forEach","obj","fun","Object","entries","isRegExp","re","result","RegExp","_default","config","Array","isArray","TypeError","objOnlyConfigs","map","e","configValid","description","validate","record","excludeFields","fix","excluded","checkMandatory","key","val","configMatchesSpec","push","includes","Error","data","spec","subObj","subKey","subVal","keys","length","subFieldCheck","confField","element","values","some","subField","elemSub","test","conf","res","message","valid","confObj","found","get","every","confKey","dependency","field","removeField"],"sources":["../src/field-exclusion.js"],"sourcesContent":["// Configuration specification\nconst confSpec = {\n tag: { // Pattern to match the field's tags\n type: 'RegExp',\n mandatory: true\n },\n value: { // Regular expression object for matching a controlfields value. Mutual exclusive with\n type: 'RegExp',\n excl: ['subfields', 'ind1', 'ind2']\n },\n ind1: { // Pattern to match the field's ind1 property.\n type: 'RegExp', // Array<Indicator>\n excl: ['value']\n },\n ind2: { // Pattern to match the field's ind2 property.\n type: 'RegExp', // Array<Indicator>\n excl: ['value']\n },\n subfields: { // An array of objects with the following properties\n code: {\n type: 'RegExp',\n mandatory: true\n },\n value: {\n type: 'RegExp',\n mandatory: true\n }\n },\n dependencies: {\n leader: {\n type: 'RegExp'\n }\n }\n};\n\nfunction forEach(obj, fun) {\n Object.entries(obj).forEach(fun);\n}\n\nfunction isRegExp(re) {\n const result = re instanceof RegExp;\n return result;\n}\n\nexport default function (config) {\n if (!Array.isArray(config)) {\n throw new TypeError('Configuration array not provided');\n }\n\n // Transform RegExp-only elements to objects\n const objOnlyConfigs = config.map(e => isRegExp(e) ? {tag: e} : e);\n configValid(objOnlyConfigs);\n\n return {\n description:\n 'Checks that the record does not contain the configured fields',\n validate: record => excludeFields(record, objOnlyConfigs, false),\n fix: record => excludeFields(record, objOnlyConfigs, true)\n };\n\n /// /////////////////////////////////////////\n // These check that configuration is valid\n function configValid(config) {\n config.forEach(obj => {\n const excluded = []; // Validate fields: check that they are valid to confSpec (exists, correct data type), concat excluded elements\n\n checkMandatory(confSpec, obj);\n\n forEach(obj, ([key, val]) => {\n configMatchesSpec(val, key, confSpec);\n // Concat all excluded elements to array\n if (confSpec[key].excl) { // eslint-disable-line functional/no-conditional-statements\n excluded.push(...confSpec[key].excl); // eslint-disable-line functional/immutable-data\n }\n });\n\n // Check that no excluded elements are in use\n forEach(obj, ([key]) => {\n if (excluded.includes(key)) {\n throw new Error('Configuration not valid - excluded element');\n }\n });\n });\n }\n\n // Recursive validator\n function configMatchesSpec(data, key, spec) {\n // Field not found in configuration spec\n if (!spec[key]) {\n throw new Error(`Configuration not valid - unidentified value: ${key}`);\n }\n\n // If configuration type does not match type in configuration spec\n if (typeof data !== spec[key].type &&\n (spec[key].type === 'RegExp' && !isRegExp(data))) {\n throw new Error(`Configuration not valid - invalid data type for: ${key}`);\n }\n\n // Check subfields recursively\n if (key === 'subfields') { // 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 if (key === 'dependencies') { // eslint-disable-line functional/no-conditional-statements\n forEach(data, ([, subObj]) => {\n if (!(typeof subObj === 'object' && !Array.isArray(subObj) && Object.keys(subObj).length === 1 && isRegExp(subObj.leader))) {\n throw new TypeError('Configuration not valid - Invalid dependencies config');\n }\n });\n }\n }\n\n function checkMandatory(spec, obj) {\n // Check if all mandatory fields are present\n forEach(spec, ([key, val]) => {\n if (val.mandatory && typeof obj[key] === 'undefined') {\n throw new Error(`Configuration not valid - missing mandatory element: ${key}`);\n }\n });\n }\n /// /////////////////////////////////////////\n\n /// /////////////////////////////////////////\n // These check that record is valid\n function subFieldCheck(confField, element) {\n // Parse trough every configuration subfield, check if one matches some subobjects fields\n return Object.values(confField).some(subField => Object.values(element.subfields)\n // Check if subfield matches configuration spec\n .some(elemSub => subField.code && elemSub.code && subField.code.test(elemSub.code) &&\n subField.value && elemSub.value && subField.value.test(elemSub.value)));\n }\n\n function excludeFields(record, conf, fix) {\n const res = {message: [], valid: true};\n\n // Parse trough every element of config array\n forEach(conf, ([, confObj]) => {\n const found = record.get(confObj.tag); // Find matching record fields based on mandatory tag\n const excluded = [];\n\n // Check if some of found record fields matches all configuration fields\n found.forEach(element => {\n // Compare each found element against each configuration object\n if (Object.entries(confObj).every(([confKey, confField]) => {\n // This is already checked on .get()\n if (confKey === 'tag') {\n return true;\n }\n\n if (confKey === 'dependencies') {\n return confObj.dependencies.every(dependency => dependency.leader.test(record.leader));\n }\n\n // Check subfield configurations\n if (confKey === 'subfields') {\n return subFieldCheck(confField, element);\n }\n\n // Configuration object is RegExp and record value matches it\n if (element[confKey] && isRegExp(confField) && confField.test(element[confKey])) {\n return true;\n\n // Configuration object not found from found element\n }\n\n return false;\n })) {\n // All configuration fields match, element should be excluded.\n if (fix) { // eslint-disable-line functional/no-conditional-statements\n excluded.push(element); // eslint-disable-line functional/immutable-data\n } else { // eslint-disable-line functional/no-conditional-statements\n res.message.push(`Field $${element.tag} should be excluded`); // eslint-disable-line functional/immutable-data\n }\n }\n });\n\n excluded.forEach(field => record.removeField(field));\n });\n\n // Fix does not send response\n if (!fix) {\n if (res.message.length > 0) { // 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}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"field-exclusion.js","names":["confSpec","tag","type","mandatory","value","excl","ind1","ind2","subfields","code","dependencies","leader","forEach","obj","fun","Object","entries","isRegExp","re","result","RegExp","_default","config","Array","isArray","TypeError","objOnlyConfigs","map","e","configValid","description","validate","record","excludeFields","fix","excluded","checkMandatory","key","val","configMatchesSpec","push","includes","Error","data","spec","subObj","subKey","subVal","keys","length","subFieldCheck","confField","element","values","some","subField","elemSub","test","conf","res","message","valid","confObj","found","get","every","confKey","dependency","field","removeField"],"sources":["../src/field-exclusion.js"],"sourcesContent":["// Configuration specification\nconst confSpec = {\n tag: { // Pattern to match the field's tags\n type: 'RegExp',\n mandatory: true\n },\n value: { // Regular expression object for matching a controlfields value. Mutual exclusive with\n type: 'RegExp',\n excl: ['subfields', 'ind1', 'ind2']\n },\n ind1: { // Pattern to match the field's ind1 property.\n type: 'RegExp', // Array<Indicator>\n excl: ['value']\n },\n ind2: { // Pattern to match the field's ind2 property.\n type: 'RegExp', // Array<Indicator>\n excl: ['value']\n },\n subfields: { // An array of objects with the following properties\n code: {\n type: 'RegExp',\n mandatory: true\n },\n value: {\n type: 'RegExp',\n mandatory: true\n }\n },\n dependencies: {\n leader: {\n type: 'RegExp'\n }\n }\n};\n\nfunction forEach(obj, fun) {\n Object.entries(obj).forEach(fun);\n}\n\nfunction isRegExp(re) {\n const result = re instanceof RegExp;\n return result;\n}\n\nexport default function (config) {\n if (!Array.isArray(config)) {\n throw new TypeError('Configuration array not provided');\n }\n\n // Transform RegExp-only elements to objects\n const objOnlyConfigs = config.map(e => isRegExp(e) ? {tag: e} : e);\n configValid(objOnlyConfigs);\n\n return {\n description:\n 'Checks that the record does not contain the configured fields',\n validate: record => excludeFields(record, objOnlyConfigs, false),\n fix: record => excludeFields(record, objOnlyConfigs, true)\n };\n\n /// /////////////////////////////////////////\n // These check that configuration is valid\n function configValid(config) {\n config.forEach(obj => {\n const excluded = []; // Validate fields: check that they are valid to confSpec (exists, correct data type), concat excluded elements\n\n checkMandatory(confSpec, obj);\n\n forEach(obj, ([key, val]) => {\n configMatchesSpec(val, key, confSpec);\n // Concat all excluded elements to array\n if (confSpec[key].excl) { // eslint-disable-line functional/no-conditional-statements\n excluded.push(...confSpec[key].excl); // eslint-disable-line functional/immutable-data\n }\n });\n\n // Check that no excluded elements are in use\n forEach(obj, ([key]) => {\n if (excluded.includes(key)) {\n throw new Error('Configuration not valid - excluded element');\n }\n });\n });\n }\n\n // Recursive validator\n function configMatchesSpec(data, key, spec) {\n // Field not found in configuration spec\n if (!spec[key]) {\n throw new Error(`Configuration not valid - unidentified value: ${key}`);\n }\n\n // If configuration type does not match type in configuration spec\n if (typeof data !== spec[key].type &&\n (spec[key].type === 'RegExp' && !isRegExp(data))) {\n throw new Error(`Configuration not valid - invalid data type for: ${key}`);\n }\n\n // Check subfields recursively\n if (key === 'subfields') { // 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 if (key === 'dependencies') { // eslint-disable-line functional/no-conditional-statements\n forEach(data, ([, subObj]) => {\n if (!(typeof subObj === 'object' && !Array.isArray(subObj) && Object.keys(subObj).length === 1 && isRegExp(subObj.leader))) {\n throw new TypeError('Configuration not valid - Invalid dependencies config');\n }\n });\n }\n }\n\n function checkMandatory(spec, obj) {\n // Check if all mandatory fields are present\n forEach(spec, ([key, val]) => {\n if (val.mandatory && typeof obj[key] === 'undefined') {\n throw new Error(`Configuration not valid - missing mandatory element: ${key}`);\n }\n });\n }\n /// /////////////////////////////////////////\n\n /// /////////////////////////////////////////\n // These check that record is valid\n function subFieldCheck(confField, element) {\n // Parse trough every configuration subfield, check if one matches some subobjects fields\n return Object.values(confField).some(subField => Object.values(element.subfields)\n // Check if subfield matches configuration spec\n .some(elemSub => subField.code && elemSub.code && subField.code.test(elemSub.code) &&\n subField.value && elemSub.value && subField.value.test(elemSub.value)));\n }\n\n function excludeFields(record, conf, fix) {\n const res = {message: [], valid: true};\n\n // Parse trough every element of config array\n forEach(conf, ([, confObj]) => {\n const found = record.get(confObj.tag); // Find matching record fields based on mandatory tag\n const excluded = [];\n\n // Check if some of found record fields matches all configuration fields\n found.forEach(element => {\n // Compare each found element against each configuration object\n if (Object.entries(confObj).every(([confKey, confField]) => {\n // This is already checked on .get()\n if (confKey === 'tag') {\n return true;\n }\n\n if (confKey === 'dependencies') {\n return confObj.dependencies.every(dependency => dependency.leader.test(record.leader));\n }\n\n // Check subfield configurations\n if (confKey === 'subfields') {\n return subFieldCheck(confField, element);\n }\n\n // Configuration object is RegExp and record value matches it\n if (element[confKey] && isRegExp(confField) && confField.test(element[confKey])) {\n return true;\n\n // Configuration object not found from found element\n }\n\n return false;\n })) {\n // All configuration fields match, element should be excluded.\n if (fix) { // eslint-disable-line functional/no-conditional-statements\n excluded.push(element); // eslint-disable-line functional/immutable-data\n } else { // eslint-disable-line functional/no-conditional-statements\n res.message.push(`Field $${element.tag} should be excluded`); // eslint-disable-line functional/immutable-data\n }\n }\n });\n\n excluded.forEach(field => record.removeField(field));\n });\n\n // Fix does not send response\n if (!fix) {\n if (res.message.length > 0) { // 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}\n"],"mappings":"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"}
|
|
@@ -325,7 +325,6 @@ describe('field-exclusion', () => {
|
|
|
325
325
|
const config = [{
|
|
326
326
|
tag: /^(648|650|651|655)$/u // eslint-disable-line prefer-named-capture-group
|
|
327
327
|
}];
|
|
328
|
-
|
|
329
328
|
const recordValid = new _marcRecord.MarcRecord({
|
|
330
329
|
leader: 'foo',
|
|
331
330
|
fields: [{
|
|
@@ -712,7 +711,6 @@ describe('field-exclusion', () => {
|
|
|
712
711
|
value: /^(ysa|musa|allars|cilla)$/u
|
|
713
712
|
}] // eslint-disable-line prefer-named-capture-group
|
|
714
713
|
}];
|
|
715
|
-
|
|
716
714
|
const recordValid = new _marcRecord.MarcRecord({
|
|
717
715
|
leader: 'foo',
|
|
718
716
|
fields: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-exclusion.spec.js","names":["_chai","_interopRequireDefault","require","_chaiAsPromised","_marcRecord","_fieldExclusion","obj","__esModule","default","expect","chai","use","chaiAsPromised","describe","it","config","validator","validatorFactory","to","be","an","that","has","any","keys","description","a","validate","tag","subfields","code","value","error","with","property","ind1","unidentified","recordValid","MarcRecord","leader","fields","ind2","recordInvalid","recordInvalidDouble","recordInvalidFixed","valid","message","eql","fix","equalsTo","recordInvalidMulti","configInd","configValue","recordIndInvalid","recordValueInvalid","dependencies","record"],"sources":["../src/field-exclusion.spec.js"],"sourcesContent":["import chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/field-exclusion';\n\nconst {expect} = chai;\nchai.use(chaiAsPromised);\n\n// Factory validation\ndescribe('field-exclusion', () => {\n describe('#validate: Check configuration validation', () => {\n it('Creates a validator from simple config', async () => {\n const config = [/^500$/u];\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: /^500$/u,\n subfields: [{code: /9/u, value: /^(?!FENNI<KEEP>).*$/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('Fails to create a validator from invalid config - tag', async () => {\n const config = [\n {\n tag: '500',\n subfields: [{code: /9/u, value: /^(?!FENNI<KEEP>).*$/u}]\n }\n ];\n\n try {\n await 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 - msising array', async () => {\n const config = {\n tag: '500',\n subfields: [{code: /9/u, value: /^(?!FENNI<KEEP>).*$/u}]\n };\n\n try {\n await 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', async () => {\n const config = [\n {\n tag: /^500$/u,\n subfields: [{code: 9, value: /^(?!FENNI<KEEP>).*$/u}]\n }\n ];\n\n try {\n await 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', async () => {\n const config = [\n {\n tag: /^500$/u,\n subfields: [{code: /9/u, value: 'Fenni'}]\n }\n ];\n\n try {\n await 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 it('Fails to create a validator from invalid config - exclusion: value, ind1', async () => {\n const config = [\n {\n tag: /^500$/u,\n value: /^500$/u,\n ind1: /^500$/u,\n subfields: [{code: /9/u, value: /^(?!FENNI<KEEP>).*$/u}]\n }\n ];\n\n try {\n await validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - excluded element');\n }\n });\n\n it('Fails to create a validator from invalid config - missing mandatory: tag', async () => {\n const config = [\n {\n value: /^500$/u,\n subfields: [{code: /9/u, value: /^(?!FENNI<KEEP>).*$/u}]\n }\n ];\n\n try {\n await 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', async () => {\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 await 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', async () => {\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 await 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', async () => {\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 await 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', async () => {\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 await 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/45\n describe('#validate: Simple configuration (spec)', () => {\n const config = [\n {\n tag: /^500$/u\n }\n ];\n\n const recordValid = 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 const recordInvalid = 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: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidDouble = 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: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }, {\n tag: '500',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidFixed = 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 valid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record invalid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $500 should be excluded']});\n });\n\n it('Finds the record invalid - double', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalidDouble);\n expect({valid, message}).to.eql({valid: false, message: ['Field $500 should be excluded', 'Field $500 should 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 it('Repairs invalid record - double', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalidDouble);\n expect(recordInvalidDouble.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n });\n\n // Simple multi tag configuration\n describe('#validate: Simple multi tag configuration (spec)', () => {\n const config = [\n {\n tag: /^(648|650|651|655)$/u // eslint-disable-line prefer-named-capture-group\n }\n ];\n\n const recordValid = 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 const recordInvalid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '648',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidDouble = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '648',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }, {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidFixed = 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 valid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record invalid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $648 should be excluded']});\n });\n\n it('Finds the record invalid - double', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalidDouble);\n expect({valid, message}).to.eql({valid: false, message: ['Field $648 should be excluded', 'Field $650 should 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 it('Repairs invalid record - double', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalidDouble);\n expect(recordInvalidDouble.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n });\n\n // Simple multi tag configuration\n describe('#validate: Simple multi tag configuration - No object (spec)', () => {\n const config = [/^(648|650|651|655)$/u]; // eslint-disable-line prefer-named-capture-group\n\n const recordValid = 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 const recordInvalid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '648',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidDouble = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '648',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }, {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidFixed = 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 valid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record invalid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $648 should be excluded']});\n });\n\n it('Finds the record invalid - double', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalidDouble);\n expect({valid, message}).to.eql({valid: false, message: ['Field $648 should be excluded', 'Field $650 should 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 it('Repairs invalid record - double', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalidDouble);\n expect(recordInvalidDouble.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n });\n\n\n // Complex configuration https://github.com/NatLibFi/marc-record-validators-melinda/issues/45\n describe('#validate: Complex configuration (spec)', () => {\n const config = [\n {\n tag: /^500$/u,\n subfields: [{code: /9/u, value: /^(?!FENNI<KEEP>).*$/u}]\n }\n ];\n\n const recordValid = 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: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '9', value: 'FENNI<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalid = 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: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidFixed = 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 valid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record invalid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $500 should 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 // Complex multi tag configuration\n describe('#validate: Complex multi tag configuration (spec)', () => {\n const config = [\n {\n tag: /^(648|650|651|655)$/u, // eslint-disable-line prefer-named-capture-group\n subfields: [{code: /^2$/u, value: /^(ysa|musa|allars|cilla)$/u}] // eslint-disable-line prefer-named-capture-group\n }\n ];\n\n const recordValid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '2', value: 'yso'}\n ]\n }\n ]\n });\n\n const recordInvalid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '2', value: 'ysa'}\n ]\n }\n ]\n });\n\n const recordInvalidMulti = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '648',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: '2', value: 'ysa'}]\n }, {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: '2', value: 'ysa'}]\n }, {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: '2', value: 'ysa'}]\n }, {\n tag: '651',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: '2', value: 'ysa'}]\n }, {\n tag: '655',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: '2', value: 'ysa'}]\n }\n ]\n });\n\n const recordInvalidFixed = 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 valid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record invalid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $650 should be excluded']});\n });\n\n it('Finds the record invalid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalidMulti);\n expect({valid, message}).to.eql({valid: false, message: [\n 'Field $648 should be excluded',\n 'Field $650 should be excluded',\n 'Field $650 should be excluded',\n 'Field $651 should be excluded',\n 'Field $655 should be excluded'\n ]});\n });\n\n it('Repairs invalid multi record', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalidMulti);\n expect(recordInvalidMulti.equalsTo(recordInvalidFixed)).to.eql(true);\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 }\n ];\n\n const configValue = [\n {\n tag: /^500$/u,\n value: /^8$/u\n }\n ];\n\n const recordValid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '500',\n ind1: '8',\n ind2: '0',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\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 Bar Foo Bar Foo Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordValueInvalid = 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 value: '8'\n }\n ]\n });\n\n const recordInvalidFixed = 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 valid - Ind1&Ind2', async () => {\n const validator = await validatorFactory(configInd);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record valid - Value', async () => {\n const validator = await validatorFactory(configValue);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record invalid - Ind', async () => {\n const validator = await validatorFactory(configInd);\n const {valid, message} = await validator.validate(recordIndInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $500 should be excluded']});\n });\n\n it('Finds the record invalid - Value', async () => {\n const validator = await validatorFactory(configValue);\n const {valid, message} = await validator.validate(recordValueInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $500 should be excluded']});\n });\n\n it('Repairs invalid record - Ind', async () => {\n const validator = await validatorFactory(configInd);\n await validator.fix(recordIndInvalid);\n expect(recordIndInvalid.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n\n it('Repairs invalid record - Value', async () => {\n const validator = await validatorFactory(configValue);\n await validator.fix(recordValueInvalid);\n expect(recordValueInvalid.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n });\n\n describe('Dependencies', () => {\n it('Finds the record invalid because dependency matches', async () => {\n const config = [\n {\n tag: /^041$/u,\n dependencies: [{leader: /^.{6}a/u}]\n }\n ];\n\n const record = new MarcRecord({\n leader: '00000cam^a22003372i^4500',\n fields: [\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(record);\n\n expect({valid, message}).to.eql({valid: false, message: ['Field $041 should be excluded']});\n });\n });\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"field-exclusion.spec.js","names":["_chai","_interopRequireDefault","require","_chaiAsPromised","_marcRecord","_fieldExclusion","obj","__esModule","default","expect","chai","use","chaiAsPromised","describe","it","config","validator","validatorFactory","to","be","an","that","has","any","keys","description","a","validate","tag","subfields","code","value","error","with","property","ind1","unidentified","recordValid","MarcRecord","leader","fields","ind2","recordInvalid","recordInvalidDouble","recordInvalidFixed","valid","message","eql","fix","equalsTo","recordInvalidMulti","configInd","configValue","recordIndInvalid","recordValueInvalid","dependencies","record"],"sources":["../src/field-exclusion.spec.js"],"sourcesContent":["import chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/field-exclusion';\n\nconst {expect} = chai;\nchai.use(chaiAsPromised);\n\n// Factory validation\ndescribe('field-exclusion', () => {\n describe('#validate: Check configuration validation', () => {\n it('Creates a validator from simple config', async () => {\n const config = [/^500$/u];\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: /^500$/u,\n subfields: [{code: /9/u, value: /^(?!FENNI<KEEP>).*$/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('Fails to create a validator from invalid config - tag', async () => {\n const config = [\n {\n tag: '500',\n subfields: [{code: /9/u, value: /^(?!FENNI<KEEP>).*$/u}]\n }\n ];\n\n try {\n await 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 - msising array', async () => {\n const config = {\n tag: '500',\n subfields: [{code: /9/u, value: /^(?!FENNI<KEEP>).*$/u}]\n };\n\n try {\n await 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', async () => {\n const config = [\n {\n tag: /^500$/u,\n subfields: [{code: 9, value: /^(?!FENNI<KEEP>).*$/u}]\n }\n ];\n\n try {\n await 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', async () => {\n const config = [\n {\n tag: /^500$/u,\n subfields: [{code: /9/u, value: 'Fenni'}]\n }\n ];\n\n try {\n await 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 it('Fails to create a validator from invalid config - exclusion: value, ind1', async () => {\n const config = [\n {\n tag: /^500$/u,\n value: /^500$/u,\n ind1: /^500$/u,\n subfields: [{code: /9/u, value: /^(?!FENNI<KEEP>).*$/u}]\n }\n ];\n\n try {\n await validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - excluded element');\n }\n });\n\n it('Fails to create a validator from invalid config - missing mandatory: tag', async () => {\n const config = [\n {\n value: /^500$/u,\n subfields: [{code: /9/u, value: /^(?!FENNI<KEEP>).*$/u}]\n }\n ];\n\n try {\n await 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', async () => {\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 await 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', async () => {\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 await 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', async () => {\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 await 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', async () => {\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 await 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/45\n describe('#validate: Simple configuration (spec)', () => {\n const config = [\n {\n tag: /^500$/u\n }\n ];\n\n const recordValid = 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 const recordInvalid = 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: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidDouble = 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: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }, {\n tag: '500',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidFixed = 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 valid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record invalid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $500 should be excluded']});\n });\n\n it('Finds the record invalid - double', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalidDouble);\n expect({valid, message}).to.eql({valid: false, message: ['Field $500 should be excluded', 'Field $500 should 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 it('Repairs invalid record - double', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalidDouble);\n expect(recordInvalidDouble.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n });\n\n // Simple multi tag configuration\n describe('#validate: Simple multi tag configuration (spec)', () => {\n const config = [\n {\n tag: /^(648|650|651|655)$/u // eslint-disable-line prefer-named-capture-group\n }\n ];\n\n const recordValid = 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 const recordInvalid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '648',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidDouble = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '648',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }, {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidFixed = 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 valid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record invalid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $648 should be excluded']});\n });\n\n it('Finds the record invalid - double', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalidDouble);\n expect({valid, message}).to.eql({valid: false, message: ['Field $648 should be excluded', 'Field $650 should 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 it('Repairs invalid record - double', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalidDouble);\n expect(recordInvalidDouble.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n });\n\n // Simple multi tag configuration\n describe('#validate: Simple multi tag configuration - No object (spec)', () => {\n const config = [/^(648|650|651|655)$/u]; // eslint-disable-line prefer-named-capture-group\n\n const recordValid = 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 const recordInvalid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '648',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidDouble = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '648',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }, {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidFixed = 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 valid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record invalid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $648 should be excluded']});\n });\n\n it('Finds the record invalid - double', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalidDouble);\n expect({valid, message}).to.eql({valid: false, message: ['Field $648 should be excluded', 'Field $650 should 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 it('Repairs invalid record - double', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalidDouble);\n expect(recordInvalidDouble.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n });\n\n\n // Complex configuration https://github.com/NatLibFi/marc-record-validators-melinda/issues/45\n describe('#validate: Complex configuration (spec)', () => {\n const config = [\n {\n tag: /^500$/u,\n subfields: [{code: /9/u, value: /^(?!FENNI<KEEP>).*$/u}]\n }\n ];\n\n const recordValid = 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: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '9', value: 'FENNI<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalid = 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: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidFixed = 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 valid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record invalid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $500 should 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 // Complex multi tag configuration\n describe('#validate: Complex multi tag configuration (spec)', () => {\n const config = [\n {\n tag: /^(648|650|651|655)$/u, // eslint-disable-line prefer-named-capture-group\n subfields: [{code: /^2$/u, value: /^(ysa|musa|allars|cilla)$/u}] // eslint-disable-line prefer-named-capture-group\n }\n ];\n\n const recordValid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '2', value: 'yso'}\n ]\n }\n ]\n });\n\n const recordInvalid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '2', value: 'ysa'}\n ]\n }\n ]\n });\n\n const recordInvalidMulti = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '648',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: '2', value: 'ysa'}]\n }, {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: '2', value: 'ysa'}]\n }, {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: '2', value: 'ysa'}]\n }, {\n tag: '651',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: '2', value: 'ysa'}]\n }, {\n tag: '655',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: '2', value: 'ysa'}]\n }\n ]\n });\n\n const recordInvalidFixed = 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 valid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record invalid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $650 should be excluded']});\n });\n\n it('Finds the record invalid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalidMulti);\n expect({valid, message}).to.eql({valid: false, message: [\n 'Field $648 should be excluded',\n 'Field $650 should be excluded',\n 'Field $650 should be excluded',\n 'Field $651 should be excluded',\n 'Field $655 should be excluded'\n ]});\n });\n\n it('Repairs invalid multi record', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalidMulti);\n expect(recordInvalidMulti.equalsTo(recordInvalidFixed)).to.eql(true);\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 }\n ];\n\n const configValue = [\n {\n tag: /^500$/u,\n value: /^8$/u\n }\n ];\n\n const recordValid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '500',\n ind1: '8',\n ind2: '0',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\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 Bar Foo Bar Foo Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordValueInvalid = 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 value: '8'\n }\n ]\n });\n\n const recordInvalidFixed = 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 valid - Ind1&Ind2', async () => {\n const validator = await validatorFactory(configInd);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record valid - Value', async () => {\n const validator = await validatorFactory(configValue);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record invalid - Ind', async () => {\n const validator = await validatorFactory(configInd);\n const {valid, message} = await validator.validate(recordIndInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $500 should be excluded']});\n });\n\n it('Finds the record invalid - Value', async () => {\n const validator = await validatorFactory(configValue);\n const {valid, message} = await validator.validate(recordValueInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $500 should be excluded']});\n });\n\n it('Repairs invalid record - Ind', async () => {\n const validator = await validatorFactory(configInd);\n await validator.fix(recordIndInvalid);\n expect(recordIndInvalid.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n\n it('Repairs invalid record - Value', async () => {\n const validator = await validatorFactory(configValue);\n await validator.fix(recordValueInvalid);\n expect(recordValueInvalid.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n });\n\n describe('Dependencies', () => {\n it('Finds the record invalid because dependency matches', async () => {\n const config = [\n {\n tag: /^041$/u,\n dependencies: [{leader: /^.{6}a/u}]\n }\n ];\n\n const record = new MarcRecord({\n leader: '00000cam^a22003372i^4500',\n fields: [\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(record);\n\n expect({valid, message}).to.eql({valid: false, message: ['Field $041 should be excluded']});\n });\n });\n});\n"],"mappings":"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"}
|
package/dist/fixRelatorTerms.js
CHANGED
|
@@ -13,6 +13,7 @@ var _debug = _interopRequireDefault(require("debug"));
|
|
|
13
13
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
14
14
|
// Currently mainly translates X00$e values, so that we don't have "$a Name, $e kirjoittaja, $e författare.".
|
|
15
15
|
// Later on we could try and handle $4 stuff here as well.
|
|
16
|
+
|
|
16
17
|
const debug = (0, _debug.default)('@natlibfi/marc-record-validators-melinda:fixRelatorterms');
|
|
17
18
|
//const debugData = debug.extend('data');
|
|
18
19
|
const debugDev = debug.extend('dev');
|
|
@@ -52,7 +53,6 @@ function _default() {
|
|
|
52
53
|
res.message.push(`${fieldAsString} => ${clonedFieldAsString}`); // eslint-disable-line functional/immutable-data
|
|
53
54
|
}
|
|
54
55
|
});
|
|
55
|
-
|
|
56
56
|
res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data
|
|
57
57
|
return res;
|
|
58
58
|
}
|
|
@@ -257,7 +257,6 @@ function subfieldTranslateRelatorTerm(subfield, fromLanguage, toLanguage) {
|
|
|
257
257
|
}
|
|
258
258
|
subfield.value = translateRelatorTerm(subfield.value, fromLanguage, toLanguage); // eslint-disable-line functional/immutable-data
|
|
259
259
|
}
|
|
260
|
-
|
|
261
260
|
function fieldFixRelatorTerms(field, fromLanguage, toLanguage) {
|
|
262
261
|
// fromLanguage can not be relied upon.
|
|
263
262
|
if (!isRelatorField(field) /* || fromLanguage === toLanguage*/) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixRelatorTerms.js","names":["_clone","_interopRequireDefault","require","_punctuation","_utils","_debug","obj","__esModule","default","debug","createDebugLogger","debugDev","extend","_default","description","validate","fix","record","res","message","valid","language","getCatalogingLanguage","fields","forEach","field","fieldFixRelatorTerms","clonedField","clone","clonedFieldAsString","fieldToString","fieldAsString","push","length","relatorTerms","finnishAbbreviations","subfieldHandleRelatorTermAbbreviation","subfield","code","nvdebug","subfieldToString","value","replace","punc","lcValue","toLowerCase","hit","isRelatorField","tag","match","fieldHandleRelatorTermAbbreviations","originalValue","subfields","sf","modifiedValue","fieldFixPunctuation","termIsInGivenLanguage","term","some","row","anyToLanguage","originalTerm","translateRelatorTerm","defaultFromLanguage","toLanguage","fromLanguage","candRow","filter","slice","translation","subfieldTranslateRelatorTerm","recordFixRelatorTerms","defaultToLanguage","translateField","from","to"],"sources":["../src/fixRelatorTerms.js"],"sourcesContent":["import clone from 'clone';\nimport {fieldFixPunctuation} from './punctuation2';\nimport {fieldToString, getCatalogingLanguage, nvdebug, subfieldToString} from './utils';\nimport createDebugLogger from 'debug';\n\n// Currently mainly translates X00$e values, so that we don't have \"$a Name, $e kirjoittaja, $e författare.\".\n// Later on we could try and handle $4 stuff here as well.\n\n\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:fixRelatorterms');\n//const debugData = debug.extend('data');\nconst debugDev = debug.extend('dev');\n\nexport default function () {\n return {\n description: 'Fix $e subfields in field [1678][01]0 and 720',\n validate, fix\n };\n\n function fix(record) {\n const res = {message: [], fix: [], valid: true};\n\n const language = getCatalogingLanguage(record);\n\n record.fields.forEach(field => {\n fieldFixRelatorTerms(field, language, language);\n });\n\n return res;\n }\n\n function validate(record) {\n const res = {message: []};\n\n const language = getCatalogingLanguage(record);\n\n record.fields.forEach(field => {\n const clonedField = clone(field);\n // Rather hackily/abnormally use language as both fromLanguage and toLanguage.\n // fromLanguage is used to expand \"esitt.\" => \"esittäjä\".\n // toLanguage is used by translations (fixes \"författere\" to \"kirjoittaja\", if 040$b is \"fin\")\n fieldFixRelatorTerms(field, language, language);\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(`${fieldAsString} => ${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/*\nexport default () => (base, source) => {\n recordTranslateRelatorTerms(base);\n recordTranslateRelatorTerms(source);\n recordHandleRelatorTermAbbreviations(base);\n recordHandleRelatorTermAbbreviations(source);\n const result = {base, source};\n return result;\n};\n*/\n\n\n// Partial source: https://marc21.kansalliskirjasto.fi/funktiot_koodit.htm\n// https://wiki.helsinki.fi/display/MARC21svenska/Funktions-+och+relationskoder+-+alfabetiskt+efter+funktion\n// New, better source: https://id.kb.se/find?q=relator&_sort=_sortKeyByLang.en\n\n\n// NB! How to handle German sex-based Verfasser/Verfasserin pairs?\nconst relatorTerms = [\n {'code': 'arr', 'eng': 'arranger', 'fin': 'sovittaja', 'swe': 'arrangör av musikalisk komposition'},\n {'code': 'art', 'eng': 'artist', 'fin': 'taiteilija', 'swe': 'konstnär'},\n {'code': 'aui', 'eng': 'author of introduction', 'fin': 'esipuheen tekijä'},\n {'code': 'aut', 'eng': 'author', 'fin': 'kirjoittaja', 'swe': 'författare'},\n {'code': 'cmp', 'eng': 'composer', 'fin': 'säveltäjä', 'swe': 'kompositör'},\n {'code': 'drt', 'eng': 'director', 'fin': 'ohjaaja', 'swe': 'regissör'},\n {'code': 'edt', 'eng': 'editor', 'fin': 'toimittaja', 'swe': 'redaktör'},\n {'code': 'ill', 'eng': 'illustrator', 'fin': 'kuvittaja', 'swe': 'illustratör'},\n {'code': 'lyr', 'eng': 'lyricist', 'fin': 'sanoittaja', 'swe': 'sångtext'},\n {'code': 'nrt', 'eng': 'narrator', 'fin': 'kertoja', 'swe': 'berättare'}, // berättare/inläsare\n {'code': 'pbl', 'eng': 'publisher', 'fin': 'julkaisija', 'swe': 'utgivare'},\n {'code': 'pht', 'eng': 'photographer', 'fin': 'valokuvaaja', 'swe': 'fotograf'},\n {'code': 'prf', 'eng': 'performer', 'fin': 'esittäjä', 'swe': 'framförande'},\n {'code': 'pro', 'eng': 'producer', 'fin': 'tuottaja', 'swe': 'producent'},\n {'code': 'trl', 'eng': 'translator', 'fin': 'kääntäjä', 'swe': 'översättare'}\n];\n\n/*\nfunction recordNormalizeRelatorTerms(record, defaultLanguageCode = undef) {\n const languageCode = defaultLanguageCode ? defaultLanguageCode : getCatalogingLanguage(record);\n if (!languageCode || ['eng', 'fin', 'swe'].includes(languageCode)) {\n return;\n }\n\n}\n*/\n\n\nconst finnishAbbreviations = {\n 'esitt.': 'esittäjä',\n 'käänt.': 'kääntäjä',\n 'näytt.': 'näyttelijä',\n 'san.': 'sanoittaja',\n 'sov.': 'sovittaja',\n 'säv.': 'säveltäjä',\n 'toim.': 'toimittaja'\n};\n\nfunction subfieldHandleRelatorTermAbbreviation(subfield, language) {\n if (subfield.code !== 'e') {\n return;\n }\n nvdebug(`Relator cand subfield: '${subfieldToString(subfield)}', lang: ${language ? language : 'NULL'}`, debugDev);\n if (language === null || language === 'mul') {\n subfieldHandleRelatorTermAbbreviation(subfield, 'fin');\n // Maybe later add Swedish here...\n return;\n }\n const value = subfield.value.replace(/,$/u, '');\n const punc = value === subfield.value ? '' : ',';\n\n const lcValue = value.toLowerCase(); // Check Å, Ä, Ö...\n\n // NB: Policy: if no language or multi-language: apply all rules! (Not much overlap I hope...)\n if (language === 'fin') {\n nvdebug(`Relator try Finnish for '${lcValue}}'...`, debugDev);\n if (lcValue in finnishAbbreviations) {\n const hit = `${finnishAbbreviations[lcValue]}${punc}`;\n nvdebug(`Relator hit: ${hit}`, debugDev);\n // NB! 'esitt.' => 'esittäjä'\n subfield.value = hit; // eslint-disable-line functional/immutable-data\n return;\n }\n }\n}\n\n\nfunction isRelatorField(field) {\n // Tag list might be incomplete!\n return field.tag.match(/^(?:100|110|600|610|700|710|720|800|810)$/u);\n}\n\nfunction fieldHandleRelatorTermAbbreviations(field, language) {\n if (!isRelatorField(field)) {\n return;\n }\n\n const originalValue = fieldToString(field);\n field.subfields.forEach(sf => subfieldHandleRelatorTermAbbreviation(sf, language));\n const modifiedValue = fieldToString(field);\n if (modifiedValue === originalValue) {\n return;\n }\n // Changes have happened... Try to punctuate.\n // (NB! We need punctuation as a module, if we are to make abbr expansion a marc-record-validators-melinda validator/fixer)\n fieldFixPunctuation(field);\n}\n\nfunction termIsInGivenLanguage(term, language) {\n return relatorTerms.some(row => language in row && row[language] === term);\n}\n\nfunction anyToLanguage(originalTerm) {\n // Sometimes there's no 040$b or 040$b and, say, 040$b and 700$e value don't correlate\n if (termIsInGivenLanguage(originalTerm, 'fin')) {\n return 'fin';\n }\n if (termIsInGivenLanguage(originalTerm, 'swe')) {\n return 'swe';\n }\n if (termIsInGivenLanguage(originalTerm, 'eng')) {\n return 'eng';\n }\n return null;\n}\n\nfunction translateRelatorTerm(originalTerm, defaultFromLanguage, toLanguage) {\n\n // originalTerm is supposed to be normal version (abbrs have been expanded), possibly with punctuation\n const term = originalTerm.replace(/[,.]$/u, '');\n nvdebug(`Try to translate '${term}' from ${defaultFromLanguage} to ${toLanguage}`, debugDev);\n\n // Kind of hacky... If term is in toLanguage, do nothing. defaultFromLanguage (040$b) isn't that reliable.\n if (termIsInGivenLanguage(term, toLanguage)) {\n return originalTerm;\n }\n // defaultFomLanguage (typically 040$b) isn't that reliable:\n const fromLanguage = defaultFromLanguage === null || !termIsInGivenLanguage(term, defaultFromLanguage) ? anyToLanguage(term) : defaultFromLanguage;\n\n const [candRow] = relatorTerms.filter(row => fromLanguage in row && toLanguage in row && row[fromLanguage] === term);\n if (candRow) {\n const punc = term === originalTerm ? '' : originalTerm.slice(-1);\n const translation = `${candRow[toLanguage]}${punc}`;\n nvdebug(`Translate relator term: ${originalTerm} => ${translation}`, debugDev);\n return translation;\n }\n return originalTerm;\n}\n\nfunction subfieldTranslateRelatorTerm(subfield, fromLanguage, toLanguage) {\n if (subfield.code !== 'e') {\n return;\n }\n subfield.value = translateRelatorTerm(subfield.value, fromLanguage, toLanguage); // eslint-disable-line functional/immutable-data\n}\n\nexport function fieldFixRelatorTerms(field, fromLanguage, toLanguage) {\n // fromLanguage can not be relied upon.\n if (!isRelatorField(field)/* || fromLanguage === toLanguage*/) {\n return;\n }\n fieldHandleRelatorTermAbbreviations(field, fromLanguage);\n\n field.subfields.forEach(sf => subfieldTranslateRelatorTerm(sf, fromLanguage, toLanguage));\n}\n\n\nexport function recordFixRelatorTerms(record, defaultToLanguage = null, defaultFromLanguage = null) { // WAS: translateRecord()\n const fromLanguage = defaultFromLanguage ? defaultFromLanguage : getCatalogingLanguage(record);\n const toLanguage = defaultToLanguage ? defaultToLanguage : getCatalogingLanguage(record);\n\n record.fields.forEach(field => translateField(field, fromLanguage, toLanguage));\n\n function translateField(field, from, to) {\n fieldFixRelatorTerms(field, from, to);\n }\n}\n\n\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fixRelatorTerms.js","names":["_clone","_interopRequireDefault","require","_punctuation","_utils","_debug","obj","__esModule","default","debug","createDebugLogger","debugDev","extend","_default","description","validate","fix","record","res","message","valid","language","getCatalogingLanguage","fields","forEach","field","fieldFixRelatorTerms","clonedField","clone","clonedFieldAsString","fieldToString","fieldAsString","push","length","relatorTerms","finnishAbbreviations","subfieldHandleRelatorTermAbbreviation","subfield","code","nvdebug","subfieldToString","value","replace","punc","lcValue","toLowerCase","hit","isRelatorField","tag","match","fieldHandleRelatorTermAbbreviations","originalValue","subfields","sf","modifiedValue","fieldFixPunctuation","termIsInGivenLanguage","term","some","row","anyToLanguage","originalTerm","translateRelatorTerm","defaultFromLanguage","toLanguage","fromLanguage","candRow","filter","slice","translation","subfieldTranslateRelatorTerm","recordFixRelatorTerms","defaultToLanguage","translateField","from","to"],"sources":["../src/fixRelatorTerms.js"],"sourcesContent":["import clone from 'clone';\nimport {fieldFixPunctuation} from './punctuation2';\nimport {fieldToString, getCatalogingLanguage, nvdebug, subfieldToString} from './utils';\nimport createDebugLogger from 'debug';\n\n// Currently mainly translates X00$e values, so that we don't have \"$a Name, $e kirjoittaja, $e författare.\".\n// Later on we could try and handle $4 stuff here as well.\n\n\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:fixRelatorterms');\n//const debugData = debug.extend('data');\nconst debugDev = debug.extend('dev');\n\nexport default function () {\n return {\n description: 'Fix $e subfields in field [1678][01]0 and 720',\n validate, fix\n };\n\n function fix(record) {\n const res = {message: [], fix: [], valid: true};\n\n const language = getCatalogingLanguage(record);\n\n record.fields.forEach(field => {\n fieldFixRelatorTerms(field, language, language);\n });\n\n return res;\n }\n\n function validate(record) {\n const res = {message: []};\n\n const language = getCatalogingLanguage(record);\n\n record.fields.forEach(field => {\n const clonedField = clone(field);\n // Rather hackily/abnormally use language as both fromLanguage and toLanguage.\n // fromLanguage is used to expand \"esitt.\" => \"esittäjä\".\n // toLanguage is used by translations (fixes \"författere\" to \"kirjoittaja\", if 040$b is \"fin\")\n fieldFixRelatorTerms(field, language, language);\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(`${fieldAsString} => ${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/*\nexport default () => (base, source) => {\n recordTranslateRelatorTerms(base);\n recordTranslateRelatorTerms(source);\n recordHandleRelatorTermAbbreviations(base);\n recordHandleRelatorTermAbbreviations(source);\n const result = {base, source};\n return result;\n};\n*/\n\n\n// Partial source: https://marc21.kansalliskirjasto.fi/funktiot_koodit.htm\n// https://wiki.helsinki.fi/display/MARC21svenska/Funktions-+och+relationskoder+-+alfabetiskt+efter+funktion\n// New, better source: https://id.kb.se/find?q=relator&_sort=_sortKeyByLang.en\n\n\n// NB! How to handle German sex-based Verfasser/Verfasserin pairs?\nconst relatorTerms = [\n {'code': 'arr', 'eng': 'arranger', 'fin': 'sovittaja', 'swe': 'arrangör av musikalisk komposition'},\n {'code': 'art', 'eng': 'artist', 'fin': 'taiteilija', 'swe': 'konstnär'},\n {'code': 'aui', 'eng': 'author of introduction', 'fin': 'esipuheen tekijä'},\n {'code': 'aut', 'eng': 'author', 'fin': 'kirjoittaja', 'swe': 'författare'},\n {'code': 'cmp', 'eng': 'composer', 'fin': 'säveltäjä', 'swe': 'kompositör'},\n {'code': 'drt', 'eng': 'director', 'fin': 'ohjaaja', 'swe': 'regissör'},\n {'code': 'edt', 'eng': 'editor', 'fin': 'toimittaja', 'swe': 'redaktör'},\n {'code': 'ill', 'eng': 'illustrator', 'fin': 'kuvittaja', 'swe': 'illustratör'},\n {'code': 'lyr', 'eng': 'lyricist', 'fin': 'sanoittaja', 'swe': 'sångtext'},\n {'code': 'nrt', 'eng': 'narrator', 'fin': 'kertoja', 'swe': 'berättare'}, // berättare/inläsare\n {'code': 'pbl', 'eng': 'publisher', 'fin': 'julkaisija', 'swe': 'utgivare'},\n {'code': 'pht', 'eng': 'photographer', 'fin': 'valokuvaaja', 'swe': 'fotograf'},\n {'code': 'prf', 'eng': 'performer', 'fin': 'esittäjä', 'swe': 'framförande'},\n {'code': 'pro', 'eng': 'producer', 'fin': 'tuottaja', 'swe': 'producent'},\n {'code': 'trl', 'eng': 'translator', 'fin': 'kääntäjä', 'swe': 'översättare'}\n];\n\n/*\nfunction recordNormalizeRelatorTerms(record, defaultLanguageCode = undef) {\n const languageCode = defaultLanguageCode ? defaultLanguageCode : getCatalogingLanguage(record);\n if (!languageCode || ['eng', 'fin', 'swe'].includes(languageCode)) {\n return;\n }\n\n}\n*/\n\n\nconst finnishAbbreviations = {\n 'esitt.': 'esittäjä',\n 'käänt.': 'kääntäjä',\n 'näytt.': 'näyttelijä',\n 'san.': 'sanoittaja',\n 'sov.': 'sovittaja',\n 'säv.': 'säveltäjä',\n 'toim.': 'toimittaja'\n};\n\nfunction subfieldHandleRelatorTermAbbreviation(subfield, language) {\n if (subfield.code !== 'e') {\n return;\n }\n nvdebug(`Relator cand subfield: '${subfieldToString(subfield)}', lang: ${language ? language : 'NULL'}`, debugDev);\n if (language === null || language === 'mul') {\n subfieldHandleRelatorTermAbbreviation(subfield, 'fin');\n // Maybe later add Swedish here...\n return;\n }\n const value = subfield.value.replace(/,$/u, '');\n const punc = value === subfield.value ? '' : ',';\n\n const lcValue = value.toLowerCase(); // Check Å, Ä, Ö...\n\n // NB: Policy: if no language or multi-language: apply all rules! (Not much overlap I hope...)\n if (language === 'fin') {\n nvdebug(`Relator try Finnish for '${lcValue}}'...`, debugDev);\n if (lcValue in finnishAbbreviations) {\n const hit = `${finnishAbbreviations[lcValue]}${punc}`;\n nvdebug(`Relator hit: ${hit}`, debugDev);\n // NB! 'esitt.' => 'esittäjä'\n subfield.value = hit; // eslint-disable-line functional/immutable-data\n return;\n }\n }\n}\n\n\nfunction isRelatorField(field) {\n // Tag list might be incomplete!\n return field.tag.match(/^(?:100|110|600|610|700|710|720|800|810)$/u);\n}\n\nfunction fieldHandleRelatorTermAbbreviations(field, language) {\n if (!isRelatorField(field)) {\n return;\n }\n\n const originalValue = fieldToString(field);\n field.subfields.forEach(sf => subfieldHandleRelatorTermAbbreviation(sf, language));\n const modifiedValue = fieldToString(field);\n if (modifiedValue === originalValue) {\n return;\n }\n // Changes have happened... Try to punctuate.\n // (NB! We need punctuation as a module, if we are to make abbr expansion a marc-record-validators-melinda validator/fixer)\n fieldFixPunctuation(field);\n}\n\nfunction termIsInGivenLanguage(term, language) {\n return relatorTerms.some(row => language in row && row[language] === term);\n}\n\nfunction anyToLanguage(originalTerm) {\n // Sometimes there's no 040$b or 040$b and, say, 040$b and 700$e value don't correlate\n if (termIsInGivenLanguage(originalTerm, 'fin')) {\n return 'fin';\n }\n if (termIsInGivenLanguage(originalTerm, 'swe')) {\n return 'swe';\n }\n if (termIsInGivenLanguage(originalTerm, 'eng')) {\n return 'eng';\n }\n return null;\n}\n\nfunction translateRelatorTerm(originalTerm, defaultFromLanguage, toLanguage) {\n\n // originalTerm is supposed to be normal version (abbrs have been expanded), possibly with punctuation\n const term = originalTerm.replace(/[,.]$/u, '');\n nvdebug(`Try to translate '${term}' from ${defaultFromLanguage} to ${toLanguage}`, debugDev);\n\n // Kind of hacky... If term is in toLanguage, do nothing. defaultFromLanguage (040$b) isn't that reliable.\n if (termIsInGivenLanguage(term, toLanguage)) {\n return originalTerm;\n }\n // defaultFomLanguage (typically 040$b) isn't that reliable:\n const fromLanguage = defaultFromLanguage === null || !termIsInGivenLanguage(term, defaultFromLanguage) ? anyToLanguage(term) : defaultFromLanguage;\n\n const [candRow] = relatorTerms.filter(row => fromLanguage in row && toLanguage in row && row[fromLanguage] === term);\n if (candRow) {\n const punc = term === originalTerm ? '' : originalTerm.slice(-1);\n const translation = `${candRow[toLanguage]}${punc}`;\n nvdebug(`Translate relator term: ${originalTerm} => ${translation}`, debugDev);\n return translation;\n }\n return originalTerm;\n}\n\nfunction subfieldTranslateRelatorTerm(subfield, fromLanguage, toLanguage) {\n if (subfield.code !== 'e') {\n return;\n }\n subfield.value = translateRelatorTerm(subfield.value, fromLanguage, toLanguage); // eslint-disable-line functional/immutable-data\n}\n\nexport function fieldFixRelatorTerms(field, fromLanguage, toLanguage) {\n // fromLanguage can not be relied upon.\n if (!isRelatorField(field)/* || fromLanguage === toLanguage*/) {\n return;\n }\n fieldHandleRelatorTermAbbreviations(field, fromLanguage);\n\n field.subfields.forEach(sf => subfieldTranslateRelatorTerm(sf, fromLanguage, toLanguage));\n}\n\n\nexport function recordFixRelatorTerms(record, defaultToLanguage = null, defaultFromLanguage = null) { // WAS: translateRecord()\n const fromLanguage = defaultFromLanguage ? defaultFromLanguage : getCatalogingLanguage(record);\n const toLanguage = defaultToLanguage ? defaultToLanguage : getCatalogingLanguage(record);\n\n record.fields.forEach(field => translateField(field, fromLanguage, toLanguage));\n\n function translateField(field, from, to) {\n fieldFixRelatorTerms(field, from, to);\n }\n}\n\n\n"],"mappings":"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"}
|