@natlibfi/marc-record-validators-melinda 10.16.0-alpha.2 → 10.16.1-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/access-rights.js.map +1 -1
- package/dist/access-rights.spec.js.map +1 -1
- package/dist/double-commas.js.map +1 -1
- package/dist/double-commas.spec.js.map +1 -1
- package/dist/duplicates-ind1.js.map +1 -1
- package/dist/duplicates-ind1.spec.js.map +1 -1
- package/dist/empty-fields.js.map +1 -1
- package/dist/empty-fields.spec.js.map +1 -1
- package/dist/ending-punctuation-conf.js.map +1 -1
- package/dist/ending-punctuation.js.map +1 -1
- package/dist/ending-punctuation.spec.js.map +1 -1
- package/dist/ending-whitespace.js.map +1 -1
- package/dist/ending-whitespace.spec.js.map +1 -1
- package/dist/field-008-18-34-character-groups.js.map +1 -1
- package/dist/field-008-18-34-character-groups.spec.js.map +1 -1
- package/dist/field-505-separators.js.map +1 -1
- package/dist/field-505-separators.spec.js.map +1 -1
- package/dist/field-521-fix.js.map +1 -1
- package/dist/field-521-fix.spec.js.map +1 -1
- package/dist/field-exclusion.js.map +1 -1
- package/dist/field-exclusion.spec.js.map +1 -1
- package/dist/field-structure.js.map +1 -1
- package/dist/field-structure.spec.js.map +1 -1
- package/dist/fields-present.js.map +1 -1
- package/dist/fields-present.spec.js.map +1 -1
- package/dist/fix-country-codes.js.map +1 -1
- package/dist/fix-country-codes.spec.js.map +1 -1
- package/dist/fixRelatorTerms.js.map +1 -1
- package/dist/fixRelatorTerms.spec.js.map +1 -1
- package/dist/fixed-fields.js.map +1 -1
- package/dist/fixed-fields.spec.js.map +1 -1
- package/dist/identical-fields.js.map +1 -1
- package/dist/identical-fields.spec.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/indicator-fixes.js.map +1 -1
- package/dist/indicator-fixes.spec.js.map +1 -1
- package/dist/isbn-issn.js.map +1 -1
- package/dist/isbn-issn.spec.js.map +1 -1
- package/dist/item-language.js.map +1 -1
- package/dist/item-language.spec.js.map +1 -1
- package/dist/mergeField500Lisapainokset.js.map +1 -1
- package/dist/mergeField500Lisapainokset.spec.js.map +1 -1
- package/dist/mergeRelatorTermFields.js.map +1 -1
- package/dist/mergeRelatorTermFields.spec.js.map +1 -1
- package/dist/multiple-subfield-0.js.map +1 -1
- package/dist/multiple-subfield-0.spec.js.map +1 -1
- package/dist/non-breaking-space.js.map +1 -1
- package/dist/non-breaking-space.spec.js.map +1 -1
- package/dist/normalize-dashes.js.map +1 -1
- package/dist/normalize-dashes.spec.js.map +1 -1
- package/dist/normalize-identifiers.js.map +1 -1
- package/dist/normalize-identifiers.spec.js.map +1 -1
- package/dist/normalize-qualifying-information.js.map +1 -1
- package/dist/normalize-qualifying-information.spec.js.map +1 -1
- package/dist/normalize-utf8-diacritics.js.map +1 -1
- package/dist/normalize-utf8-diacritics.spec.js.map +1 -1
- package/dist/normalizeFieldForComparison.js.map +1 -1
- package/dist/normalizeSubfieldValueForComparison.js.map +1 -1
- package/dist/prepublicationUtils.js.map +1 -1
- package/dist/punctuation/index.js.map +1 -1
- package/dist/punctuation/rules/aut.js.map +1 -1
- package/dist/punctuation/rules/bib.js.map +1 -1
- package/dist/punctuation/rules/index.js.map +1 -1
- package/dist/punctuation.spec.js.map +1 -1
- package/dist/punctuation2.js +131 -89
- package/dist/punctuation2.js.map +1 -1
- package/dist/punctuation2.spec.js.map +1 -1
- package/dist/reindexSubfield6OccurenceNumbers.js.map +1 -1
- package/dist/reindexSubfield6OccurenceNumbers.spec.js.map +1 -1
- package/dist/removeDuplicateDataFields.js.map +1 -1
- package/dist/removeDuplicateDataFields.spec.js.map +1 -1
- package/dist/removeInferiorDataFields.js.map +1 -1
- package/dist/removeInferiorDataFields.spec.js.map +1 -1
- package/dist/resolvable-ext-references-melinda.js.map +1 -1
- package/dist/resolvable-ext-references-melinda.spec.js.map +1 -1
- package/dist/resolveOrphanedSubfield6s.js.map +1 -1
- package/dist/resolveOrphanedSubfield6s.spec.js.map +1 -1
- package/dist/sanitize-vocabulary-source-codes.js.map +1 -1
- package/dist/sanitize-vocabulary-source-codes.spec.js.map +1 -1
- package/dist/sort-tags.js.map +1 -1
- package/dist/sort-tags.spec.js.map +1 -1
- package/dist/sortFields.js.map +1 -1
- package/dist/sortFields.spec.js.map +1 -1
- package/dist/sortRelatorTerms.js.map +1 -1
- package/dist/sortRelatorTerms.spec.js.map +1 -1
- package/dist/sortSubfields.js.map +1 -1
- package/dist/sortSubfields.spec.js.map +1 -1
- package/dist/stripPunctuation.js.map +1 -1
- package/dist/stripPunctuation.spec.js.map +1 -1
- package/dist/subfield-exclusion.js.map +1 -1
- package/dist/subfield-exclusion.spec.js.map +1 -1
- package/dist/subfield6Utils.js.map +1 -1
- package/dist/subfield8Utils.js.map +1 -1
- package/dist/subfieldValueNormalizations.js +28 -8
- package/dist/subfieldValueNormalizations.js.map +1 -1
- package/dist/subfieldValueNormalizations.spec.js.map +1 -1
- package/dist/sync-007-and-300.js.map +1 -1
- package/dist/sync-007-and-300.spec.js.map +1 -1
- package/dist/typeOfDate-008.js.map +1 -1
- package/dist/typeOfDate-008.spec.js.map +1 -1
- package/dist/unicode-decomposition.js.map +1 -1
- package/dist/unicode-decomposition.spec.js.map +1 -1
- package/dist/update-field-540.js.map +1 -1
- package/dist/update-field-540.spec.js.map +1 -1
- package/dist/urn.js.map +1 -1
- package/dist/urn.spec.js.map +1 -1
- package/dist/utils.js.map +1 -1
- package/package.json +6 -6
- package/src/punctuation2.js +103 -56
- package/src/subfieldValueNormalizations.js +32 -9
- package/test-fixtures/normalize-subfield-value/03/expectedResult.json +26 -0
- package/test-fixtures/normalize-subfield-value/03/metadata.json +6 -0
- package/test-fixtures/normalize-subfield-value/03/record.json +25 -0
- package/test-fixtures/normalize-subfield-value/100_and_880/expectedResult.json +22 -0
- package/test-fixtures/normalize-subfield-value/100_and_880/metadata.json +5 -0
- package/test-fixtures/normalize-subfield-value/100_and_880/record.json +20 -0
- package/test-fixtures/punctuation2/100_and_880/expectedResult.json +22 -0
- package/test-fixtures/punctuation2/100_and_880/metadata.json +6 -0
- package/test-fixtures/punctuation2/100_and_880/record.json +20 -0
- package/test-fixtures/punctuation2/240/expectedResult.json +12 -0
- package/test-fixtures/punctuation2/240/metadata.json +6 -0
- package/test-fixtures/punctuation2/240/record.json +10 -0
- package/test-fixtures/punctuation2/800/expectedResult.json +15 -0
- package/test-fixtures/punctuation2/800/metadata.json +6 -0
- package/test-fixtures/punctuation2/800/record.json +14 -0
- package/test-fixtures/strip-punctuation/100_and_880/expectedResult.json +37 -0
- package/test-fixtures/strip-punctuation/100_and_880/metadata.json +5 -0
- package/test-fixtures/strip-punctuation/100_and_880/record.json +35 -0
- package/test-fixtures/strip-punctuation/240/expectedResult.json +16 -0
- package/test-fixtures/strip-punctuation/240/metadata.json +6 -0
- package/test-fixtures/strip-punctuation/240/record.json +14 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mergeField500Lisapainokset.js","names":["_default","description","validate","fix","record","res","message","valid","mergeLisapainokset","relevantFields","getRelevantFields","length","printData","extractAllPrintData","fields","filter","field","validLisapainosField","tag","subfields","code","value","match","fieldToPrintsString","replace","printPreference","getPrintPreference","findIndex","pp","mergePrintData","value1","value2","index1","print1","year1","split","index2","print2","year2","betterIndex","betterPrint","getBetterPrint","betterYear","getBetterYear","y1","y2","i1","i2","allPrintData","i","j","fieldsPrintData","currPrintData","printIndex","undefined","mergedPrintData","p","collapsedArray","content","join","forEach","index","removeField"],"sources":["../src/mergeField500Lisapainokset.js"],"sourcesContent":["export default function () {\n\n return {\n description: 'Merge 500 $a Lisäpainokset fields',\n validate, fix\n };\n\n function fix(record) {\n const res = {message: [], fix: [], valid: true};\n mergeLisapainokset(record);\n return res;\n }\n\n function validate(record) {\n const relevantFields = getRelevantFields(record);\n if (relevantFields.length < 2) {\n return {message: [], 'valid': true}; // No action required\n }\n\n const printData = extractAllPrintData(relevantFields);\n if (printData.length === 0) {\n return {message: ['There are issues, but the fixer can not fix them!'], 'valid': false}; // No action required\n }\n\n return {message: [`Fixer can merge ${relevantFields.length} 500 $a Lisäpainokset fields into one`], 'valid': false};\n }\n}\n\n\nfunction getRelevantFields(record) {\n return record.fields.filter(field => validLisapainosField(field));\n}\n\nfunction validLisapainosField(field) {\n // We are only interested in field 500 with a lone $a subfield.\n // Especially $9 FENNI<KEEP> should not be merged!\n if (field.tag !== '500' || field.subfields.length !== 1 || field.subfields[0].code !== 'a') {\n return false;\n }\n return field.subfields[0].value.match(/^(?:Lisäpainokset|Lisäpainos): (?:[1-9][0-9]*\\. (?:p\\.|painos|uppl\\.) [0-9]+\\.)(?: - [1-9][0-9]*\\. (?:p\\.|painos|uppl\\.) \\[?[0-9]+\\]?\\.)*$/u);\n}\n\nfunction fieldToPrintsString(field) {\n // Could this just be something on the lines of s/^\\S+ // ?\n return field.subfields[0].value.replace(/^(?:Lisäpainokset|Lisäpainos): /u, '').replace(/\\.$/u, '');\n}\n\nconst printPreference = ['painos', 'p.', 'upplaga', 'uppl.'];\nfunction getPrintPreference(value) {\n return printPreference.findIndex(pp => pp === value);\n}\n\nfunction mergePrintData(value1, value2) {\n const [index1, print1, year1] = value1.split(' ');\n const [index2, print2, year2] = value2.split(' ');\n\n const betterIndex = index1 ? index1 : index2; // just to cheat eslint...\n\n // merge print1 and print2\n const betterPrint = getBetterPrint(print1, print2);\n if (!betterPrint) {\n return null;\n }\n\n const betterYear = getBetterYear(year1, year2);\n if (!betterYear) {\n return null;\n }\n\n return `${betterIndex} ${betterPrint} ${betterYear}`;\n\n function getBetterYear(y1, y2) {\n if (y1 === y2 || y2 === `[${y1}]`) {\n return y1;\n }\n if (y1 === `[${y2}]`) {\n return y2;\n }\n return null;\n }\n\n function getBetterPrint(print1, print2) {\n if (print1 === print2) {\n return print1;\n }\n\n const i1 = getPrintPreference(print1);\n const i2 = getPrintPreference(print2);\n if (i1 === -1 || i2 === -1) {\n return null;\n }\n if (i1 <= i2) {\n return printPreference[i1];\n }\n return printPreference[i2];\n }\n\n}\n\n\nfunction extractAllPrintData(relevantFields) {\n /* eslint-disable */\n // Gather data about 500 $a Lisäpainokset.*\n let allPrintData = [];\n let i;\n let j;\n for (i=0; i < relevantFields.length; i++) {\n const value = fieldToPrintsString(relevantFields[i]);\n const fieldsPrintData = value.split('. - ');\n for (j=0; j < fieldsPrintData.length; j++) {\n let currPrintData = fieldsPrintData[j];\n // Example value: \"2. p. 2020\"\n const [ printIndex ] = currPrintData.split('.');\n if (allPrintData[printIndex] !== undefined) {\n if (allPrintData[printIndex] !== currPrintData ) {\n const mergedPrintData = mergePrintData(allPrintData[printIndex], currPrintData);\n if (!mergedPrintData) {\n return []; // reason for for-loops: exit function from within nested loops\n }\n currPrintData = mergedPrintData;\n }\n }\n allPrintData[printIndex] = currPrintData;\n }\n };\n return allPrintData.filter(p => p !== undefined);\n}\n\n\nexport function mergeLisapainokset(record) {\n const relevantFields = getRelevantFields(record);\n if (relevantFields.length < 2) {\n return;\n }\n\n /* eslint-disable */\n const collapsedArray = extractAllPrintData(relevantFields);\n if (collapsedArray.length === 0) {\n return;\n }\n\n const content = \"Lisäpainokset: \" + collapsedArray.join('. - ') + \".\";\n\n relevantFields[0].subfields[0].value = content; // Keep the place\n\n relevantFields.forEach((field, index) => {\n if (index > 0) {\n record.removeField(field);\n return;\n }\n });\n /* eslint-enable */\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mergeField500Lisapainokset.js","names":["_default","description","validate","fix","record","res","message","valid","mergeLisapainokset","relevantFields","getRelevantFields","length","printData","extractAllPrintData","fields","filter","field","validLisapainosField","tag","subfields","code","value","match","fieldToPrintsString","replace","printPreference","getPrintPreference","findIndex","pp","mergePrintData","value1","value2","index1","print1","year1","split","index2","print2","year2","betterIndex","betterPrint","getBetterPrint","betterYear","getBetterYear","y1","y2","i1","i2","allPrintData","i","j","fieldsPrintData","currPrintData","printIndex","undefined","mergedPrintData","p","collapsedArray","content","join","forEach","index","removeField"],"sources":["../src/mergeField500Lisapainokset.js"],"sourcesContent":["export default function () {\n\n return {\n description: 'Merge 500 $a Lisäpainokset fields',\n validate, fix\n };\n\n function fix(record) {\n const res = {message: [], fix: [], valid: true};\n mergeLisapainokset(record);\n return res;\n }\n\n function validate(record) {\n const relevantFields = getRelevantFields(record);\n if (relevantFields.length < 2) {\n return {message: [], 'valid': true}; // No action required\n }\n\n const printData = extractAllPrintData(relevantFields);\n if (printData.length === 0) {\n return {message: ['There are issues, but the fixer can not fix them!'], 'valid': false}; // No action required\n }\n\n return {message: [`Fixer can merge ${relevantFields.length} 500 $a Lisäpainokset fields into one`], 'valid': false};\n }\n}\n\n\nfunction getRelevantFields(record) {\n return record.fields.filter(field => validLisapainosField(field));\n}\n\nfunction validLisapainosField(field) {\n // We are only interested in field 500 with a lone $a subfield.\n // Especially $9 FENNI<KEEP> should not be merged!\n if (field.tag !== '500' || field.subfields.length !== 1 || field.subfields[0].code !== 'a') {\n return false;\n }\n return field.subfields[0].value.match(/^(?:Lisäpainokset|Lisäpainos): (?:[1-9][0-9]*\\. (?:p\\.|painos|uppl\\.) [0-9]+\\.)(?: - [1-9][0-9]*\\. (?:p\\.|painos|uppl\\.) \\[?[0-9]+\\]?\\.)*$/u);\n}\n\nfunction fieldToPrintsString(field) {\n // Could this just be something on the lines of s/^\\S+ // ?\n return field.subfields[0].value.replace(/^(?:Lisäpainokset|Lisäpainos): /u, '').replace(/\\.$/u, '');\n}\n\nconst printPreference = ['painos', 'p.', 'upplaga', 'uppl.'];\nfunction getPrintPreference(value) {\n return printPreference.findIndex(pp => pp === value);\n}\n\nfunction mergePrintData(value1, value2) {\n const [index1, print1, year1] = value1.split(' ');\n const [index2, print2, year2] = value2.split(' ');\n\n const betterIndex = index1 ? index1 : index2; // just to cheat eslint...\n\n // merge print1 and print2\n const betterPrint = getBetterPrint(print1, print2);\n if (!betterPrint) {\n return null;\n }\n\n const betterYear = getBetterYear(year1, year2);\n if (!betterYear) {\n return null;\n }\n\n return `${betterIndex} ${betterPrint} ${betterYear}`;\n\n function getBetterYear(y1, y2) {\n if (y1 === y2 || y2 === `[${y1}]`) {\n return y1;\n }\n if (y1 === `[${y2}]`) {\n return y2;\n }\n return null;\n }\n\n function getBetterPrint(print1, print2) {\n if (print1 === print2) {\n return print1;\n }\n\n const i1 = getPrintPreference(print1);\n const i2 = getPrintPreference(print2);\n if (i1 === -1 || i2 === -1) {\n return null;\n }\n if (i1 <= i2) {\n return printPreference[i1];\n }\n return printPreference[i2];\n }\n\n}\n\n\nfunction extractAllPrintData(relevantFields) {\n /* eslint-disable */\n // Gather data about 500 $a Lisäpainokset.*\n let allPrintData = [];\n let i;\n let j;\n for (i=0; i < relevantFields.length; i++) {\n const value = fieldToPrintsString(relevantFields[i]);\n const fieldsPrintData = value.split('. - ');\n for (j=0; j < fieldsPrintData.length; j++) {\n let currPrintData = fieldsPrintData[j];\n // Example value: \"2. p. 2020\"\n const [ printIndex ] = currPrintData.split('.');\n if (allPrintData[printIndex] !== undefined) {\n if (allPrintData[printIndex] !== currPrintData ) {\n const mergedPrintData = mergePrintData(allPrintData[printIndex], currPrintData);\n if (!mergedPrintData) {\n return []; // reason for for-loops: exit function from within nested loops\n }\n currPrintData = mergedPrintData;\n }\n }\n allPrintData[printIndex] = currPrintData;\n }\n };\n return allPrintData.filter(p => p !== undefined);\n}\n\n\nexport function mergeLisapainokset(record) {\n const relevantFields = getRelevantFields(record);\n if (relevantFields.length < 2) {\n return;\n }\n\n /* eslint-disable */\n const collapsedArray = extractAllPrintData(relevantFields);\n if (collapsedArray.length === 0) {\n return;\n }\n\n const content = \"Lisäpainokset: \" + collapsedArray.join('. - ') + \".\";\n\n relevantFields[0].subfields[0].value = content; // Keep the place\n\n relevantFields.forEach((field, index) => {\n if (index > 0) {\n record.removeField(field);\n return;\n }\n });\n /* eslint-enable */\n}\n"],"mappings":";;;;;;;AAAe,SAAAA,SAAA,EAAY;EAEzB,OAAO;IACLC,WAAW,EAAE,mCAAmC;IAChDC,QAAQ;IAAEC;EACZ,CAAC;EAED,SAASA,GAAGA,CAACC,MAAM,EAAE;IACnB,MAAMC,GAAG,GAAG;MAACC,OAAO,EAAE,EAAE;MAAEH,GAAG,EAAE,EAAE;MAAEI,KAAK,EAAE;IAAI,CAAC;IAC/CC,kBAAkB,CAACJ,MAAM,CAAC;IAC1B,OAAOC,GAAG;EACZ;EAEA,SAASH,QAAQA,CAACE,MAAM,EAAE;IACxB,MAAMK,cAAc,GAAGC,iBAAiB,CAACN,MAAM,CAAC;IAChD,IAAIK,cAAc,CAACE,MAAM,GAAG,CAAC,EAAE;MAC7B,OAAO;QAACL,OAAO,EAAE,EAAE;QAAE,OAAO,EAAE;MAAI,CAAC,CAAC,CAAC;IACvC;IAEA,MAAMM,SAAS,GAAGC,mBAAmB,CAACJ,cAAc,CAAC;IACrD,IAAIG,SAAS,CAACD,MAAM,KAAK,CAAC,EAAE;MAC1B,OAAO;QAACL,OAAO,EAAE,CAAC,mDAAmD,CAAC;QAAE,OAAO,EAAE;MAAK,CAAC,CAAC,CAAC;IAC3F;IAEA,OAAO;MAACA,OAAO,EAAE,CAAE,mBAAkBG,cAAc,CAACE,MAAO,uCAAsC,CAAC;MAAE,OAAO,EAAE;IAAK,CAAC;EACrH;AACF;AAGA,SAASD,iBAAiBA,CAACN,MAAM,EAAE;EACjC,OAAOA,MAAM,CAACU,MAAM,CAACC,MAAM,CAACC,KAAK,IAAIC,oBAAoB,CAACD,KAAK,CAAC,CAAC;AACnE;AAEA,SAASC,oBAAoBA,CAACD,KAAK,EAAE;EACnC;EACA;EACA,IAAIA,KAAK,CAACE,GAAG,KAAK,KAAK,IAAIF,KAAK,CAACG,SAAS,CAACR,MAAM,KAAK,CAAC,IAAIK,KAAK,CAACG,SAAS,CAAC,CAAC,CAAC,CAACC,IAAI,KAAK,GAAG,EAAE;IAC1F,OAAO,KAAK;EACd;EACA,OAAOJ,KAAK,CAACG,SAAS,CAAC,CAAC,CAAC,CAACE,KAAK,CAACC,KAAK,CAAC,6IAA6I,CAAC;AACtL;AAEA,SAASC,mBAAmBA,CAACP,KAAK,EAAE;EAClC;EACA,OAAOA,KAAK,CAACG,SAAS,CAAC,CAAC,CAAC,CAACE,KAAK,CAACG,OAAO,CAAC,kCAAkC,EAAE,EAAE,CAAC,CAACA,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;AACrG;AAEA,MAAMC,eAAe,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC;AAC5D,SAASC,kBAAkBA,CAACL,KAAK,EAAE;EACjC,OAAOI,eAAe,CAACE,SAAS,CAACC,EAAE,IAAIA,EAAE,KAAKP,KAAK,CAAC;AACtD;AAEA,SAASQ,cAAcA,CAACC,MAAM,EAAEC,MAAM,EAAE;EACtC,MAAM,CAACC,MAAM,EAAEC,MAAM,EAAEC,KAAK,CAAC,GAAGJ,MAAM,CAACK,KAAK,CAAC,GAAG,CAAC;EACjD,MAAM,CAACC,MAAM,EAAEC,MAAM,EAAEC,KAAK,CAAC,GAAGP,MAAM,CAACI,KAAK,CAAC,GAAG,CAAC;EAEjD,MAAMI,WAAW,GAAGP,MAAM,GAAGA,MAAM,GAAGI,MAAM,CAAC,CAAC;;EAE9C;EACA,MAAMI,WAAW,GAAGC,cAAc,CAACR,MAAM,EAAEI,MAAM,CAAC;EAClD,IAAI,CAACG,WAAW,EAAE;IAChB,OAAO,IAAI;EACb;EAEA,MAAME,UAAU,GAAGC,aAAa,CAACT,KAAK,EAAEI,KAAK,CAAC;EAC9C,IAAI,CAACI,UAAU,EAAE;IACf,OAAO,IAAI;EACb;EAEA,OAAQ,GAAEH,WAAY,IAAGC,WAAY,IAAGE,UAAW,EAAC;EAEpD,SAASC,aAAaA,CAACC,EAAE,EAAEC,EAAE,EAAE;IAC7B,IAAID,EAAE,KAAKC,EAAE,IAAIA,EAAE,KAAM,IAAGD,EAAG,GAAE,EAAE;MACjC,OAAOA,EAAE;IACX;IACA,IAAIA,EAAE,KAAM,IAAGC,EAAG,GAAE,EAAE;MACpB,OAAOA,EAAE;IACX;IACA,OAAO,IAAI;EACb;EAEA,SAASJ,cAAcA,CAACR,MAAM,EAAEI,MAAM,EAAE;IACtC,IAAIJ,MAAM,KAAKI,MAAM,EAAE;MACrB,OAAOJ,MAAM;IACf;IAEA,MAAMa,EAAE,GAAGpB,kBAAkB,CAACO,MAAM,CAAC;IACrC,MAAMc,EAAE,GAAGrB,kBAAkB,CAACW,MAAM,CAAC;IACrC,IAAIS,EAAE,KAAK,CAAC,CAAC,IAAIC,EAAE,KAAK,CAAC,CAAC,EAAE;MAC1B,OAAO,IAAI;IACb;IACA,IAAID,EAAE,IAAIC,EAAE,EAAE;MACZ,OAAOtB,eAAe,CAACqB,EAAE,CAAC;IAC5B;IACA,OAAOrB,eAAe,CAACsB,EAAE,CAAC;EAC5B;AAEF;AAGA,SAASlC,mBAAmBA,CAACJ,cAAc,EAAE;EAC3C;EACA;EACA,IAAIuC,YAAY,GAAG,EAAE;EACrB,IAAIC,CAAC;EACL,IAAIC,CAAC;EACL,KAAKD,CAAC,GAAC,CAAC,EAAEA,CAAC,GAAGxC,cAAc,CAACE,MAAM,EAAEsC,CAAC,EAAE,EAAE;IACxC,MAAM5B,KAAK,GAAGE,mBAAmB,CAACd,cAAc,CAACwC,CAAC,CAAC,CAAC;IACpD,MAAME,eAAe,GAAG9B,KAAK,CAACc,KAAK,CAAC,MAAM,CAAC;IAC3C,KAAKe,CAAC,GAAC,CAAC,EAAEA,CAAC,GAAGC,eAAe,CAACxC,MAAM,EAAEuC,CAAC,EAAE,EAAE;MACzC,IAAIE,aAAa,GAAGD,eAAe,CAACD,CAAC,CAAC;MACtC;MACA,MAAM,CAAEG,UAAU,CAAE,GAAGD,aAAa,CAACjB,KAAK,CAAC,GAAG,CAAC;MAC/C,IAAIa,YAAY,CAACK,UAAU,CAAC,KAAKC,SAAS,EAAE;QAC1C,IAAIN,YAAY,CAACK,UAAU,CAAC,KAAKD,aAAa,EAAG;UAC/C,MAAMG,eAAe,GAAG1B,cAAc,CAACmB,YAAY,CAACK,UAAU,CAAC,EAAED,aAAa,CAAC;UAC/E,IAAI,CAACG,eAAe,EAAE;YACpB,OAAO,EAAE,CAAC,CAAC;UACb;UACAH,aAAa,GAAGG,eAAe;QACjC;MACF;MACAP,YAAY,CAACK,UAAU,CAAC,GAAGD,aAAa;IAC1C;EACF;EAAC;EACD,OAAOJ,YAAY,CAACjC,MAAM,CAACyC,CAAC,IAAIA,CAAC,KAAKF,SAAS,CAAC;AAClD;AAGO,SAAS9C,kBAAkBA,CAACJ,MAAM,EAAE;EACzC,MAAMK,cAAc,GAAGC,iBAAiB,CAACN,MAAM,CAAC;EAChD,IAAIK,cAAc,CAACE,MAAM,GAAG,CAAC,EAAE;IAC7B;EACF;;EAEA;EACA,MAAM8C,cAAc,GAAG5C,mBAAmB,CAACJ,cAAc,CAAC;EAC1D,IAAIgD,cAAc,CAAC9C,MAAM,KAAK,CAAC,EAAE;IAC/B;EACF;EAEA,MAAM+C,OAAO,GAAG,iBAAiB,GAAGD,cAAc,CAACE,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG;EAErElD,cAAc,CAAC,CAAC,CAAC,CAACU,SAAS,CAAC,CAAC,CAAC,CAACE,KAAK,GAAGqC,OAAO,CAAC,CAAC;;EAEhDjD,cAAc,CAACmD,OAAO,CAAC,CAAC5C,KAAK,EAAE6C,KAAK,KAAK;IACvC,IAAIA,KAAK,GAAG,CAAC,EAAE;MACbzD,MAAM,CAAC0D,WAAW,CAAC9C,KAAK,CAAC;MACzB;IACF;EACF,CAAC,CAAC;EACF;AACF","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mergeField500Lisapainokset.spec.js","names":["_chai","require","_marcRecord","_mergeField500Lisapainokset","_interopRequireDefault","_fixura","_fixugen","_debug","obj","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","debug","createDebugLogger","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","getFixture","enabled","fix","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/mergeField500Lisapainokset.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './mergeField500Lisapainokset';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\nimport createDebugLogger from 'debug';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'lisapainokset'],\n useMetadataFile: true,\n recurse: true,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/mergeField500Lisapainokset:test');\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n}\n\nasync function callback({getFixture, enabled = true, fix = false}) {\n if (enabled === false) {\n debug('TEST SKIPPED!');\n return;\n }\n\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,2BAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AACA,IAAAM,MAAA,GAAAH,sBAAA,CAAAH,OAAA;AAAsC,SAAAG,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEtC,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,eAAe,CAAC;EACzDC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,IAAI;EACbC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AACF,MAAMC,KAAK,GAAG,IAAAC,cAAiB,EAAC,0EAA0E,CAAC;AAE3G,eAAeF,oBAAoBA,CAAA,EAAG;EACpC,MAAMG,SAAS,GAAG,MAAM,IAAAC,mCAAgB,EAAC,CAAC;EAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAChD;AAEA,eAAezB,QAAQA,CAAC;EAAC2B,UAAU;EAAEC,OAAO,GAAG,IAAI;EAAEC,GAAG,GAAG;AAAK,CAAC,EAAE;EACjE,IAAID,OAAO,KAAK,KAAK,EAAE;IACrBhB,KAAK,CAAC,eAAe,CAAC;IACtB;EACF;EAEA,MAAME,SAAS,GAAG,MAAM,IAAAC,mCAAgB,EAAC,CAAC;EAC1C,MAAMe,MAAM,GAAG,IAAIC,sBAAU,CAACJ,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMK,cAAc,GAAGL,UAAU,CAAC,qBAAqB,CAAC;EACxD;;EAEA,IAAI,CAACE,GAAG,EAAE;IACR,MAAMI,MAAM,GAAG,MAAMnB,SAAS,CAACY,QAAQ,CAACI,MAAM,CAAC;IAC/C,IAAAd,YAAM,EAACiB,MAAM,CAAC,CAAChB,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMlB,SAAS,CAACe,GAAG,CAACC,MAAM,CAAC;EAC3B,IAAAd,YAAM,EAACc,MAAM,CAAC,CAACb,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;AACvC"}
|
|
1
|
+
{"version":3,"file":"mergeField500Lisapainokset.spec.js","names":["_chai","require","_marcRecord","_mergeField500Lisapainokset","_interopRequireDefault","_fixura","_fixugen","_debug","obj","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","debug","createDebugLogger","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","getFixture","enabled","fix","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/mergeField500Lisapainokset.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './mergeField500Lisapainokset';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\nimport createDebugLogger from 'debug';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'lisapainokset'],\n useMetadataFile: true,\n recurse: true,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/mergeField500Lisapainokset:test');\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n}\n\nasync function callback({getFixture, enabled = true, fix = false}) {\n if (enabled === false) {\n debug('TEST SKIPPED!');\n return;\n }\n\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,2BAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AACA,IAAAM,MAAA,GAAAH,sBAAA,CAAAH,OAAA;AAAsC,SAAAG,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEtC,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,eAAe,CAAC;EACzDC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,IAAI;EACbC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AACF,MAAMC,KAAK,GAAG,IAAAC,cAAiB,EAAC,0EAA0E,CAAC;AAE3G,eAAeF,oBAAoBA,CAAA,EAAG;EACpC,MAAMG,SAAS,GAAG,MAAM,IAAAC,mCAAgB,EAAC,CAAC;EAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAChD;AAEA,eAAezB,QAAQA,CAAC;EAAC2B,UAAU;EAAEC,OAAO,GAAG,IAAI;EAAEC,GAAG,GAAG;AAAK,CAAC,EAAE;EACjE,IAAID,OAAO,KAAK,KAAK,EAAE;IACrBhB,KAAK,CAAC,eAAe,CAAC;IACtB;EACF;EAEA,MAAME,SAAS,GAAG,MAAM,IAAAC,mCAAgB,EAAC,CAAC;EAC1C,MAAMe,MAAM,GAAG,IAAIC,sBAAU,CAACJ,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMK,cAAc,GAAGL,UAAU,CAAC,qBAAqB,CAAC;EACxD;;EAEA,IAAI,CAACE,GAAG,EAAE;IACR,MAAMI,MAAM,GAAG,MAAMnB,SAAS,CAACY,QAAQ,CAACI,MAAM,CAAC;IAC/C,IAAAd,YAAM,EAACiB,MAAM,CAAC,CAAChB,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMlB,SAAS,CAACe,GAAG,CAACC,MAAM,CAAC;EAC3B,IAAAd,YAAM,EAACc,MAAM,CAAC,CAACb,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;AACvC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mergeRelatorTermFields.js","names":["_clone","_interopRequireDefault","require","_punctuation","_utils","_sortSubfields","_sortRelatorTerms","obj","__esModule","default","_default","description","validate","fix","record","msg","mergeRelatorTermFields","res","message","valid","length","createNormalizedClone","field","clonedField","clone","fieldStripPunctuation","createNormalizedCloneWithoutRelatorTerms","subfields","filter","sf","code","fieldToRelatorTermSubfieldCode","includes","tag","getRelatorTermStrings","relatorTermSubfieldCode","map","value","extractAddableRelatorTerms","fromField","toField","normalizedFromFieldRelatorTerms","normalizedToFieldRelatorTerms","str","copyRelatorSubfields","newRelatorTerms","forEach","term","push","fields","get","result","comparisonFieldsAsString","f","fieldToString","nvdebug","i","currField","deleted","j","mergableField","substring","fieldFixPunctuation","sortAdjacentSubfields","sortAdjacentESubfields"],"sources":["../src/mergeRelatorTermFields.js"],"sourcesContent":["// Merge author/agent fields\n//\n// Rationale: Same author can appear in one 1XX and multiple 7XX fields having only different $e subfields.\n// These fields can be merged (and $e-subfields can then be sorted)...\n//\n// Author(s): Nicholas Volk\n\n\nimport clone from 'clone';\nimport {fieldFixPunctuation, fieldStripPunctuation} from './punctuation2';\nimport {fieldToString, nvdebug} from './utils';\nimport {sortAdjacentSubfields} from './sortSubfields';\nimport {sortAdjacentESubfields} from './sortRelatorTerms';\n//import createDebugLogger from 'debug';\n/*\n//const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:mergeRelatorTermFields');\n//const debugData = debug.extend('data');\n*/\n\nexport default function () {\n\n return {\n description: 'Merge author fields that only differ in $e relator terms',\n validate, fix\n };\n\n function fix(record) {\n const msg = mergeRelatorTermFields(record, true);\n const res = {message: msg, fix: msg, valid: true};\n return res;\n }\n\n function validate(record) {\n const msg = mergeRelatorTermFields(record, false);\n const res = {message: msg};\n\n res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data\n return res;\n }\n}\n\nfunction createNormalizedClone(field) {\n const clonedField = clone(field);\n // Normalize\n fieldStripPunctuation(clonedField);\n return clonedField;\n}\n\nfunction createNormalizedCloneWithoutRelatorTerms(field) {\n const clonedField = createNormalizedClone(field);\n // Remove relator terms $e subfi:\n clonedField.subfields = clonedField.subfields.filter(sf => sf.code !== 'e'); // eslint-disable-line functional/immutable-data\n return clonedField;\n}\n\nfunction fieldToRelatorTermSubfieldCode(field) {\n if (['100', '110', '700', '710', '720', '751', '752'].includes(field.tag)) {\n return 'e';\n }\n if (field.tag === '111' || field.tag === '711') {\n return 'j';\n }\n return '?'; // No need to complain. Nothing is found.\n}\n\nfunction getRelatorTermStrings(relatorTermSubfieldCode, field) {\n return field.subfields.filter(sf => sf.code === relatorTermSubfieldCode).map(sf => sf.value);\n\n}\n\nfunction extractAddableRelatorTerms(fromField, toField) {\n const relatorTermSubfieldCode = fieldToRelatorTermSubfieldCode(fromField);\n const normalizedFromFieldRelatorTerms = getRelatorTermStrings(relatorTermSubfieldCode, fromField);\n if (normalizedFromFieldRelatorTerms.length === 0) {\n return [];\n }\n // Remove values that already exist:\n const normalizedToFieldRelatorTerms = getRelatorTermStrings(relatorTermSubfieldCode, toField);\n return normalizedFromFieldRelatorTerms.filter(str => !normalizedToFieldRelatorTerms.includes(str));\n}\n\n\nfunction copyRelatorSubfields(fromField, toField) {\n const relatorTermSubfieldCode = fieldToRelatorTermSubfieldCode(fromField);\n const newRelatorTerms = extractAddableRelatorTerms(fromField, toField);\n\n newRelatorTerms.forEach(term => toField.subfields.push({code: relatorTermSubfieldCode, value: term})); // eslint-disable-line functional/immutable-data\n\n}\n\nfunction mergeRelatorTermFields(record, fix = false) {\n /* eslint-disable */\n // NV: 111/711, 751 and 752 where so rare that I did not add them here\n let fields = record.get('(?:[17][01]0|720)'); \n let result = [];\n const comparisonFieldsAsString = fields.map(f => fieldToString(createNormalizedCloneWithoutRelatorTerms(f)));\n\n nvdebug(`mergeRelatorTermFields(): ${fields.length} cand field(s) found`);\n for(let i=0; i < fields.length-1; i++) {\n let currField = fields[i];\n if (currField.deleted) {\n continue;\n }\n nvdebug(`RT: Trying to pair ${comparisonFieldsAsString[i]}/${i}`);\n for (let j=i+1; j < fields.length; j++) {\n nvdebug(` Compare with ${comparisonFieldsAsString[j]}/${j}`);\n let mergableField = fields[j];\n // Skip 1/7 from 1XX/7XX for similarity check:\n if ( comparisonFieldsAsString[i].substring(1) !== comparisonFieldsAsString[j].substring(1)) {\n nvdebug(\" NOT PAIR\");\n continue;\n }\n if (mergableField.deleted) {\n nvdebug(\" DELETED\");\n continue;\n }\n const str = `MERGE RELATOR TERM FIELD: ${fieldToString(mergableField)}`;\n nvdebug(str);\n\n if(!result.includes(str)) {\n result.push(str)\n }\n\n if (fix) {\n mergableField.deleted = 1;\n copyRelatorSubfields(mergableField, currField);\n fieldFixPunctuation(currField);\n sortAdjacentSubfields(currField); // Put the added $e subfield to proper places.\n sortAdjacentESubfields(currField); // Sort $e subfields with each other\n fieldFixPunctuation(currField);\n\n }\n }\n }\n\n if(!fix) {\n fields.forEach(f => delete f.deleted);\n }\n\n record.fields = record.fields.filter(f => !f.deleted);\n /* eslint-enable */\n return result;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mergeRelatorTermFields.js","names":["_clone","_interopRequireDefault","require","_punctuation","_utils","_sortSubfields","_sortRelatorTerms","obj","__esModule","default","_default","description","validate","fix","record","msg","mergeRelatorTermFields","res","message","valid","length","createNormalizedClone","field","clonedField","clone","fieldStripPunctuation","createNormalizedCloneWithoutRelatorTerms","subfields","filter","sf","code","fieldToRelatorTermSubfieldCode","includes","tag","getRelatorTermStrings","relatorTermSubfieldCode","map","value","extractAddableRelatorTerms","fromField","toField","normalizedFromFieldRelatorTerms","normalizedToFieldRelatorTerms","str","copyRelatorSubfields","newRelatorTerms","forEach","term","push","fields","get","result","comparisonFieldsAsString","f","fieldToString","nvdebug","i","currField","deleted","j","mergableField","substring","fieldFixPunctuation","sortAdjacentSubfields","sortAdjacentESubfields"],"sources":["../src/mergeRelatorTermFields.js"],"sourcesContent":["// Merge author/agent fields\n//\n// Rationale: Same author can appear in one 1XX and multiple 7XX fields having only different $e subfields.\n// These fields can be merged (and $e-subfields can then be sorted)...\n//\n// Author(s): Nicholas Volk\n\n\nimport clone from 'clone';\nimport {fieldFixPunctuation, fieldStripPunctuation} from './punctuation2';\nimport {fieldToString, nvdebug} from './utils';\nimport {sortAdjacentSubfields} from './sortSubfields';\nimport {sortAdjacentESubfields} from './sortRelatorTerms';\n//import createDebugLogger from 'debug';\n/*\n//const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:mergeRelatorTermFields');\n//const debugData = debug.extend('data');\n*/\n\nexport default function () {\n\n return {\n description: 'Merge author fields that only differ in $e relator terms',\n validate, fix\n };\n\n function fix(record) {\n const msg = mergeRelatorTermFields(record, true);\n const res = {message: msg, fix: msg, valid: true};\n return res;\n }\n\n function validate(record) {\n const msg = mergeRelatorTermFields(record, false);\n const res = {message: msg};\n\n res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data\n return res;\n }\n}\n\nfunction createNormalizedClone(field) {\n const clonedField = clone(field);\n // Normalize\n fieldStripPunctuation(clonedField);\n return clonedField;\n}\n\nfunction createNormalizedCloneWithoutRelatorTerms(field) {\n const clonedField = createNormalizedClone(field);\n // Remove relator terms $e subfi:\n clonedField.subfields = clonedField.subfields.filter(sf => sf.code !== 'e'); // eslint-disable-line functional/immutable-data\n return clonedField;\n}\n\nfunction fieldToRelatorTermSubfieldCode(field) {\n if (['100', '110', '700', '710', '720', '751', '752'].includes(field.tag)) {\n return 'e';\n }\n if (field.tag === '111' || field.tag === '711') {\n return 'j';\n }\n return '?'; // No need to complain. Nothing is found.\n}\n\nfunction getRelatorTermStrings(relatorTermSubfieldCode, field) {\n return field.subfields.filter(sf => sf.code === relatorTermSubfieldCode).map(sf => sf.value);\n\n}\n\nfunction extractAddableRelatorTerms(fromField, toField) {\n const relatorTermSubfieldCode = fieldToRelatorTermSubfieldCode(fromField);\n const normalizedFromFieldRelatorTerms = getRelatorTermStrings(relatorTermSubfieldCode, fromField);\n if (normalizedFromFieldRelatorTerms.length === 0) {\n return [];\n }\n // Remove values that already exist:\n const normalizedToFieldRelatorTerms = getRelatorTermStrings(relatorTermSubfieldCode, toField);\n return normalizedFromFieldRelatorTerms.filter(str => !normalizedToFieldRelatorTerms.includes(str));\n}\n\n\nfunction copyRelatorSubfields(fromField, toField) {\n const relatorTermSubfieldCode = fieldToRelatorTermSubfieldCode(fromField);\n const newRelatorTerms = extractAddableRelatorTerms(fromField, toField);\n\n newRelatorTerms.forEach(term => toField.subfields.push({code: relatorTermSubfieldCode, value: term})); // eslint-disable-line functional/immutable-data\n\n}\n\nfunction mergeRelatorTermFields(record, fix = false) {\n /* eslint-disable */\n // NV: 111/711, 751 and 752 where so rare that I did not add them here\n let fields = record.get('(?:[17][01]0|720)'); \n let result = [];\n const comparisonFieldsAsString = fields.map(f => fieldToString(createNormalizedCloneWithoutRelatorTerms(f)));\n\n nvdebug(`mergeRelatorTermFields(): ${fields.length} cand field(s) found`);\n for(let i=0; i < fields.length-1; i++) {\n let currField = fields[i];\n if (currField.deleted) {\n continue;\n }\n nvdebug(`RT: Trying to pair ${comparisonFieldsAsString[i]}/${i}`);\n for (let j=i+1; j < fields.length; j++) {\n nvdebug(` Compare with ${comparisonFieldsAsString[j]}/${j}`);\n let mergableField = fields[j];\n // Skip 1/7 from 1XX/7XX for similarity check:\n if ( comparisonFieldsAsString[i].substring(1) !== comparisonFieldsAsString[j].substring(1)) {\n nvdebug(\" NOT PAIR\");\n continue;\n }\n if (mergableField.deleted) {\n nvdebug(\" DELETED\");\n continue;\n }\n const str = `MERGE RELATOR TERM FIELD: ${fieldToString(mergableField)}`;\n nvdebug(str);\n\n if(!result.includes(str)) {\n result.push(str)\n }\n\n if (fix) {\n mergableField.deleted = 1;\n copyRelatorSubfields(mergableField, currField);\n fieldFixPunctuation(currField);\n sortAdjacentSubfields(currField); // Put the added $e subfield to proper places.\n sortAdjacentESubfields(currField); // Sort $e subfields with each other\n fieldFixPunctuation(currField);\n\n }\n }\n }\n\n if(!fix) {\n fields.forEach(f => delete f.deleted);\n }\n\n record.fields = record.fields.filter(f => !f.deleted);\n /* eslint-enable */\n return result;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mergeRelatorTermFields.spec.js","names":["_chai","require","_marcRecord","_mergeRelatorTermFields","_interopRequireDefault","_fixura","_fixugen","_debug","obj","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","debug","createDebugLogger","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","getFixture","enabled","fix","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/mergeRelatorTermFields.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './mergeRelatorTermFields';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\nimport createDebugLogger from 'debug';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'mergeRelatorTermFields'],\n useMetadataFile: true,\n recurse: true,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/mergeRelatorTermFields:test');\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n}\n\nasync function callback({getFixture, enabled = true, fix = false}) {\n if (enabled === false) {\n debug('TEST SKIPPED!');\n return;\n }\n\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,uBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AACA,IAAAM,MAAA,GAAAH,sBAAA,CAAAH,OAAA;AAAsC,SAAAG,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEtC,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,wBAAwB,CAAC;EAClEC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,IAAI;EACbC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AACF,MAAMC,KAAK,GAAG,IAAAC,cAAiB,EAAC,sEAAsE,CAAC;AAEvG,eAAeF,oBAAoBA,CAAA,EAAG;EACpC,MAAMG,SAAS,GAAG,MAAM,IAAAC,+BAAgB,EAAC,CAAC;EAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAChD;AAEA,eAAezB,QAAQA,CAAC;EAAC2B,UAAU;EAAEC,OAAO,GAAG,IAAI;EAAEC,GAAG,GAAG;AAAK,CAAC,EAAE;EACjE,IAAID,OAAO,KAAK,KAAK,EAAE;IACrBhB,KAAK,CAAC,eAAe,CAAC;IACtB;EACF;EAEA,MAAME,SAAS,GAAG,MAAM,IAAAC,+BAAgB,EAAC,CAAC;EAC1C,MAAMe,MAAM,GAAG,IAAIC,sBAAU,CAACJ,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMK,cAAc,GAAGL,UAAU,CAAC,qBAAqB,CAAC;EACxD;;EAEA,IAAI,CAACE,GAAG,EAAE;IACR,MAAMI,MAAM,GAAG,MAAMnB,SAAS,CAACY,QAAQ,CAACI,MAAM,CAAC;IAC/C,IAAAd,YAAM,EAACiB,MAAM,CAAC,CAAChB,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMlB,SAAS,CAACe,GAAG,CAACC,MAAM,CAAC;EAC3B,IAAAd,YAAM,EAACc,MAAM,CAAC,CAACb,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;AACvC"}
|
|
1
|
+
{"version":3,"file":"mergeRelatorTermFields.spec.js","names":["_chai","require","_marcRecord","_mergeRelatorTermFields","_interopRequireDefault","_fixura","_fixugen","_debug","obj","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","debug","createDebugLogger","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","getFixture","enabled","fix","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/mergeRelatorTermFields.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './mergeRelatorTermFields';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\nimport createDebugLogger from 'debug';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'mergeRelatorTermFields'],\n useMetadataFile: true,\n recurse: true,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/mergeRelatorTermFields:test');\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n}\n\nasync function callback({getFixture, enabled = true, fix = false}) {\n if (enabled === false) {\n debug('TEST SKIPPED!');\n return;\n }\n\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,uBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AACA,IAAAM,MAAA,GAAAH,sBAAA,CAAAH,OAAA;AAAsC,SAAAG,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEtC,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,wBAAwB,CAAC;EAClEC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,IAAI;EACbC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AACF,MAAMC,KAAK,GAAG,IAAAC,cAAiB,EAAC,sEAAsE,CAAC;AAEvG,eAAeF,oBAAoBA,CAAA,EAAG;EACpC,MAAMG,SAAS,GAAG,MAAM,IAAAC,+BAAgB,EAAC,CAAC;EAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAChD;AAEA,eAAezB,QAAQA,CAAC;EAAC2B,UAAU;EAAEC,OAAO,GAAG,IAAI;EAAEC,GAAG,GAAG;AAAK,CAAC,EAAE;EACjE,IAAID,OAAO,KAAK,KAAK,EAAE;IACrBhB,KAAK,CAAC,eAAe,CAAC;IACtB;EACF;EAEA,MAAME,SAAS,GAAG,MAAM,IAAAC,+BAAgB,EAAC,CAAC;EAC1C,MAAMe,MAAM,GAAG,IAAIC,sBAAU,CAACJ,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMK,cAAc,GAAGL,UAAU,CAAC,qBAAqB,CAAC;EACxD;;EAEA,IAAI,CAACE,GAAG,EAAE;IACR,MAAMI,MAAM,GAAG,MAAMnB,SAAS,CAACY,QAAQ,CAACI,MAAM,CAAC;IAC/C,IAAAd,YAAM,EAACiB,MAAM,CAAC,CAAChB,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMlB,SAAS,CAACe,GAAG,CAACC,MAAM,CAAC;EAC3B,IAAAd,YAAM,EAACc,MAAM,CAAC,CAACb,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;AACvC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multiple-subfield-0.js","names":["_utils","require","asteriNamePrefixes","_default","description","validate","fix","record","fixField","field","removableSubfields","fieldGetDeletableSubfields","forEach","sf","removeSubfield","res","message","valid","relevantFields","getRelevantFields","validateField","relevantSubfields","length","fieldToString","map","value","join","messages","fieldGetSubfields","code","subfields","filter","isDeletableNamePartID","match","isAsteriNameId","nineDigitTail","slice","test","currPrefix","includes","neverDropThisID","prefixes","some","prefix","startsWith","fieldHasTitlePart","tag","fieldHasSubfield","subfield0s","nonAsteriNameSubfields","suspiciousSubfields","otherKnownNamePartIdentifiers","fieldIsRelevant","fields"],"sources":["../src/multiple-subfield-0.js"],"sourcesContent":["// import createDebugLogger from 'debug';\n// import clone from 'clone';\n// const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:multiple-subfield-0');\n\nimport {fieldHasSubfield, fieldToString} from './utils';\n\nconst asteriNamePrefixes = ['(FI-ASTERI-N)', '(FIN11)', 'http://urn.fi/URN:NBN:fi:au:finaf:', 'https://urn.fi/URN:NBN:fi:au:finaf:'];\n\nexport default function () {\n\n return {\n description: 'If Asteri subfield $0 is found, remove non-Asteri $0 subfields',\n validate, fix\n };\n\n function fix(record) {\n function fixField(field) {\n const removableSubfields = fieldGetDeletableSubfields(field);\n removableSubfields.forEach(sf => record.removeSubfield(sf, field));\n }\n\n const res = {message: [], fix: [], valid: true};\n\n const relevantFields = getRelevantFields(record);\n\n relevantFields.forEach(field => fixField(field));\n\n // message.valid = !(message.message.length >= 1); // eslint-disable-line functional/immutable-data\n return res;\n }\n\n function validate(record) {\n function validateField(field) {\n const relevantSubfields = fieldGetDeletableSubfields(field);\n if (relevantSubfields.length === 0) {\n return 'TROUBLE';\n }\n return `Field '${fieldToString(field)}' contains deletable $0 subfield(s): ${relevantSubfields.map(sf => sf.value).join(', ')}`;\n }\n const relevantFields = getRelevantFields(record);\n const messages = relevantFields.map(field => validateField(field));\n const res = {message: messages};\n res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data\n return res;\n }\n\n function fieldGetSubfields(field, code) {\n return field.subfields.filter(sf => sf.code === code);\n }\n\n function isDeletableNamePartID(value) {\n // List here $0s that always refer to name part, and to never to title part\n if (value.match(/(?:isni|orcid)/ui)) {\n return true;\n }\n return false;\n }\n\n function isAsteriNameId(value) { // This is true if have a valid Asteri entry (nine digits etc)\n const nineDigitTail = value.slice(-9);\n if (!(/^[0-9]{9}$/u).test(nineDigitTail)) {\n return false;\n }\n // Normalize prefix:\n const currPrefix = value.slice(0, -9);\n\n if (asteriNamePrefixes.includes(currPrefix)) {\n return true;\n }\n return false;\n }\n\n function neverDropThisID(value) {\n if (isAsteriNameId(value)) {\n return true;\n }\n\n const prefixes = ['(FIN', '(FI-'];\n if (prefixes.some(prefix => value.startsWith(prefix))) {\n return true;\n }\n\n return false;\n }\n\n\n function fieldHasTitlePart(field) {\n if (['600', '610', '700', '710', '800', '810'].includes(field.tag)) {\n if (fieldHasSubfield(field, 't')) {\n return true;\n }\n }\n return false;\n }\n\n function fieldGetDeletableSubfields(field) {\n const subfield0s = fieldGetSubfields(field, '0');\n\n if (subfield0s.length < 2) {\n return []; // We have nothing to delete\n }\n\n // Field must contain non-Asteri subfields and Asteri subfiels.\n const nonAsteriNameSubfields = subfield0s.filter(sf => !isAsteriNameId(sf.value));\n if (nonAsteriNameSubfields.length === 0 || nonAsteriNameSubfields.length === subfield0s.length) {\n return [];\n }\n\n const suspiciousSubfields = nonAsteriNameSubfields.filter(sf => !neverDropThisID(sf.value));\n\n // Field has deletable name part $0s:\n const otherKnownNamePartIdentifiers = suspiciousSubfields.filter(sf => isDeletableNamePartID(sf.value));\n\n if (fieldHasTitlePart(field)) {\n return otherKnownNamePartIdentifiers;\n }\n\n return suspiciousSubfields;\n }\n\n function fieldIsRelevant(field) {\n const subfields = fieldGetDeletableSubfields(field);\n return subfields.length > 0;\n }\n\n function getRelevantFields(record) {\n return record.fields.filter(field => field.subfields && fieldIsRelevant(field));\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"multiple-subfield-0.js","names":["_utils","require","asteriNamePrefixes","_default","description","validate","fix","record","fixField","field","removableSubfields","fieldGetDeletableSubfields","forEach","sf","removeSubfield","res","message","valid","relevantFields","getRelevantFields","validateField","relevantSubfields","length","fieldToString","map","value","join","messages","fieldGetSubfields","code","subfields","filter","isDeletableNamePartID","match","isAsteriNameId","nineDigitTail","slice","test","currPrefix","includes","neverDropThisID","prefixes","some","prefix","startsWith","fieldHasTitlePart","tag","fieldHasSubfield","subfield0s","nonAsteriNameSubfields","suspiciousSubfields","otherKnownNamePartIdentifiers","fieldIsRelevant","fields"],"sources":["../src/multiple-subfield-0.js"],"sourcesContent":["// import createDebugLogger from 'debug';\n// import clone from 'clone';\n// const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:multiple-subfield-0');\n\nimport {fieldHasSubfield, fieldToString} from './utils';\n\nconst asteriNamePrefixes = ['(FI-ASTERI-N)', '(FIN11)', 'http://urn.fi/URN:NBN:fi:au:finaf:', 'https://urn.fi/URN:NBN:fi:au:finaf:'];\n\nexport default function () {\n\n return {\n description: 'If Asteri subfield $0 is found, remove non-Asteri $0 subfields',\n validate, fix\n };\n\n function fix(record) {\n function fixField(field) {\n const removableSubfields = fieldGetDeletableSubfields(field);\n removableSubfields.forEach(sf => record.removeSubfield(sf, field));\n }\n\n const res = {message: [], fix: [], valid: true};\n\n const relevantFields = getRelevantFields(record);\n\n relevantFields.forEach(field => fixField(field));\n\n // message.valid = !(message.message.length >= 1); // eslint-disable-line functional/immutable-data\n return res;\n }\n\n function validate(record) {\n function validateField(field) {\n const relevantSubfields = fieldGetDeletableSubfields(field);\n if (relevantSubfields.length === 0) {\n return 'TROUBLE';\n }\n return `Field '${fieldToString(field)}' contains deletable $0 subfield(s): ${relevantSubfields.map(sf => sf.value).join(', ')}`;\n }\n const relevantFields = getRelevantFields(record);\n const messages = relevantFields.map(field => validateField(field));\n const res = {message: messages};\n res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data\n return res;\n }\n\n function fieldGetSubfields(field, code) {\n return field.subfields.filter(sf => sf.code === code);\n }\n\n function isDeletableNamePartID(value) {\n // List here $0s that always refer to name part, and to never to title part\n if (value.match(/(?:isni|orcid)/ui)) {\n return true;\n }\n return false;\n }\n\n function isAsteriNameId(value) { // This is true if have a valid Asteri entry (nine digits etc)\n const nineDigitTail = value.slice(-9);\n if (!(/^[0-9]{9}$/u).test(nineDigitTail)) {\n return false;\n }\n // Normalize prefix:\n const currPrefix = value.slice(0, -9);\n\n if (asteriNamePrefixes.includes(currPrefix)) {\n return true;\n }\n return false;\n }\n\n function neverDropThisID(value) {\n if (isAsteriNameId(value)) {\n return true;\n }\n\n const prefixes = ['(FIN', '(FI-'];\n if (prefixes.some(prefix => value.startsWith(prefix))) {\n return true;\n }\n\n return false;\n }\n\n\n function fieldHasTitlePart(field) {\n if (['600', '610', '700', '710', '800', '810'].includes(field.tag)) {\n if (fieldHasSubfield(field, 't')) {\n return true;\n }\n }\n return false;\n }\n\n function fieldGetDeletableSubfields(field) {\n const subfield0s = fieldGetSubfields(field, '0');\n\n if (subfield0s.length < 2) {\n return []; // We have nothing to delete\n }\n\n // Field must contain non-Asteri subfields and Asteri subfiels.\n const nonAsteriNameSubfields = subfield0s.filter(sf => !isAsteriNameId(sf.value));\n if (nonAsteriNameSubfields.length === 0 || nonAsteriNameSubfields.length === subfield0s.length) {\n return [];\n }\n\n const suspiciousSubfields = nonAsteriNameSubfields.filter(sf => !neverDropThisID(sf.value));\n\n // Field has deletable name part $0s:\n const otherKnownNamePartIdentifiers = suspiciousSubfields.filter(sf => isDeletableNamePartID(sf.value));\n\n if (fieldHasTitlePart(field)) {\n return otherKnownNamePartIdentifiers;\n }\n\n return suspiciousSubfields;\n }\n\n function fieldIsRelevant(field) {\n const subfields = fieldGetDeletableSubfields(field);\n return subfields.length > 0;\n }\n\n function getRelevantFields(record) {\n return record.fields.filter(field => field.subfields && fieldIsRelevant(field));\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multiple-subfield-0.spec.js","names":["_chai","require","_marcRecord","_multipleSubfield","_interopRequireDefault","_fixura","_fixugen","_debug","obj","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","debug","createDebugLogger","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","getFixture","enabled","fix","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/multiple-subfield-0.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './multiple-subfield-0';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\nimport createDebugLogger from 'debug';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'subfield0'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/multiple-subfield-0:test');\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n}\n\nasync function callback({getFixture, enabled = true, fix = false}) {\n if (enabled === false) {\n debug('TEST SKIPPED!');\n return;\n }\n\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,iBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AACA,IAAAM,MAAA,GAAAH,sBAAA,CAAAH,OAAA;AAAsC,SAAAG,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEtC,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,CAAC;EACrDC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AACF,MAAMC,KAAK,GAAG,IAAAC,cAAiB,EAAC,mEAAmE,CAAC;AAEpG,eAAeF,oBAAoBA,CAAA,EAAG;EACpC,MAAMG,SAAS,GAAG,MAAM,IAAAC,yBAAgB,EAAC,CAAC;EAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAChD;AAEA,eAAezB,QAAQA,CAAC;EAAC2B,UAAU;EAAEC,OAAO,GAAG,IAAI;EAAEC,GAAG,GAAG;AAAK,CAAC,EAAE;EACjE,IAAID,OAAO,KAAK,KAAK,EAAE;IACrBhB,KAAK,CAAC,eAAe,CAAC;IACtB;EACF;EAEA,MAAME,SAAS,GAAG,MAAM,IAAAC,yBAAgB,EAAC,CAAC;EAC1C,MAAMe,MAAM,GAAG,IAAIC,sBAAU,CAACJ,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMK,cAAc,GAAGL,UAAU,CAAC,qBAAqB,CAAC;EACxD;;EAEA,IAAI,CAACE,GAAG,EAAE;IACR,MAAMI,MAAM,GAAG,MAAMnB,SAAS,CAACY,QAAQ,CAACI,MAAM,CAAC;IAC/C,IAAAd,YAAM,EAACiB,MAAM,CAAC,CAAChB,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMlB,SAAS,CAACe,GAAG,CAACC,MAAM,CAAC;EAC3B,IAAAd,YAAM,EAACc,MAAM,CAAC,CAACb,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;AACvC"}
|
|
1
|
+
{"version":3,"file":"multiple-subfield-0.spec.js","names":["_chai","require","_marcRecord","_multipleSubfield","_interopRequireDefault","_fixura","_fixugen","_debug","obj","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","debug","createDebugLogger","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","getFixture","enabled","fix","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/multiple-subfield-0.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './multiple-subfield-0';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\nimport createDebugLogger from 'debug';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'subfield0'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/multiple-subfield-0:test');\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n}\n\nasync function callback({getFixture, enabled = true, fix = false}) {\n if (enabled === false) {\n debug('TEST SKIPPED!');\n return;\n }\n\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,iBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AACA,IAAAM,MAAA,GAAAH,sBAAA,CAAAH,OAAA;AAAsC,SAAAG,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEtC,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,CAAC;EACrDC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AACF,MAAMC,KAAK,GAAG,IAAAC,cAAiB,EAAC,mEAAmE,CAAC;AAEpG,eAAeF,oBAAoBA,CAAA,EAAG;EACpC,MAAMG,SAAS,GAAG,MAAM,IAAAC,yBAAgB,EAAC,CAAC;EAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAChD;AAEA,eAAezB,QAAQA,CAAC;EAAC2B,UAAU;EAAEC,OAAO,GAAG,IAAI;EAAEC,GAAG,GAAG;AAAK,CAAC,EAAE;EACjE,IAAID,OAAO,KAAK,KAAK,EAAE;IACrBhB,KAAK,CAAC,eAAe,CAAC;IACtB;EACF;EAEA,MAAME,SAAS,GAAG,MAAM,IAAAC,yBAAgB,EAAC,CAAC;EAC1C,MAAMe,MAAM,GAAG,IAAIC,sBAAU,CAACJ,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMK,cAAc,GAAGL,UAAU,CAAC,qBAAqB,CAAC;EACxD;;EAEA,IAAI,CAACE,GAAG,EAAE;IACR,MAAMI,MAAM,GAAG,MAAMnB,SAAS,CAACY,QAAQ,CAACI,MAAM,CAAC;IAC/C,IAAAd,YAAM,EAACiB,MAAM,CAAC,CAAChB,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMlB,SAAS,CAACe,GAAG,CAACC,MAAM,CAAC;EAC3B,IAAAd,YAAM,EAACc,MAAM,CAAC,CAACb,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;AACvC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"non-breaking-space.js","names":["_default","description","validate","fix","record","nonValidFields","fields","filter","field","collectNonValidFields","valid","length","messages","flatMap","tag","subfields","map","sf","code","value","test","valueContainsNonBreakingSpace","forEach","replaceAll","subfield"],"sources":["../src/non-breaking-space.js"],"sourcesContent":["/**\n * Provides interface to validate and fix record fields, which include subfields that contain no-breaking space character\n * @returns {Object} Object containing interfaces required by marc-record-validators-melinda package\n */\nexport default function () {\n return {\n description: 'Handles subfields that contains non-breaking space character',\n validate,\n fix\n };\n\n function validate(record) {\n const nonValidFields = record.fields.filter((field) => collectNonValidFields(field));\n\n const valid = nonValidFields.length === 0;\n const messages = nonValidFields.flatMap(({tag, subfields}) => subfields.map(sf => `Field ${tag} subfield $${sf.code} contains non-breaking space character(s)`));\n\n return valid ? {valid, messages: []} : {valid, messages};\n\n function collectNonValidFields(field) {\n if (field.value) {\n return (/\\u00A0/u).test(field.value);\n }\n\n return field.subfields.filter(valueContainsNonBreakingSpace).length > 0;\n }\n }\n\n /* eslint-disable functional/immutable-data,functional/no-conditional-statements */\n function fix(record) {\n record.fields.forEach((field) => {\n if (field.value) {\n field.value = field.value.replaceAll(/\\u00A0/gu, ' ');\n return;\n }\n\n field.subfields.forEach(subfield => {\n if (valueContainsNonBreakingSpace(subfield)) {\n subfield.value = subfield.value.replaceAll(/\\u00A0/gu, ' ');\n }\n });\n });\n }\n /* eslint-enable functional/immutable-data,functional/no-conditional-statements */\n\n function valueContainsNonBreakingSpace({value}) {\n return (/\\u00A0/u).test(value);\n }\n}\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACe,SAAAA,SAAA,EAAY;EACzB,OAAO;IACLC,WAAW,EAAE,8DAA8D;IAC3EC,QAAQ;IACRC;EACF,CAAC;EAED,SAASD,QAAQA,CAACE,MAAM,EAAE;IACxB,MAAMC,cAAc,GAAGD,MAAM,CAACE,MAAM,CAACC,MAAM,CAAEC,KAAK,IAAKC,qBAAqB,CAACD,KAAK,CAAC,CAAC;IAEpF,MAAME,KAAK,GAAGL,cAAc,CAACM,MAAM,KAAK,CAAC;IACzC,MAAMC,QAAQ,GAAGP,cAAc,CAACQ,OAAO,CAAC,CAAC;MAACC,GAAG;MAAEC;IAAS,CAAC,KAAKA,SAAS,CAACC,GAAG,CAACC,EAAE,IAAK,SAAQH,GAAI,cAAaG,EAAE,CAACC,IAAK,2CAA0C,CAAC,CAAC;IAEhK,OAAOR,KAAK,GAAG;MAACA,KAAK;MAAEE,QAAQ,EAAE;IAAE,CAAC,GAAG;MAACF,KAAK;MAAEE;IAAQ,CAAC;IAExD,SAASH,qBAAqBA,CAACD,KAAK,EAAE;MACpC,IAAIA,KAAK,CAACW,KAAK,EAAE;QACf,OAAQ,SAAS,CAAEC,IAAI,CAACZ,KAAK,CAACW,KAAK,CAAC;MACtC;MAEA,OAAOX,KAAK,CAACO,SAAS,CAACR,MAAM,CAACc,6BAA6B,CAAC,CAACV,MAAM,GAAG,CAAC;IACzE;EACF;;EAEA;EACA,SAASR,GAAGA,CAACC,MAAM,EAAE;IACnBA,MAAM,CAACE,MAAM,CAACgB,OAAO,CAAEd,KAAK,IAAK;MAC/B,IAAIA,KAAK,CAACW,KAAK,EAAE;QACfX,KAAK,CAACW,KAAK,GAAGX,KAAK,CAACW,KAAK,CAACI,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC;QACrD;MACF;MAEAf,KAAK,CAACO,SAAS,CAACO,OAAO,CAACE,QAAQ,IAAI;QAClC,IAAIH,6BAA6B,CAACG,QAAQ,CAAC,EAAE;UAC3CA,QAAQ,CAACL,KAAK,GAAGK,QAAQ,CAACL,KAAK,CAACI,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC;QAC7D;MACF,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ;EACA;;EAEA,SAASF,6BAA6BA,CAAC;IAACF;EAAK,CAAC,EAAE;IAC9C,OAAQ,SAAS,CAAEC,IAAI,CAACD,KAAK,CAAC;EAChC;AACF"}
|
|
1
|
+
{"version":3,"file":"non-breaking-space.js","names":["_default","description","validate","fix","record","nonValidFields","fields","filter","field","collectNonValidFields","valid","length","messages","flatMap","tag","subfields","map","sf","code","value","test","valueContainsNonBreakingSpace","forEach","replaceAll","subfield"],"sources":["../src/non-breaking-space.js"],"sourcesContent":["/**\n * Provides interface to validate and fix record fields, which include subfields that contain no-breaking space character\n * @returns {Object} Object containing interfaces required by marc-record-validators-melinda package\n */\nexport default function () {\n return {\n description: 'Handles subfields that contains non-breaking space character',\n validate,\n fix\n };\n\n function validate(record) {\n const nonValidFields = record.fields.filter((field) => collectNonValidFields(field));\n\n const valid = nonValidFields.length === 0;\n const messages = nonValidFields.flatMap(({tag, subfields}) => subfields.map(sf => `Field ${tag} subfield $${sf.code} contains non-breaking space character(s)`));\n\n return valid ? {valid, messages: []} : {valid, messages};\n\n function collectNonValidFields(field) {\n if (field.value) {\n return (/\\u00A0/u).test(field.value);\n }\n\n return field.subfields.filter(valueContainsNonBreakingSpace).length > 0;\n }\n }\n\n /* eslint-disable functional/immutable-data,functional/no-conditional-statements */\n function fix(record) {\n record.fields.forEach((field) => {\n if (field.value) {\n field.value = field.value.replaceAll(/\\u00A0/gu, ' ');\n return;\n }\n\n field.subfields.forEach(subfield => {\n if (valueContainsNonBreakingSpace(subfield)) {\n subfield.value = subfield.value.replaceAll(/\\u00A0/gu, ' ');\n }\n });\n });\n }\n /* eslint-enable functional/immutable-data,functional/no-conditional-statements */\n\n function valueContainsNonBreakingSpace({value}) {\n return (/\\u00A0/u).test(value);\n }\n}\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACe,SAAAA,SAAA,EAAY;EACzB,OAAO;IACLC,WAAW,EAAE,8DAA8D;IAC3EC,QAAQ;IACRC;EACF,CAAC;EAED,SAASD,QAAQA,CAACE,MAAM,EAAE;IACxB,MAAMC,cAAc,GAAGD,MAAM,CAACE,MAAM,CAACC,MAAM,CAAEC,KAAK,IAAKC,qBAAqB,CAACD,KAAK,CAAC,CAAC;IAEpF,MAAME,KAAK,GAAGL,cAAc,CAACM,MAAM,KAAK,CAAC;IACzC,MAAMC,QAAQ,GAAGP,cAAc,CAACQ,OAAO,CAAC,CAAC;MAACC,GAAG;MAAEC;IAAS,CAAC,KAAKA,SAAS,CAACC,GAAG,CAACC,EAAE,IAAK,SAAQH,GAAI,cAAaG,EAAE,CAACC,IAAK,2CAA0C,CAAC,CAAC;IAEhK,OAAOR,KAAK,GAAG;MAACA,KAAK;MAAEE,QAAQ,EAAE;IAAE,CAAC,GAAG;MAACF,KAAK;MAAEE;IAAQ,CAAC;IAExD,SAASH,qBAAqBA,CAACD,KAAK,EAAE;MACpC,IAAIA,KAAK,CAACW,KAAK,EAAE;QACf,OAAQ,SAAS,CAAEC,IAAI,CAACZ,KAAK,CAACW,KAAK,CAAC;MACtC;MAEA,OAAOX,KAAK,CAACO,SAAS,CAACR,MAAM,CAACc,6BAA6B,CAAC,CAACV,MAAM,GAAG,CAAC;IACzE;EACF;;EAEA;EACA,SAASR,GAAGA,CAACC,MAAM,EAAE;IACnBA,MAAM,CAACE,MAAM,CAACgB,OAAO,CAAEd,KAAK,IAAK;MAC/B,IAAIA,KAAK,CAACW,KAAK,EAAE;QACfX,KAAK,CAACW,KAAK,GAAGX,KAAK,CAACW,KAAK,CAACI,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC;QACrD;MACF;MAEAf,KAAK,CAACO,SAAS,CAACO,OAAO,CAACE,QAAQ,IAAI;QAClC,IAAIH,6BAA6B,CAACG,QAAQ,CAAC,EAAE;UAC3CA,QAAQ,CAACL,KAAK,GAAGK,QAAQ,CAACL,KAAK,CAACI,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC;QAC7D;MACF,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ;EACA;;EAEA,SAASF,6BAA6BA,CAAC;IAACF;EAAK,CAAC,EAAE;IAC9C,OAAQ,SAAS,CAAEC,IAAI,CAACD,KAAK,CAAC;EAChC;AACF","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"non-breaking-space.spec.js","names":["_chai","require","_marcRecord","_nonBreakingSpace","_interopRequireDefault","_fixura","_fixugen","obj","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","getFixture","fix","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/non-breaking-space.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './non-breaking-space';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'non-breaking-space'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n}\n\nasync function callback({getFixture, fix = false}) {\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n\n if (!fix) {\n const result = await validator.validate(record);\n expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,iBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AAA8C,SAAAG,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAE9C,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,oBAAoB,CAAC;EAC9DC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AAEF,eAAeA,oBAAoBA,CAAA,EAAG;EACpC,MAAMC,SAAS,GAAG,MAAM,IAAAC,yBAAgB,EAAC,CAAC;EAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAChD;AAEA,eAAevB,QAAQA,CAAC;EAACyB,UAAU;EAAEC,GAAG,GAAG;AAAK,CAAC,EAAE;EACjD,MAAMd,SAAS,GAAG,MAAM,IAAAC,yBAAgB,EAAC,CAAC;EAC1C,MAAMc,MAAM,GAAG,IAAIC,sBAAU,CAACH,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMI,cAAc,GAAGJ,UAAU,CAAC,qBAAqB,CAAC;EAExD,IAAI,CAACC,GAAG,EAAE;IACR,MAAMI,MAAM,GAAG,MAAMlB,SAAS,CAACY,QAAQ,CAACG,MAAM,CAAC;IAC/C,IAAAb,YAAM,EAACgB,MAAM,CAAC,CAACf,EAAE,CAACgB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMjB,SAAS,CAACc,GAAG,CAACC,MAAM,CAAC;EAC3B,IAAAb,YAAM,EAACa,MAAM,CAAC,CAACZ,EAAE,CAACgB,GAAG,CAACF,cAAc,CAAC;AACvC"}
|
|
1
|
+
{"version":3,"file":"non-breaking-space.spec.js","names":["_chai","require","_marcRecord","_nonBreakingSpace","_interopRequireDefault","_fixura","_fixugen","obj","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","getFixture","fix","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/non-breaking-space.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './non-breaking-space';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'non-breaking-space'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n}\n\nasync function callback({getFixture, fix = false}) {\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n\n if (!fix) {\n const result = await validator.validate(record);\n expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,iBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AAA8C,SAAAG,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAE9C,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,oBAAoB,CAAC;EAC9DC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AAEF,eAAeA,oBAAoBA,CAAA,EAAG;EACpC,MAAMC,SAAS,GAAG,MAAM,IAAAC,yBAAgB,EAAC,CAAC;EAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAChD;AAEA,eAAevB,QAAQA,CAAC;EAACyB,UAAU;EAAEC,GAAG,GAAG;AAAK,CAAC,EAAE;EACjD,MAAMd,SAAS,GAAG,MAAM,IAAAC,yBAAgB,EAAC,CAAC;EAC1C,MAAMc,MAAM,GAAG,IAAIC,sBAAU,CAACH,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMI,cAAc,GAAGJ,UAAU,CAAC,qBAAqB,CAAC;EAExD,IAAI,CAACC,GAAG,EAAE;IACR,MAAMI,MAAM,GAAG,MAAMlB,SAAS,CAACY,QAAQ,CAACG,MAAM,CAAC;IAC/C,IAAAb,YAAM,EAACgB,MAAM,CAAC,CAACf,EAAE,CAACgB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMjB,SAAS,CAACc,GAAG,CAACC,MAAM,CAAC;EAC3B,IAAAb,YAAM,EAACa,MAAM,CAAC,CAACZ,EAAE,CAACgB,GAAG,CAACF,cAAc,CAAC;AACvC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-dashes.js","names":["_clone","_interopRequireDefault","require","_utils","obj","__esModule","default","_default","description","validate","fix","record","nvdebug","fields","forEach","field","fixDashes","res","message","valid","validateField","length","orig","fieldToString","normalizedField","clone","mod","push","subfields","sf","subfieldFixDashes","subfield","isControlSubfieldCode","code","value","replace"],"sources":["../src/normalize-dashes.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport clone from 'clone';\nimport {fieldToString, isControlSubfieldCode, nvdebug} from './utils';\n\n// Author(s): Nicholas Volk\nexport default function () {\n\n return {\n description: 'Normalize various dashes to \"-\"',\n validate, fix\n };\n\n function fix(record) {\n nvdebug(`FIX ME`);\n record.fields.forEach(field => {\n fixDashes(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 nvdebug(`VALIDATE ME`);\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 nvdebug(` VALIDATE FIELD '${orig}'`);\n\n const normalizedField = fixDashes(clone(field));\n const mod = fieldToString(normalizedField);\n if (orig === mod) { // Fail as the input is \"broken\"/\"crap\"/sumthing\n return;\n }\n res.message.push(`'TODO: ${orig}' => '${mod}'`); // eslint-disable-line functional/immutable-data\n return;\n }\n}\n\n\nfunction fixDashes(field) {\n if (!field.subfields) {\n return field;\n }\n\n nvdebug(`Dashing ${fieldToString(field)}`);\n\n field.subfields.forEach(sf => subfieldFixDashes(sf));\n\n return field;\n\n function subfieldFixDashes(subfield) {\n if (isControlSubfieldCode(subfield.code)) {\n return;\n }\n // Normalize dashes U+2010 ... U+2015 to '-':\n subfield.value = subfield.value.replace(/[\\u2010\\u2011\\u2012\\u2013\\u2014\\u2015]/ug, '-'); // eslint-disable-line functional/immutable-data\n }\n\n}\n"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAAsE,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAFtE;;AAIA;AACe,SAAAG,SAAA,EAAY;EAEzB,OAAO;IACLC,WAAW,EAAE,iCAAiC;IAC9CC,QAAQ;IAAEC;EACZ,CAAC;EAED,SAASA,GAAGA,CAACC,MAAM,EAAE;IACnB,IAAAC,cAAO,EAAE,QAAO,CAAC;IACjBD,MAAM,CAACE,MAAM,CAACC,OAAO,CAACC,KAAK,IAAI;MAC7BC,SAAS,CAACD,KAAK,CAAC;IAClB,CAAC,CAAC;IAEF,MAAME,GAAG,GAAG;MAACC,OAAO,EAAE,EAAE;MAAER,GAAG,EAAE,EAAE;MAAES,KAAK,EAAE;IAAI,CAAC;IAC/C,OAAOF,GAAG;EACZ;EAEA,SAASR,QAAQA,CAACE,MAAM,EAAE;IACxB,MAAMM,GAAG,GAAG;MAACC,OAAO,EAAE;IAAE,CAAC;IAEzB,IAAAN,cAAO,EAAE,aAAY,CAAC;IACtBD,MAAM,CAACE,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;IACjC,IAAAH,cAAO,EAAE,oBAAmBU,IAAK,GAAE,CAAC;IAEpC,MAAME,eAAe,GAAGR,SAAS,CAAC,IAAAS,cAAK,EAACV,KAAK,CAAC,CAAC;IAC/C,MAAMW,GAAG,GAAG,IAAAH,oBAAa,EAACC,eAAe,CAAC;IAC1C,IAAIF,IAAI,KAAKI,GAAG,EAAE;MAAE;MAClB;IACF;IACAT,GAAG,CAACC,OAAO,CAACS,IAAI,CAAE,UAASL,IAAK,SAAQI,GAAI,GAAE,CAAC,CAAC,CAAC;IACjD;EACF;AACF;AAGA,SAASV,SAASA,CAACD,KAAK,EAAE;EACxB,IAAI,CAACA,KAAK,CAACa,SAAS,EAAE;IACpB,OAAOb,KAAK;EACd;EAEA,IAAAH,cAAO,EAAE,WAAU,IAAAW,oBAAa,EAACR,KAAK,CAAE,EAAC,CAAC;EAE1CA,KAAK,CAACa,SAAS,CAACd,OAAO,CAACe,EAAE,IAAIC,iBAAiB,CAACD,EAAE,CAAC,CAAC;EAEpD,OAAOd,KAAK;EAEZ,SAASe,iBAAiBA,CAACC,QAAQ,EAAE;IACnC,IAAI,IAAAC,4BAAqB,EAACD,QAAQ,CAACE,IAAI,CAAC,EAAE;MACxC;IACF;IACA;IACAF,QAAQ,CAACG,KAAK,GAAGH,QAAQ,CAACG,KAAK,CAACC,OAAO,CAAC,0CAA0C,EAAE,GAAG,CAAC,CAAC,CAAC;EAC5F;AAEF"}
|
|
1
|
+
{"version":3,"file":"normalize-dashes.js","names":["_clone","_interopRequireDefault","require","_utils","obj","__esModule","default","_default","description","validate","fix","record","nvdebug","fields","forEach","field","fixDashes","res","message","valid","validateField","length","orig","fieldToString","normalizedField","clone","mod","push","subfields","sf","subfieldFixDashes","subfield","isControlSubfieldCode","code","value","replace"],"sources":["../src/normalize-dashes.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport clone from 'clone';\nimport {fieldToString, isControlSubfieldCode, nvdebug} from './utils';\n\n// Author(s): Nicholas Volk\nexport default function () {\n\n return {\n description: 'Normalize various dashes to \"-\"',\n validate, fix\n };\n\n function fix(record) {\n nvdebug(`FIX ME`);\n record.fields.forEach(field => {\n fixDashes(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 nvdebug(`VALIDATE ME`);\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 nvdebug(` VALIDATE FIELD '${orig}'`);\n\n const normalizedField = fixDashes(clone(field));\n const mod = fieldToString(normalizedField);\n if (orig === mod) { // Fail as the input is \"broken\"/\"crap\"/sumthing\n return;\n }\n res.message.push(`'TODO: ${orig}' => '${mod}'`); // eslint-disable-line functional/immutable-data\n return;\n }\n}\n\n\nfunction fixDashes(field) {\n if (!field.subfields) {\n return field;\n }\n\n nvdebug(`Dashing ${fieldToString(field)}`);\n\n field.subfields.forEach(sf => subfieldFixDashes(sf));\n\n return field;\n\n function subfieldFixDashes(subfield) {\n if (isControlSubfieldCode(subfield.code)) {\n return;\n }\n // Normalize dashes U+2010 ... U+2015 to '-':\n subfield.value = subfield.value.replace(/[\\u2010\\u2011\\u2012\\u2013\\u2014\\u2015]/ug, '-'); // eslint-disable-line functional/immutable-data\n }\n\n}\n"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAAsE,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAFtE;;AAIA;AACe,SAAAG,SAAA,EAAY;EAEzB,OAAO;IACLC,WAAW,EAAE,iCAAiC;IAC9CC,QAAQ;IAAEC;EACZ,CAAC;EAED,SAASA,GAAGA,CAACC,MAAM,EAAE;IACnB,IAAAC,cAAO,EAAE,QAAO,CAAC;IACjBD,MAAM,CAACE,MAAM,CAACC,OAAO,CAACC,KAAK,IAAI;MAC7BC,SAAS,CAACD,KAAK,CAAC;IAClB,CAAC,CAAC;IAEF,MAAME,GAAG,GAAG;MAACC,OAAO,EAAE,EAAE;MAAER,GAAG,EAAE,EAAE;MAAES,KAAK,EAAE;IAAI,CAAC;IAC/C,OAAOF,GAAG;EACZ;EAEA,SAASR,QAAQA,CAACE,MAAM,EAAE;IACxB,MAAMM,GAAG,GAAG;MAACC,OAAO,EAAE;IAAE,CAAC;IAEzB,IAAAN,cAAO,EAAE,aAAY,CAAC;IACtBD,MAAM,CAACE,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;IACjC,IAAAH,cAAO,EAAE,oBAAmBU,IAAK,GAAE,CAAC;IAEpC,MAAME,eAAe,GAAGR,SAAS,CAAC,IAAAS,cAAK,EAACV,KAAK,CAAC,CAAC;IAC/C,MAAMW,GAAG,GAAG,IAAAH,oBAAa,EAACC,eAAe,CAAC;IAC1C,IAAIF,IAAI,KAAKI,GAAG,EAAE;MAAE;MAClB;IACF;IACAT,GAAG,CAACC,OAAO,CAACS,IAAI,CAAE,UAASL,IAAK,SAAQI,GAAI,GAAE,CAAC,CAAC,CAAC;IACjD;EACF;AACF;AAGA,SAASV,SAASA,CAACD,KAAK,EAAE;EACxB,IAAI,CAACA,KAAK,CAACa,SAAS,EAAE;IACpB,OAAOb,KAAK;EACd;EAEA,IAAAH,cAAO,EAAE,WAAU,IAAAW,oBAAa,EAACR,KAAK,CAAE,EAAC,CAAC;EAE1CA,KAAK,CAACa,SAAS,CAACd,OAAO,CAACe,EAAE,IAAIC,iBAAiB,CAACD,EAAE,CAAC,CAAC;EAEpD,OAAOd,KAAK;EAEZ,SAASe,iBAAiBA,CAACC,QAAQ,EAAE;IACnC,IAAI,IAAAC,4BAAqB,EAACD,QAAQ,CAACE,IAAI,CAAC,EAAE;MACxC;IACF;IACA;IACAF,QAAQ,CAACG,KAAK,GAAGH,QAAQ,CAACG,KAAK,CAACC,OAAO,CAAC,0CAA0C,EAAE,GAAG,CAAC,CAAC,CAAC;EAC5F;AAEF","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-dashes.spec.js","names":["_chai","require","_marcRecord","_normalizeDashes","_interopRequireDefault","_fixura","_fixugen","_debug","obj","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","debug","createDebugLogger","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","getFixture","enabled","fix","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/normalize-dashes.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './normalize-dashes';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\nimport createDebugLogger from 'debug';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'normalize-dashes'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/normalize-dashes:test');\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n}\n\nasync function callback({getFixture, enabled = true, fix = false}) {\n if (enabled === false) {\n debug('TEST SKIPPED!');\n return;\n }\n\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,gBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AACA,IAAAM,MAAA,GAAAH,sBAAA,CAAAH,OAAA;AAAsC,SAAAG,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEtC,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,kBAAkB,CAAC;EAC5DC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AACF,MAAMC,KAAK,GAAG,IAAAC,cAAiB,EAAC,gEAAgE,CAAC;AAEjG,eAAeF,oBAAoBA,CAAA,EAAG;EACpC,MAAMG,SAAS,GAAG,MAAM,IAAAC,wBAAgB,EAAC,CAAC;EAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAChD;AAEA,eAAezB,QAAQA,CAAC;EAAC2B,UAAU;EAAEC,OAAO,GAAG,IAAI;EAAEC,GAAG,GAAG;AAAK,CAAC,EAAE;EACjE,IAAID,OAAO,KAAK,KAAK,EAAE;IACrBhB,KAAK,CAAC,eAAe,CAAC;IACtB;EACF;EAEA,MAAME,SAAS,GAAG,MAAM,IAAAC,wBAAgB,EAAC,CAAC;EAC1C,MAAMe,MAAM,GAAG,IAAIC,sBAAU,CAACJ,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMK,cAAc,GAAGL,UAAU,CAAC,qBAAqB,CAAC;EACxD;;EAEA,IAAI,CAACE,GAAG,EAAE;IACR,MAAMI,MAAM,GAAG,MAAMnB,SAAS,CAACY,QAAQ,CAACI,MAAM,CAAC;IAC/C,IAAAd,YAAM,EAACiB,MAAM,CAAC,CAAChB,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMlB,SAAS,CAACe,GAAG,CAACC,MAAM,CAAC;EAC3B,IAAAd,YAAM,EAACc,MAAM,CAAC,CAACb,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;AACvC"}
|
|
1
|
+
{"version":3,"file":"normalize-dashes.spec.js","names":["_chai","require","_marcRecord","_normalizeDashes","_interopRequireDefault","_fixura","_fixugen","_debug","obj","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","debug","createDebugLogger","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","getFixture","enabled","fix","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/normalize-dashes.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './normalize-dashes';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\nimport createDebugLogger from 'debug';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'normalize-dashes'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/normalize-dashes:test');\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n}\n\nasync function callback({getFixture, enabled = true, fix = false}) {\n if (enabled === false) {\n debug('TEST SKIPPED!');\n return;\n }\n\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,gBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AACA,IAAAM,MAAA,GAAAH,sBAAA,CAAAH,OAAA;AAAsC,SAAAG,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEtC,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,kBAAkB,CAAC;EAC5DC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AACF,MAAMC,KAAK,GAAG,IAAAC,cAAiB,EAAC,gEAAgE,CAAC;AAEjG,eAAeF,oBAAoBA,CAAA,EAAG;EACpC,MAAMG,SAAS,GAAG,MAAM,IAAAC,wBAAgB,EAAC,CAAC;EAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAChD;AAEA,eAAezB,QAAQA,CAAC;EAAC2B,UAAU;EAAEC,OAAO,GAAG,IAAI;EAAEC,GAAG,GAAG;AAAK,CAAC,EAAE;EACjE,IAAID,OAAO,KAAK,KAAK,EAAE;IACrBhB,KAAK,CAAC,eAAe,CAAC;IACtB;EACF;EAEA,MAAME,SAAS,GAAG,MAAM,IAAAC,wBAAgB,EAAC,CAAC;EAC1C,MAAMe,MAAM,GAAG,IAAIC,sBAAU,CAACJ,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMK,cAAc,GAAGL,UAAU,CAAC,qBAAqB,CAAC;EACxD;;EAEA,IAAI,CAACE,GAAG,EAAE;IACR,MAAMI,MAAM,GAAG,MAAMnB,SAAS,CAACY,QAAQ,CAACI,MAAM,CAAC;IAC/C,IAAAd,YAAM,EAACiB,MAAM,CAAC,CAAChB,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMlB,SAAS,CAACe,GAAG,CAACC,MAAM,CAAC;EAC3B,IAAAd,YAAM,EAACc,MAAM,CAAC,CAACb,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;AACvC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-identifiers.js","names":["_clone","_interopRequireDefault","require","_utils","obj","__esModule","default","_default","description","validate","fix","record","res","message","valid","fields","forEach","field","fieldNormalizeControlNumbers","validateField","length","subfields","normalizedField","clone","orig","fieldToString","mod","push","alephInternal01","alephInternal10","alephInternal11","alephInternal12","alephInternal13","standard01","standard10","standard11","standard12","standard13","both01","ALEPH_INTERNAL","STANDARD","both10","both11","both12","both13","mappings","normalizeNineDigitIDs","value","targetFormat","nineDigitTail","slice","test","currPrefix","isIsni","normalizeIsni","replace","normalizeControlSubfieldValue","normalizedValue","normalizeAs","tag","subfieldCode","includes","undefined","sf","code"],"sources":["../src/normalize-identifiers.js"],"sourcesContent":["// Relocated from melinda-marc-record-merge-reducers (and renamed)\n//import createDebugLogger from 'debug';\nimport clone from 'clone';\nimport {fieldToString} from './utils';\n//const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:normalizeIdentifiers');\n\n/*\nfunction nvdebug(message, func) {\n if (func) { // eslint-disable-line functional/no-conditional-statements\n func(message);\n }\n console.info(message); // eslint-disable-line no-console\n}\n*/\n\nexport default function () {\n\n // NB! We should and could handle ISNIs here as well.\n return {\n description: 'Normalizes identifiers such as subfield $0 values',\n validate, fix\n };\n\n function fix(record) {\n const res = {message: [], fix: [], valid: true};\n //message.fix = []; // eslint-disable-line functional/immutable-data\n\n // Actual parsing of all fields\n /*\n if (!record.fields) {\n return false;\n }\n */\n\n //nvdebug(`NORMALIZE CONTROL NUMBER FIX`, debug);\n record.fields.forEach(field => {\n //nvdebug(` NORMALIZE CONTROL NUMBER FIX ${fieldToString(field)}`, debug);\n\n fieldNormalizeControlNumbers(field);\n //validateField(field, true, message);\n });\n\n // message.valid = !(message.message.length >= 1); // eslint-disable-line functional/immutable-data\n return res;\n }\n\n function validate(record) {\n const res = {message: []};\n //nvdebug(`NORMALIZE CONTROL NUMBER VALIDATE`, debug);\n // Actual parsing of all fields\n /*\n if (!record.fields) {\n return false;\n }\n */\n\n record.fields.forEach(field => {\n //nvdebug(` NORMALIZE CONTROL NUMBER VALIDATE ${fieldToString(field)}`, debug);\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 if (!field.subfields) {\n return;\n }\n\n const normalizedField = clone(field);\n fieldNormalizeControlNumbers(normalizedField);\n\n const orig = fieldToString(field);\n const mod = fieldToString(normalizedField);\n if (orig !== mod) { // Fail as the input is \"broken\"/\"crap\"/sumthing\n res.message.push(`'${orig}' could do with control number identifier normalization`); // eslint-disable-line functional/immutable-data\n return;\n }\n\n return;\n }\n}\n\nconst alephInternal01 = '(FIN01)';\nconst alephInternal10 = '(FIN10)';\nconst alephInternal11 = '(FIN11)';\nconst alephInternal12 = '(FIN12)';\nconst alephInternal13 = '(FIN13)';\n\nconst standard01 = '(FI-MELINDA)';\nconst standard10 = '(FI-ASTERI-S)';\nconst standard11 = '(FI-ASTERI-N)';\nconst standard12 = '(FI-ASTERI-A)';\nconst standard13 = '(FI-ASTERI-W)';\n\nconst both01 = {ALEPH_INTERNAL: alephInternal01, STANDARD: standard01};\nconst both10 = {ALEPH_INTERNAL: alephInternal10, STANDARD: standard10};\nconst both11 = {ALEPH_INTERNAL: alephInternal11, STANDARD: standard11};\nconst both12 = {ALEPH_INTERNAL: alephInternal12, STANDARD: standard12};\nconst both13 = {ALEPH_INTERNAL: alephInternal13, STANDARD: standard13};\n\nconst mappings = {\n 'FCC': both01,\n '(FI-ASTERI-A)': both12,\n '(FI-ASTERI-N)': both11,\n '(FI-ASTERI-S)': both10,\n '(FI-ASTERI-W)': both13,\n '(FI-MELINDA)': both01,\n '(FIN01)': both01,\n '(FIN10)': both10,\n '(FIN11)': both11,\n '(FIN12)': both12,\n '(FIN13)': both13,\n 'http://urn.fi/URN:NBN:fi:au:finaf:': both11,\n 'https://urn.fi/URN:NBN:fi:au:finaf:': both11\n};\n\nfunction normalizeNineDigitIDs(value, targetFormat = 'ALEPH_INTERNAL') {\n // $value should be prefix + nine-digits. Do nothing if nine-digit tail condition is not met:\n const nineDigitTail = value.slice(-9);\n if (!(/^[0-9]{9}$/u).test(nineDigitTail)) {\n return value;\n }\n // Normalize prefix:\n const currPrefix = value.slice(0, -9);\n\n if (currPrefix in mappings) {\n //nvdebug(`${currPrefix}, TF:${targetFormat}...`);\n //nvdebug(`${JSON.stringify(mappings[currPrefix])}`);\n return `${mappings[currPrefix][targetFormat]}${nineDigitTail}`;\n }\n return value;\n}\n\nexport function isIsni(value) {\n if ((/^\\(isni\\)(?: ?[0-9]{4}){4}$/u).test(value)) {\n return true;\n }\n if ((/^https:\\/\\/isni.org\\/isni\\/[0-9]{16}$/u).test(value)) {\n return true;\n }\n return false;\n}\n\nexport function normalizeIsni(value) {\n if (isIsni(value)) {\n return `https://isni.org/isni/${value.replace(/[^0-9]/gu, '')}`;\n }\n return value;\n}\n\n\nexport function normalizeControlSubfieldValue(value = '', targetFormat = 'ALEPH_INTERNAL') {\n if (isIsni(value)) {\n return normalizeIsni(value);\n }\n\n const normalizedValue = normalizeNineDigitIDs(value, targetFormat);\n if (normalizedValue !== value) {\n return normalizedValue;\n }\n\n // Something for isni IDs?\n return value;\n}\n\n//export function normalizableSubfieldPrefix(tag, sf) {\nexport function normalizeAs(tag, subfieldCode) {\n //nvdebug(`nAs ${tag}, ${subfieldCode}`);\n if (subfieldCode === '0' || subfieldCode === '1' || subfieldCode === 'w') {\n return 'ALEPH_INTERNAL';\n }\n\n if (tag === '035' && ['a', 'z'].includes(subfieldCode)) {\n return 'STANDARD';\n }\n return undefined;\n}\n\nexport function fieldNormalizeControlNumbers(field) {\n // Rename \"Prefixes\" as \"ControlNumberIdentifiers\"?\n // No, since isni etc... however, just \"ControlNumber\" would do...\n // \"identifiers\" ?\n if (!field.subfields) {\n return;\n }\n\n field.subfields.forEach(sf => {\n const targetFormat = normalizeAs(field.tag, sf.code);\n if (targetFormat !== undefined) {\n //nvdebug(`NORMALIZE SUBFIELD $${sf.code} IN FIELD: '${fieldToString(field)}' TO ${targetFormat}`);\n sf.value = normalizeControlSubfieldValue(sf.value, targetFormat); // eslint-disable-line functional/immutable-data\n return;\n }\n });\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"normalize-identifiers.js","names":["_clone","_interopRequireDefault","require","_utils","obj","__esModule","default","_default","description","validate","fix","record","res","message","valid","fields","forEach","field","fieldNormalizeControlNumbers","validateField","length","subfields","normalizedField","clone","orig","fieldToString","mod","push","alephInternal01","alephInternal10","alephInternal11","alephInternal12","alephInternal13","standard01","standard10","standard11","standard12","standard13","both01","ALEPH_INTERNAL","STANDARD","both10","both11","both12","both13","mappings","normalizeNineDigitIDs","value","targetFormat","nineDigitTail","slice","test","currPrefix","isIsni","normalizeIsni","replace","normalizeControlSubfieldValue","normalizedValue","normalizeAs","tag","subfieldCode","includes","undefined","sf","code"],"sources":["../src/normalize-identifiers.js"],"sourcesContent":["// Relocated from melinda-marc-record-merge-reducers (and renamed)\n//import createDebugLogger from 'debug';\nimport clone from 'clone';\nimport {fieldToString} from './utils';\n//const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:normalizeIdentifiers');\n\n/*\nfunction nvdebug(message, func) {\n if (func) { // eslint-disable-line functional/no-conditional-statements\n func(message);\n }\n console.info(message); // eslint-disable-line no-console\n}\n*/\n\nexport default function () {\n\n // NB! We should and could handle ISNIs here as well.\n return {\n description: 'Normalizes identifiers such as subfield $0 values',\n validate, fix\n };\n\n function fix(record) {\n const res = {message: [], fix: [], valid: true};\n //message.fix = []; // eslint-disable-line functional/immutable-data\n\n // Actual parsing of all fields\n /*\n if (!record.fields) {\n return false;\n }\n */\n\n //nvdebug(`NORMALIZE CONTROL NUMBER FIX`, debug);\n record.fields.forEach(field => {\n //nvdebug(` NORMALIZE CONTROL NUMBER FIX ${fieldToString(field)}`, debug);\n\n fieldNormalizeControlNumbers(field);\n //validateField(field, true, message);\n });\n\n // message.valid = !(message.message.length >= 1); // eslint-disable-line functional/immutable-data\n return res;\n }\n\n function validate(record) {\n const res = {message: []};\n //nvdebug(`NORMALIZE CONTROL NUMBER VALIDATE`, debug);\n // Actual parsing of all fields\n /*\n if (!record.fields) {\n return false;\n }\n */\n\n record.fields.forEach(field => {\n //nvdebug(` NORMALIZE CONTROL NUMBER VALIDATE ${fieldToString(field)}`, debug);\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 if (!field.subfields) {\n return;\n }\n\n const normalizedField = clone(field);\n fieldNormalizeControlNumbers(normalizedField);\n\n const orig = fieldToString(field);\n const mod = fieldToString(normalizedField);\n if (orig !== mod) { // Fail as the input is \"broken\"/\"crap\"/sumthing\n res.message.push(`'${orig}' could do with control number identifier normalization`); // eslint-disable-line functional/immutable-data\n return;\n }\n\n return;\n }\n}\n\nconst alephInternal01 = '(FIN01)';\nconst alephInternal10 = '(FIN10)';\nconst alephInternal11 = '(FIN11)';\nconst alephInternal12 = '(FIN12)';\nconst alephInternal13 = '(FIN13)';\n\nconst standard01 = '(FI-MELINDA)';\nconst standard10 = '(FI-ASTERI-S)';\nconst standard11 = '(FI-ASTERI-N)';\nconst standard12 = '(FI-ASTERI-A)';\nconst standard13 = '(FI-ASTERI-W)';\n\nconst both01 = {ALEPH_INTERNAL: alephInternal01, STANDARD: standard01};\nconst both10 = {ALEPH_INTERNAL: alephInternal10, STANDARD: standard10};\nconst both11 = {ALEPH_INTERNAL: alephInternal11, STANDARD: standard11};\nconst both12 = {ALEPH_INTERNAL: alephInternal12, STANDARD: standard12};\nconst both13 = {ALEPH_INTERNAL: alephInternal13, STANDARD: standard13};\n\nconst mappings = {\n 'FCC': both01,\n '(FI-ASTERI-A)': both12,\n '(FI-ASTERI-N)': both11,\n '(FI-ASTERI-S)': both10,\n '(FI-ASTERI-W)': both13,\n '(FI-MELINDA)': both01,\n '(FIN01)': both01,\n '(FIN10)': both10,\n '(FIN11)': both11,\n '(FIN12)': both12,\n '(FIN13)': both13,\n 'http://urn.fi/URN:NBN:fi:au:finaf:': both11,\n 'https://urn.fi/URN:NBN:fi:au:finaf:': both11\n};\n\nfunction normalizeNineDigitIDs(value, targetFormat = 'ALEPH_INTERNAL') {\n // $value should be prefix + nine-digits. Do nothing if nine-digit tail condition is not met:\n const nineDigitTail = value.slice(-9);\n if (!(/^[0-9]{9}$/u).test(nineDigitTail)) {\n return value;\n }\n // Normalize prefix:\n const currPrefix = value.slice(0, -9);\n\n if (currPrefix in mappings) {\n //nvdebug(`${currPrefix}, TF:${targetFormat}...`);\n //nvdebug(`${JSON.stringify(mappings[currPrefix])}`);\n return `${mappings[currPrefix][targetFormat]}${nineDigitTail}`;\n }\n return value;\n}\n\nexport function isIsni(value) {\n if ((/^\\(isni\\)(?: ?[0-9]{4}){4}$/u).test(value)) {\n return true;\n }\n if ((/^https:\\/\\/isni.org\\/isni\\/[0-9]{16}$/u).test(value)) {\n return true;\n }\n return false;\n}\n\nexport function normalizeIsni(value) {\n if (isIsni(value)) {\n return `https://isni.org/isni/${value.replace(/[^0-9]/gu, '')}`;\n }\n return value;\n}\n\n\nexport function normalizeControlSubfieldValue(value = '', targetFormat = 'ALEPH_INTERNAL') {\n if (isIsni(value)) {\n return normalizeIsni(value);\n }\n\n const normalizedValue = normalizeNineDigitIDs(value, targetFormat);\n if (normalizedValue !== value) {\n return normalizedValue;\n }\n\n // Something for isni IDs?\n return value;\n}\n\n//export function normalizableSubfieldPrefix(tag, sf) {\nexport function normalizeAs(tag, subfieldCode) {\n //nvdebug(`nAs ${tag}, ${subfieldCode}`);\n if (subfieldCode === '0' || subfieldCode === '1' || subfieldCode === 'w') {\n return 'ALEPH_INTERNAL';\n }\n\n if (tag === '035' && ['a', 'z'].includes(subfieldCode)) {\n return 'STANDARD';\n }\n return undefined;\n}\n\nexport function fieldNormalizeControlNumbers(field) {\n // Rename \"Prefixes\" as \"ControlNumberIdentifiers\"?\n // No, since isni etc... however, just \"ControlNumber\" would do...\n // \"identifiers\" ?\n if (!field.subfields) {\n return;\n }\n\n field.subfields.forEach(sf => {\n const targetFormat = normalizeAs(field.tag, sf.code);\n if (targetFormat !== undefined) {\n //nvdebug(`NORMALIZE SUBFIELD $${sf.code} IN FIELD: '${fieldToString(field)}' TO ${targetFormat}`);\n sf.value = normalizeControlSubfieldValue(sf.value, targetFormat); // eslint-disable-line functional/immutable-data\n return;\n }\n });\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-identifiers.spec.js","names":["_chai","require","_marcRecord","_normalizeIdentifiers","_interopRequireDefault","_fixura","_fixugen","_debug","obj","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","debug","createDebugLogger","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","getFixture","enabled","fix","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/normalize-identifiers.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './normalize-identifiers';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\nimport createDebugLogger from 'debug';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'normalize-identifiers'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/normalize-identifiers:test');\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n}\n\nasync function callback({getFixture, enabled = true, fix = false}) {\n if (enabled === false) {\n debug('TEST SKIPPED!');\n return;\n }\n\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,qBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AACA,IAAAM,MAAA,GAAAH,sBAAA,CAAAH,OAAA;AAAsC,SAAAG,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEtC,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,uBAAuB,CAAC;EACjEC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AACF,MAAMC,KAAK,GAAG,IAAAC,cAAiB,EAAC,qEAAqE,CAAC;AAEtG,eAAeF,oBAAoBA,CAAA,EAAG;EACpC,MAAMG,SAAS,GAAG,MAAM,IAAAC,6BAAgB,EAAC,CAAC;EAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAChD;AAEA,eAAezB,QAAQA,CAAC;EAAC2B,UAAU;EAAEC,OAAO,GAAG,IAAI;EAAEC,GAAG,GAAG;AAAK,CAAC,EAAE;EACjE,IAAID,OAAO,KAAK,KAAK,EAAE;IACrBhB,KAAK,CAAC,eAAe,CAAC;IACtB;EACF;EAEA,MAAME,SAAS,GAAG,MAAM,IAAAC,6BAAgB,EAAC,CAAC;EAC1C,MAAMe,MAAM,GAAG,IAAIC,sBAAU,CAACJ,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMK,cAAc,GAAGL,UAAU,CAAC,qBAAqB,CAAC;EACxD;;EAEA,IAAI,CAACE,GAAG,EAAE;IACR,MAAMI,MAAM,GAAG,MAAMnB,SAAS,CAACY,QAAQ,CAACI,MAAM,CAAC;IAC/C,IAAAd,YAAM,EAACiB,MAAM,CAAC,CAAChB,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMlB,SAAS,CAACe,GAAG,CAACC,MAAM,CAAC;EAC3B,IAAAd,YAAM,EAACc,MAAM,CAAC,CAACb,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;AACvC"}
|
|
1
|
+
{"version":3,"file":"normalize-identifiers.spec.js","names":["_chai","require","_marcRecord","_normalizeIdentifiers","_interopRequireDefault","_fixura","_fixugen","_debug","obj","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","debug","createDebugLogger","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","getFixture","enabled","fix","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/normalize-identifiers.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './normalize-identifiers';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\nimport createDebugLogger from 'debug';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'normalize-identifiers'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/normalize-identifiers:test');\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n}\n\nasync function callback({getFixture, enabled = true, fix = false}) {\n if (enabled === false) {\n debug('TEST SKIPPED!');\n return;\n }\n\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,qBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AACA,IAAAM,MAAA,GAAAH,sBAAA,CAAAH,OAAA;AAAsC,SAAAG,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEtC,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,uBAAuB,CAAC;EACjEC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AACF,MAAMC,KAAK,GAAG,IAAAC,cAAiB,EAAC,qEAAqE,CAAC;AAEtG,eAAeF,oBAAoBA,CAAA,EAAG;EACpC,MAAMG,SAAS,GAAG,MAAM,IAAAC,6BAAgB,EAAC,CAAC;EAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAChD;AAEA,eAAezB,QAAQA,CAAC;EAAC2B,UAAU;EAAEC,OAAO,GAAG,IAAI;EAAEC,GAAG,GAAG;AAAK,CAAC,EAAE;EACjE,IAAID,OAAO,KAAK,KAAK,EAAE;IACrBhB,KAAK,CAAC,eAAe,CAAC;IACtB;EACF;EAEA,MAAME,SAAS,GAAG,MAAM,IAAAC,6BAAgB,EAAC,CAAC;EAC1C,MAAMe,MAAM,GAAG,IAAIC,sBAAU,CAACJ,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMK,cAAc,GAAGL,UAAU,CAAC,qBAAqB,CAAC;EACxD;;EAEA,IAAI,CAACE,GAAG,EAAE;IACR,MAAMI,MAAM,GAAG,MAAMnB,SAAS,CAACY,QAAQ,CAACI,MAAM,CAAC;IAC/C,IAAAd,YAAM,EAACiB,MAAM,CAAC,CAAChB,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMlB,SAAS,CAACe,GAAG,CAACC,MAAM,CAAC;EAC3B,IAAAd,YAAM,EAACc,MAAM,CAAC,CAACb,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;AACvC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-qualifying-information.js","names":["_clone","_interopRequireDefault","require","_utils","obj","__esModule","default","_default","description","validate","fix","record","fields","forEach","field","normalizeQualifyingInformationField","res","message","valid","validateField","length","orig","fieldToString","normalizedField","clone","mod","push","includes","tag","subfields","sf","fixSubfield","code","value","normalizeValue","val","match"],"sources":["../src/normalize-qualifying-information.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 // Fixes MELINDA-8740\n description: 'Normalize qualifying information (020$q, 015$q, 024$q, 028$q)',\n validate, fix\n };\n\n function fix(record) {\n record.fields.forEach(field => {\n normalizeQualifyingInformationField(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 = clone(field);\n normalizeQualifyingInformationField(normalizedField);\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 normalizeQualifyingInformationField(field) {\n if (!['015', '020', '024', '028'].includes(field.tag) || !field.subfields) {\n return;\n }\n\n field.subfields.forEach(sf => fixSubfield(sf));\n return;\n\n function fixSubfield(sf) {\n if (sf.code !== 'q') {\n return;\n }\n sf.value = normalizeValue(sf.value); // eslint-disable-line functional/immutable-data\n }\n\n function normalizeValue(val) {\n // Should we do English as well: \"coil bound\" and \"comb-bound\" => \"spiral-bound\" (as per MTS)?\n\n if (val.match(/^(?:hft|häftad)[.,]*$/iu)) { // MELINDA-8740\n return 'mjuka pärmar';\n }\n\n if (val.match(/^inb(?:\\.|unden)[.,]*$/iu)) { // MELINDA-8740\n return 'hårda pärmar';\n }\n\n if (val === 'rengaskirja') { // https://www.kiwi.fi/display/melinda/Talonmies+tiedottaa+16.12.2021\n return 'kierreselkä';\n }\n\n if (val === 'ringpärm') { // https://www.kiwi.fi/display/melinda/Talonmies+tiedottaa+16.12.2021\n return 'spiralrygg';\n }\n\n if (val.match(/^nid(?:\\.|ottu)[.,]*$/iu)) { // MELINDA-8740\n return 'pehmeäkantinen';\n }\n\n if (val.match(/^sid(?:\\.|ottu)[.,]*$/iu)) { // MELINDA-8740\n return 'kovakantinen';\n }\n return val;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"normalize-qualifying-information.js","names":["_clone","_interopRequireDefault","require","_utils","obj","__esModule","default","_default","description","validate","fix","record","fields","forEach","field","normalizeQualifyingInformationField","res","message","valid","validateField","length","orig","fieldToString","normalizedField","clone","mod","push","includes","tag","subfields","sf","fixSubfield","code","value","normalizeValue","val","match"],"sources":["../src/normalize-qualifying-information.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 // Fixes MELINDA-8740\n description: 'Normalize qualifying information (020$q, 015$q, 024$q, 028$q)',\n validate, fix\n };\n\n function fix(record) {\n record.fields.forEach(field => {\n normalizeQualifyingInformationField(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 = clone(field);\n normalizeQualifyingInformationField(normalizedField);\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 normalizeQualifyingInformationField(field) {\n if (!['015', '020', '024', '028'].includes(field.tag) || !field.subfields) {\n return;\n }\n\n field.subfields.forEach(sf => fixSubfield(sf));\n return;\n\n function fixSubfield(sf) {\n if (sf.code !== 'q') {\n return;\n }\n sf.value = normalizeValue(sf.value); // eslint-disable-line functional/immutable-data\n }\n\n function normalizeValue(val) {\n // Should we do English as well: \"coil bound\" and \"comb-bound\" => \"spiral-bound\" (as per MTS)?\n\n if (val.match(/^(?:hft|häftad)[.,]*$/iu)) { // MELINDA-8740\n return 'mjuka pärmar';\n }\n\n if (val.match(/^inb(?:\\.|unden)[.,]*$/iu)) { // MELINDA-8740\n return 'hårda pärmar';\n }\n\n if (val === 'rengaskirja') { // https://www.kiwi.fi/display/melinda/Talonmies+tiedottaa+16.12.2021\n return 'kierreselkä';\n }\n\n if (val === 'ringpärm') { // https://www.kiwi.fi/display/melinda/Talonmies+tiedottaa+16.12.2021\n return 'spiralrygg';\n }\n\n if (val.match(/^nid(?:\\.|ottu)[.,]*$/iu)) { // MELINDA-8740\n return 'pehmeäkantinen';\n }\n\n if (val.match(/^sid(?:\\.|ottu)[.,]*$/iu)) { // MELINDA-8740\n return 'kovakantinen';\n }\n return val;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-qualifying-information.spec.js","names":["_chai","require","_marcRecord","_normalizeQualifyingInformation","_interopRequireDefault","_fixura","_fixugen","_debug","obj","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","debug","createDebugLogger","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","getFixture","enabled","fix","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/normalize-qualifying-information.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './normalize-qualifying-information';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\nimport createDebugLogger from 'debug';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'normalize-qualifying-information'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/normalize-qualifying-information:test');\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n}\n\nasync function callback({getFixture, enabled = true, fix = false}) {\n if (enabled === false) {\n debug('TEST SKIPPED!');\n return;\n }\n\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,+BAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AACA,IAAAM,MAAA,GAAAH,sBAAA,CAAAH,OAAA;AAAsC,SAAAG,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEtC,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,kCAAkC,CAAC;EAC5EC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AACF,MAAMC,KAAK,GAAG,IAAAC,cAAiB,EAAC,gFAAgF,CAAC;AAEjH,eAAeF,oBAAoBA,CAAA,EAAG;EACpC,MAAMG,SAAS,GAAG,MAAM,IAAAC,uCAAgB,EAAC,CAAC;EAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAChD;AAEA,eAAezB,QAAQA,CAAC;EAAC2B,UAAU;EAAEC,OAAO,GAAG,IAAI;EAAEC,GAAG,GAAG;AAAK,CAAC,EAAE;EACjE,IAAID,OAAO,KAAK,KAAK,EAAE;IACrBhB,KAAK,CAAC,eAAe,CAAC;IACtB;EACF;EAEA,MAAME,SAAS,GAAG,MAAM,IAAAC,uCAAgB,EAAC,CAAC;EAC1C,MAAMe,MAAM,GAAG,IAAIC,sBAAU,CAACJ,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMK,cAAc,GAAGL,UAAU,CAAC,qBAAqB,CAAC;EACxD;;EAEA,IAAI,CAACE,GAAG,EAAE;IACR,MAAMI,MAAM,GAAG,MAAMnB,SAAS,CAACY,QAAQ,CAACI,MAAM,CAAC;IAC/C,IAAAd,YAAM,EAACiB,MAAM,CAAC,CAAChB,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMlB,SAAS,CAACe,GAAG,CAACC,MAAM,CAAC;EAC3B,IAAAd,YAAM,EAACc,MAAM,CAAC,CAACb,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;AACvC"}
|
|
1
|
+
{"version":3,"file":"normalize-qualifying-information.spec.js","names":["_chai","require","_marcRecord","_normalizeQualifyingInformation","_interopRequireDefault","_fixura","_fixugen","_debug","obj","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","debug","createDebugLogger","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","getFixture","enabled","fix","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/normalize-qualifying-information.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './normalize-qualifying-information';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\nimport createDebugLogger from 'debug';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'normalize-qualifying-information'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/normalize-qualifying-information:test');\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n}\n\nasync function callback({getFixture, enabled = true, fix = false}) {\n if (enabled === false) {\n debug('TEST SKIPPED!');\n return;\n }\n\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,+BAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AACA,IAAAM,MAAA,GAAAH,sBAAA,CAAAH,OAAA;AAAsC,SAAAG,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEtC,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,kCAAkC,CAAC;EAC5EC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AACF,MAAMC,KAAK,GAAG,IAAAC,cAAiB,EAAC,gFAAgF,CAAC;AAEjH,eAAeF,oBAAoBA,CAAA,EAAG;EACpC,MAAMG,SAAS,GAAG,MAAM,IAAAC,uCAAgB,EAAC,CAAC;EAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAChD;AAEA,eAAezB,QAAQA,CAAC;EAAC2B,UAAU;EAAEC,OAAO,GAAG,IAAI;EAAEC,GAAG,GAAG;AAAK,CAAC,EAAE;EACjE,IAAID,OAAO,KAAK,KAAK,EAAE;IACrBhB,KAAK,CAAC,eAAe,CAAC;IACtB;EACF;EAEA,MAAME,SAAS,GAAG,MAAM,IAAAC,uCAAgB,EAAC,CAAC;EAC1C,MAAMe,MAAM,GAAG,IAAIC,sBAAU,CAACJ,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMK,cAAc,GAAGL,UAAU,CAAC,qBAAqB,CAAC;EACxD;;EAEA,IAAI,CAACE,GAAG,EAAE;IACR,MAAMI,MAAM,GAAG,MAAMnB,SAAS,CAACY,QAAQ,CAACI,MAAM,CAAC;IAC/C,IAAAd,YAAM,EAACiB,MAAM,CAAC,CAAChB,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMlB,SAAS,CAACe,GAAG,CAACC,MAAM,CAAC;EAC3B,IAAAd,YAAM,EAACc,MAAM,CAAC,CAACb,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;AACvC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-utf8-diacritics.js","names":["_clone","_interopRequireDefault","require","_unicodeDecomposition","_utils","obj","__esModule","default","_default","description","validate","fix","record","res","message","valid","fields","forEach","field","fieldFixComposition","validateField","length","subfields","orig","fieldToString","normalizedField","clone","mod","push","precomposeFinnishLetters","value","replace","fixComposition","match","nongenericNormalization","String","normalize","subfield","index"],"sources":["../src/normalize-utf8-diacritics.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport clone from 'clone';\nimport {convert as nongenericNormalization} from './unicode-decomposition';\nimport {fieldToString} from './utils';\n\n// Note that https://github.com/NatLibFi/marc-record-validators-melinda/blob/master/src/unicode-decomposition.js contains\n// similar functionalities. It's less generic and lacks diacritic removal but has it advantages as well.\n\n//const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/normalize-utf-diacritics');\n\n// See also https://github.com/NatLibFi/marc-record-validators-melinda/blob/master/src/unicode-decomposition.js .\n// It uses a list of convertable characters whilst this uses a generic stuff as well.\n// It handles various '.' and '©' type normalizations as well.\n// NB! This version has minor bug/feature issue regarding fixComposition()\n\n// Author(s): Nicholas Volk\nexport default function () {\n\n return {\n description: 'Generic normalization of latin UTF-8 diacritics. Precompose Finnish å, ä and ö. Decompose others.',\n validate, fix\n };\n\n function fix(record) {\n const res = {message: [], fix: [], valid: true};\n //message.fix = []; // eslint-disable-line functional/immutable-data\n\n // Actual parsing of all fields\n /*\n if (!record.fields) {\n return false;\n }\n */\n\n record.fields.forEach(field => {\n fieldFixComposition(field);\n //validateField(field, true, message);\n });\n\n // message.valid = !(message.message.length >= 1); // eslint-disable-line functional/immutable-data\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 if (!field.subfields) {\n return;\n }\n const orig = fieldToString(field);\n\n const normalizedField = fieldFixComposition(clone(field));\n const mod = fieldToString(normalizedField);\n if (orig !== mod) { // Fail as the input is \"broken\"/\"crap\"/sumthing\n res.message.push(`'${orig}' requires normalization`); // eslint-disable-line functional/immutable-data\n return;\n }\n return;\n }\n}\n\n\n// Traditionally these six are precomposed and all the rest decomposed\nexport function precomposeFinnishLetters(value = '') {\n return value.\n replace(/å/gu, 'å').\n replace(/ä/gu, 'ä').\n replace(/ö/gu, 'ö').\n replace(/Å/gu, 'Å').\n replace(/Ä/gu, 'Ä').\n replace(/Ö/gu, 'Ö');\n}\n\nexport function fixComposition(value = '') {\n // Target: Diacritics use Melinda internal notation.\n // General solution: Decompose everything and then compose 'å', 'ä', 'ö', 'Å', 'Ä' and 'Ö'.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize\n // Bug/Feature: the generic normalize() function also normalizes non-latin encodings as well, is this ok?\n // Exception: Input contains non-Latin script letters: don't decompose (see field 880 tests):\n if (value.match(/[^\\p{Script=Latin}\\p{Script=Common}\\p{Script=Inherited}]/u)) {\n // Problem with this approach: mixed language content (eg. cyrillic + latin) won't get normalized.\n // Hack/Damage control: we might add decomposition rules for most common diacritis here (eg. ü, é...).\n // OR we could split input to words and handle them separately?\n // NB! Hack not implemented yet. The main source of problematic case would probably be greek characters\n // within texts, that are written with latin alphabet.\n //return precomposeFinnishLetters(value);\n return nongenericNormalization(value);\n }\n return precomposeFinnishLetters(String(value).normalize('NFD'));\n}\n\n\nexport function fieldFixComposition(field) {\n if (!field.subfields) {\n return field;\n }\n //const originalValue = fieldToString(field);\n //nvdebug(`fFC: '${originalValue}'`, debug);\n field.subfields.forEach((subfield, index) => {\n field.subfields[index].value = fixComposition(subfield.value); // eslint-disable-line functional/immutable-data\n });\n //const newValue = fieldToString(field);\n //if (originalValue !== newValue) { // eslint-disable-line functional/no-conditional-statements\n // debug(`FIXCOMP: '${originalValue}' => '${newValue}'`);\n //}\n return field;\n}\n\n/*\nexport function fieldRemoveDecomposedDiacritics(field) {\n // Raison d'être/motivation: \"Sirén\" and diacriticless \"Siren\" might refer to a same surname, so this normalization\n // allows us to compare authors and avoid duplicate fields.\n field.subfields.forEach((sf) => {\n sf.value = removeDecomposedDiacritics(sf.value); // eslint-disable-line functional/immutable-data\n });\n\n function removeDecomposedDiacritics(value = '') {\n // NB #1: Does nothing to precomposed letters. String.normalize('NFD') can handle them.\n // NB #2: Finnish letters 'å', 'ä', 'ö', 'Å', Ä', and 'Ö' should be handled (=precomposed) before calling this.\n // NB #3: Calling our very own fixComposition() before this function handles both #1 and #2.\n return String(value).replace(/\\p{Diacritic}/gu, '');\n }\n}\n*/\n\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"normalize-utf8-diacritics.js","names":["_clone","_interopRequireDefault","require","_unicodeDecomposition","_utils","obj","__esModule","default","_default","description","validate","fix","record","res","message","valid","fields","forEach","field","fieldFixComposition","validateField","length","subfields","orig","fieldToString","normalizedField","clone","mod","push","precomposeFinnishLetters","value","replace","fixComposition","match","nongenericNormalization","String","normalize","subfield","index"],"sources":["../src/normalize-utf8-diacritics.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport clone from 'clone';\nimport {convert as nongenericNormalization} from './unicode-decomposition';\nimport {fieldToString} from './utils';\n\n// Note that https://github.com/NatLibFi/marc-record-validators-melinda/blob/master/src/unicode-decomposition.js contains\n// similar functionalities. It's less generic and lacks diacritic removal but has it advantages as well.\n\n//const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/normalize-utf-diacritics');\n\n// See also https://github.com/NatLibFi/marc-record-validators-melinda/blob/master/src/unicode-decomposition.js .\n// It uses a list of convertable characters whilst this uses a generic stuff as well.\n// It handles various '.' and '©' type normalizations as well.\n// NB! This version has minor bug/feature issue regarding fixComposition()\n\n// Author(s): Nicholas Volk\nexport default function () {\n\n return {\n description: 'Generic normalization of latin UTF-8 diacritics. Precompose Finnish å, ä and ö. Decompose others.',\n validate, fix\n };\n\n function fix(record) {\n const res = {message: [], fix: [], valid: true};\n //message.fix = []; // eslint-disable-line functional/immutable-data\n\n // Actual parsing of all fields\n /*\n if (!record.fields) {\n return false;\n }\n */\n\n record.fields.forEach(field => {\n fieldFixComposition(field);\n //validateField(field, true, message);\n });\n\n // message.valid = !(message.message.length >= 1); // eslint-disable-line functional/immutable-data\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 if (!field.subfields) {\n return;\n }\n const orig = fieldToString(field);\n\n const normalizedField = fieldFixComposition(clone(field));\n const mod = fieldToString(normalizedField);\n if (orig !== mod) { // Fail as the input is \"broken\"/\"crap\"/sumthing\n res.message.push(`'${orig}' requires normalization`); // eslint-disable-line functional/immutable-data\n return;\n }\n return;\n }\n}\n\n\n// Traditionally these six are precomposed and all the rest decomposed\nexport function precomposeFinnishLetters(value = '') {\n return value.\n replace(/å/gu, 'å').\n replace(/ä/gu, 'ä').\n replace(/ö/gu, 'ö').\n replace(/Å/gu, 'Å').\n replace(/Ä/gu, 'Ä').\n replace(/Ö/gu, 'Ö');\n}\n\nexport function fixComposition(value = '') {\n // Target: Diacritics use Melinda internal notation.\n // General solution: Decompose everything and then compose 'å', 'ä', 'ö', 'Å', 'Ä' and 'Ö'.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize\n // Bug/Feature: the generic normalize() function also normalizes non-latin encodings as well, is this ok?\n // Exception: Input contains non-Latin script letters: don't decompose (see field 880 tests):\n if (value.match(/[^\\p{Script=Latin}\\p{Script=Common}\\p{Script=Inherited}]/u)) {\n // Problem with this approach: mixed language content (eg. cyrillic + latin) won't get normalized.\n // Hack/Damage control: we might add decomposition rules for most common diacritis here (eg. ü, é...).\n // OR we could split input to words and handle them separately?\n // NB! Hack not implemented yet. The main source of problematic case would probably be greek characters\n // within texts, that are written with latin alphabet.\n //return precomposeFinnishLetters(value);\n return nongenericNormalization(value);\n }\n return precomposeFinnishLetters(String(value).normalize('NFD'));\n}\n\n\nexport function fieldFixComposition(field) {\n if (!field.subfields) {\n return field;\n }\n //const originalValue = fieldToString(field);\n //nvdebug(`fFC: '${originalValue}'`, debug);\n field.subfields.forEach((subfield, index) => {\n field.subfields[index].value = fixComposition(subfield.value); // eslint-disable-line functional/immutable-data\n });\n //const newValue = fieldToString(field);\n //if (originalValue !== newValue) { // eslint-disable-line functional/no-conditional-statements\n // debug(`FIXCOMP: '${originalValue}' => '${newValue}'`);\n //}\n return field;\n}\n\n/*\nexport function fieldRemoveDecomposedDiacritics(field) {\n // Raison d'être/motivation: \"Sirén\" and diacriticless \"Siren\" might refer to a same surname, so this normalization\n // allows us to compare authors and avoid duplicate fields.\n field.subfields.forEach((sf) => {\n sf.value = removeDecomposedDiacritics(sf.value); // eslint-disable-line functional/immutable-data\n });\n\n function removeDecomposedDiacritics(value = '') {\n // NB #1: Does nothing to precomposed letters. String.normalize('NFD') can handle them.\n // NB #2: Finnish letters 'å', 'ä', 'ö', 'Å', Ä', and 'Ö' should be handled (=precomposed) before calling this.\n // NB #3: Calling our very own fixComposition() before this function handles both #1 and #2.\n return String(value).replace(/\\p{Diacritic}/gu, '');\n }\n}\n*/\n\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-utf8-diacritics.spec.js","names":["_chai","require","_marcRecord","_normalizeUtf8Diacritics","_interopRequireDefault","_fixura","_fixugen","_debug","obj","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","debug","createDebugLogger","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","getFixture","enabled","fix","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/normalize-utf8-diacritics.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './normalize-utf8-diacritics';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\nimport createDebugLogger from 'debug';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'normalize-utf8-diacritics'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/normalize-utf8-diacritics:test');\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n}\n\nasync function callback({getFixture, enabled = true, fix = false}) {\n if (enabled === false) {\n debug('TEST SKIPPED!');\n return;\n }\n\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,wBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AACA,IAAAM,MAAA,GAAAH,sBAAA,CAAAH,OAAA;AAAsC,SAAAG,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEtC,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,2BAA2B,CAAC;EACrEC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AACF,MAAMC,KAAK,GAAG,IAAAC,cAAiB,EAAC,yEAAyE,CAAC;AAE1G,eAAeF,oBAAoBA,CAAA,EAAG;EACpC,MAAMG,SAAS,GAAG,MAAM,IAAAC,gCAAgB,EAAC,CAAC;EAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAChD;AAEA,eAAezB,QAAQA,CAAC;EAAC2B,UAAU;EAAEC,OAAO,GAAG,IAAI;EAAEC,GAAG,GAAG;AAAK,CAAC,EAAE;EACjE,IAAID,OAAO,KAAK,KAAK,EAAE;IACrBhB,KAAK,CAAC,eAAe,CAAC;IACtB;EACF;EAEA,MAAME,SAAS,GAAG,MAAM,IAAAC,gCAAgB,EAAC,CAAC;EAC1C,MAAMe,MAAM,GAAG,IAAIC,sBAAU,CAACJ,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMK,cAAc,GAAGL,UAAU,CAAC,qBAAqB,CAAC;EACxD;;EAEA,IAAI,CAACE,GAAG,EAAE;IACR,MAAMI,MAAM,GAAG,MAAMnB,SAAS,CAACY,QAAQ,CAACI,MAAM,CAAC;IAC/C,IAAAd,YAAM,EAACiB,MAAM,CAAC,CAAChB,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMlB,SAAS,CAACe,GAAG,CAACC,MAAM,CAAC;EAC3B,IAAAd,YAAM,EAACc,MAAM,CAAC,CAACb,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;AACvC"}
|
|
1
|
+
{"version":3,"file":"normalize-utf8-diacritics.spec.js","names":["_chai","require","_marcRecord","_normalizeUtf8Diacritics","_interopRequireDefault","_fixura","_fixugen","_debug","obj","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","debug","createDebugLogger","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","getFixture","enabled","fix","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/normalize-utf8-diacritics.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './normalize-utf8-diacritics';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\nimport createDebugLogger from 'debug';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'normalize-utf8-diacritics'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/normalize-utf8-diacritics:test');\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n}\n\nasync function callback({getFixture, enabled = true, fix = false}) {\n if (enabled === false) {\n debug('TEST SKIPPED!');\n return;\n }\n\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,wBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AACA,IAAAM,MAAA,GAAAH,sBAAA,CAAAH,OAAA;AAAsC,SAAAG,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEtC,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,2BAA2B,CAAC;EACrEC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AACF,MAAMC,KAAK,GAAG,IAAAC,cAAiB,EAAC,yEAAyE,CAAC;AAE1G,eAAeF,oBAAoBA,CAAA,EAAG;EACpC,MAAMG,SAAS,GAAG,MAAM,IAAAC,gCAAgB,EAAC,CAAC;EAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAChD;AAEA,eAAezB,QAAQA,CAAC;EAAC2B,UAAU;EAAEC,OAAO,GAAG,IAAI;EAAEC,GAAG,GAAG;AAAK,CAAC,EAAE;EACjE,IAAID,OAAO,KAAK,KAAK,EAAE;IACrBhB,KAAK,CAAC,eAAe,CAAC;IACtB;EACF;EAEA,MAAME,SAAS,GAAG,MAAM,IAAAC,gCAAgB,EAAC,CAAC;EAC1C,MAAMe,MAAM,GAAG,IAAIC,sBAAU,CAACJ,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMK,cAAc,GAAGL,UAAU,CAAC,qBAAqB,CAAC;EACxD;;EAEA,IAAI,CAACE,GAAG,EAAE;IACR,MAAMI,MAAM,GAAG,MAAMnB,SAAS,CAACY,QAAQ,CAACI,MAAM,CAAC;IAC/C,IAAAd,YAAM,EAACiB,MAAM,CAAC,CAAChB,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMlB,SAAS,CAACe,GAAG,CAACC,MAAM,CAAC;EAC3B,IAAAd,YAAM,EAACc,MAAM,CAAC,CAACb,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;AACvC","ignoreList":[]}
|