@natlibfi/marc-record-validators-melinda 9.0.6 → 9.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/CODEOWNERS +10 -0
- package/.github/dependabot.yml +40 -0
- package/.github/workflows/melinda-node-tests.yml +61 -0
- package/LICENSE.txt +21 -165
- package/README.md +1 -1
- package/dist/access-rights.js +0 -27
- package/dist/access-rights.js.map +1 -1
- package/dist/access-rights.spec.js +0 -27
- package/dist/access-rights.spec.js.map +1 -1
- package/dist/double-commas.js +0 -27
- package/dist/double-commas.js.map +1 -1
- package/dist/double-commas.spec.js +0 -27
- package/dist/double-commas.spec.js.map +1 -1
- package/dist/duplicates-ind1.js +0 -27
- package/dist/duplicates-ind1.js.map +1 -1
- package/dist/duplicates-ind1.spec.js +0 -27
- package/dist/duplicates-ind1.spec.js.map +1 -1
- package/dist/empty-fields.js +0 -28
- package/dist/empty-fields.js.map +1 -1
- package/dist/empty-fields.spec.js +0 -27
- package/dist/empty-fields.spec.js.map +1 -1
- package/dist/ending-punctuation-conf.js +0 -28
- package/dist/ending-punctuation-conf.js.map +1 -1
- package/dist/ending-punctuation.js.map +1 -1
- package/dist/ending-punctuation.spec.js +0 -27
- package/dist/ending-punctuation.spec.js.map +1 -1
- package/dist/field-exclusion.js +0 -28
- package/dist/field-exclusion.js.map +1 -1
- package/dist/field-exclusion.spec.js +0 -27
- package/dist/field-exclusion.spec.js.map +1 -1
- package/dist/field-structure.js +0 -28
- package/dist/field-structure.js.map +1 -1
- package/dist/field-structure.spec.js +0 -27
- package/dist/field-structure.spec.js.map +1 -1
- package/dist/fields-present.js +0 -27
- package/dist/fields-present.js.map +1 -1
- package/dist/fields-present.spec.js +0 -27
- package/dist/fields-present.spec.js.map +1 -1
- package/dist/fixed-fields.js +0 -27
- package/dist/fixed-fields.js.map +1 -1
- package/dist/fixed-fields.spec.js +0 -27
- package/dist/fixed-fields.spec.js.map +1 -1
- package/dist/identical-fields.js +0 -28
- package/dist/identical-fields.js.map +1 -1
- package/dist/identical-fields.spec.js +0 -27
- package/dist/identical-fields.spec.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/isbn-issn.js +0 -27
- package/dist/isbn-issn.js.map +1 -1
- package/dist/isbn-issn.spec.js +0 -27
- package/dist/isbn-issn.spec.js.map +1 -1
- package/dist/item-language.js +0 -27
- package/dist/item-language.js.map +1 -1
- package/dist/item-language.spec.js +0 -27
- package/dist/item-language.spec.js.map +1 -1
- package/dist/punctuation/index.js +21 -1
- package/dist/punctuation/index.js.map +1 -1
- package/dist/punctuation/rules/aut.js.map +1 -1
- package/dist/punctuation/rules/bib.js +8 -1
- package/dist/punctuation/rules/bib.js.map +1 -1
- package/dist/punctuation/rules/index.js.map +1 -1
- package/dist/punctuation.spec.js +49 -140
- package/dist/punctuation.spec.js.map +1 -1
- package/dist/resolvable-ext-references-melinda.js +0 -27
- package/dist/resolvable-ext-references-melinda.js.map +1 -1
- package/dist/resolvable-ext-references-melinda.spec.js +3 -29
- package/dist/resolvable-ext-references-melinda.spec.js.map +1 -1
- package/dist/sort-tags.js +0 -27
- package/dist/sort-tags.js.map +1 -1
- package/dist/sort-tags.spec.js +0 -27
- package/dist/sort-tags.spec.js.map +1 -1
- package/dist/subfield-exclusion.js +0 -28
- package/dist/subfield-exclusion.js.map +1 -1
- package/dist/subfield-exclusion.spec.js +0 -27
- package/dist/subfield-exclusion.spec.js.map +1 -1
- package/dist/unicode-decomposition.js +0 -28
- package/dist/unicode-decomposition.js.map +1 -1
- package/dist/unicode-decomposition.spec.js +0 -27
- package/dist/unicode-decomposition.spec.js.map +1 -1
- package/dist/urn.js +0 -27
- package/dist/urn.js.map +1 -1
- package/dist/urn.spec.js +0 -27
- package/dist/urn.spec.js.map +1 -1
- package/package.json +5 -3
- package/src/access-rights.js +0 -29
- package/src/access-rights.spec.js +0 -29
- package/src/double-commas.js +0 -29
- package/src/double-commas.spec.js +0 -29
- package/src/duplicates-ind1.js +0 -29
- package/src/duplicates-ind1.spec.js +0 -29
- package/src/empty-fields.js +0 -28
- package/src/empty-fields.spec.js +0 -29
- package/src/ending-punctuation-conf.js +0 -29
- package/src/ending-punctuation.spec.js +0 -29
- package/src/field-exclusion.js +0 -29
- package/src/field-exclusion.spec.js +0 -29
- package/src/field-structure.js +0 -29
- package/src/field-structure.spec.js +0 -29
- package/src/fields-present.js +0 -29
- package/src/fields-present.spec.js +0 -29
- package/src/fixed-fields.js +0 -29
- package/src/fixed-fields.spec.js +0 -29
- package/src/identical-fields.js +0 -28
- package/src/identical-fields.spec.js +0 -29
- package/src/index.js +0 -29
- package/src/isbn-issn.js +0 -28
- package/src/isbn-issn.spec.js +0 -29
- package/src/item-language.js +0 -29
- package/src/item-language.spec.js +0 -29
- package/src/punctuation/index.js +19 -1
- package/src/punctuation/rules/bib.js +9 -1
- package/src/punctuation.spec.js +48 -147
- package/src/resolvable-ext-references-melinda.js +0 -28
- package/src/resolvable-ext-references-melinda.spec.js +2 -30
- package/src/sort-tags.js +0 -29
- package/src/sort-tags.spec.js +0 -29
- package/src/subfield-exclusion.js +0 -29
- package/src/subfield-exclusion.spec.js +0 -29
- package/src/unicode-decomposition.js +0 -28
- package/src/unicode-decomposition.spec.js +0 -29
- package/src/urn.js +0 -29
- package/src/urn.spec.js +0 -29
- package/test-fixtures/punctuation/01/expectedResult.json +3 -0
- package/test-fixtures/punctuation/01/metadata.json +4 -0
- package/test-fixtures/punctuation/01/record.json +18 -0
- package/test-fixtures/punctuation/02/expectedResult.json +3 -0
- package/test-fixtures/punctuation/02/metadata.json +4 -0
- package/test-fixtures/punctuation/02/record.json +18 -0
- package/test-fixtures/punctuation/03/expectedResult.json +21 -0
- package/test-fixtures/punctuation/03/metadata.json +5 -0
- package/test-fixtures/punctuation/03/record.json +19 -0
- package/test-fixtures/punctuation/04/expectedResult.json +21 -0
- package/test-fixtures/punctuation/04/metadata.json +5 -0
- package/test-fixtures/punctuation/04/record.json +19 -0
- package/test-fixtures/punctuation/05/expectedResult.json +44 -0
- package/test-fixtures/punctuation/05/metadata.json +5 -0
- package/test-fixtures/punctuation/05/record.json +42 -0
- package/test-fixtures/resolvable-ext-references-melinda.js +0 -27
- package/.drone.yml +0 -93
package/dist/isbn-issn.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/isbn-issn.js"],"names":["hyphenateISBN","handleInvalid","validate","fix","description","stringHasSpace","str","indexOf","trimSpaces","value","replace","isMultiWord","inputString","trimmedString","getFirstWord","arr","split","invalidISBN","isbn","isbnOnly","auditedIsbn","ISBN","audit","validIsbn","invalidSubfield","subfield","code","invalidField020","field","subfields","some","sf","subfieldsIsbnRequiresHyphenation","includes","requiresHyphenation","isbn2","parsedIsbn","parse","isbn10h","isbn13h","getRelevantFields","record","fields","filter","tag","fieldsIsbnRequiresHyphenation","invalidField022","find","subfieldAorL","undefined","subfieldY","length","valid","map","subfieldA","name","subfieldZ","getISSN","reduce","acc","obj","msg","messages","concat","forEach","fixField020Subfield","push","removeSubfield","split020A","addHyphens","handleInvalidIsbn","normalizedValue","normalizeIsbnValue","head","position","tail","substring","trimmedValue","auditResult","numbersOnly","isbn10","isbn13"],"mappings":"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","sourcesContent":["/**\n*\n* @licstart The following is the entire license notice for the JavaScript code in this file.\n*\n* MARC record validators used in Melinda\n*\n* Copyright (c) 2014-2022 University Of Helsinki (The National Library Of Finland)\n*\n* This file is part of marc-record-validators-melinda\n*\n* marc-record-validators-melinda program is free software: you can redistribute it and/or modify\n* it under the terms of the GNU Lesser General Public License as\n* published by the Free Software Foundation, either version 3 of the\n* License, or (at your option) any later version.\n*\n* marc-record-validators-melinda is distributed in the hope that it will be useful,\n* but WITHOUT ANY WARRANTY; without even the implied warranty of\n* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n* GNU Lesser General Public License for more details.\n*\n* You should have received a copy of the GNU Lesser General Public License\n* along with this program. If not, see <http://www.gnu.org/licenses/>.\n*\n* @licend The above is the entire license notice\n* for the JavaScript code in this file.\n*\n*/\n\nimport ISBN from 'isbn3';\nimport validateISSN from '@natlibfi/issn-verify';\n\n// handleInvalid: move invalid 020$a to 020$z, and invalid 022$a to 022$y\nexport default ({hyphenateISBN = false, handleInvalid = false} = {}) => {\n return {\n validate, fix,\n description: 'Validates ISBN and ISSN values'\n };\n\n function stringHasSpace(str) {\n return str.indexOf(' ') > -1;\n }\n\n function trimSpaces(value) {\n return value.replace(/^\\s+/u, '').replace(/\\s+$/u, '').replace(/\\s+/gu, ' ');\n }\n\n function isMultiWord(inputString) {\n const trimmedString = trimSpaces(inputString);\n return stringHasSpace(trimmedString);\n }\n\n function getFirstWord(inputString) {\n const trimmedString = trimSpaces(inputString);\n const arr = trimmedString.split(' ');\n return arr[0];\n }\n\n function invalidISBN(isbn) {\n const isbnOnly = getFirstWord(isbn);\n const auditedIsbn = ISBN.audit(isbnOnly);\n return !auditedIsbn.validIsbn;\n }\n\n function invalidSubfield(subfield) {\n if (subfield.code !== 'a') {\n return false;\n }\n return invalidISBN(subfield.value) || isMultiWord(subfield.value);\n }\n\n\n function invalidField020(field) {\n if (field.subfields && field.subfields.some(sf => invalidSubfield(sf))) {\n return true;\n }\n return false;\n }\n\n function subfieldsIsbnRequiresHyphenation(subfield) {\n if (!hyphenateISBN || !['a', 'z'].includes(subfield.code)) {\n return false;\n }\n\n const isbn = getFirstWord(subfield.value);\n if (subfield.code === 'a') {\n return requiresHyphenation(isbn);\n }\n\n // $z is a bit hacky: hyphenation is required only iff valid and no '-' chars\n if (isbn.indexOf('-') > -1) {\n return false;\n }\n return !invalidISBN(isbn);\n\n function requiresHyphenation(isbn) {\n if (!hyphenateISBN) {\n return false;\n }\n // Handle old notation such as \"978-952-396-001-5 (nid.)\"\n const isbn2 = getFirstWord(isbn);\n\n if (invalidISBN(isbn2)) {\n return false;\n }\n\n const parsedIsbn = ISBN.parse(isbn2);\n // Return true only if existing ISBN is a valid and hyphenated 10 or 13 digit ISBN:\n return !(isbn2 === parsedIsbn.isbn10h || isbn2 === parsedIsbn.isbn13h);\n }\n }\n\n function getRelevantFields(record) {\n //return record.get(/^(?:020|022)$/u).filter(field => {\n return record.fields.filter(field => {\n if (!field.subfields) {\n return false;\n }\n // Check ISBN:\n if (field.tag === '020') {\n if (invalidField020(field)) { // checks multiwordness\n return true;\n }\n return fieldsIsbnRequiresHyphenation(field);\n }\n\n // Check ISSN:\n if (field.tag === '022') {\n if (invalidField022(field)) {\n return true;\n }\n\n const subfield = field.subfields.find(sf => sf.code === 'a' || sf.code === 'l');\n\n return !validateISSN(subfield.value);\n }\n return false;\n });\n\n function fieldsIsbnRequiresHyphenation(field) {\n return field.subfields && field.subfields.some(sf => subfieldsIsbnRequiresHyphenation(sf));\n }\n\n function invalidField022(field) {\n const subfieldAorL = field.subfields.find(sf => sf.code === 'a' || sf.code === 'l');\n\n if (subfieldAorL === undefined) {\n const subfieldY = field.subfields.find(sf => sf.code === 'y');\n if (subfieldY) {\n return false;\n }\n\n return true;\n }\n return false;\n }\n }\n\n function validate(record) {\n const fields = getRelevantFields(record);\n\n if (fields.length === 0) {\n return {valid: true};\n }\n\n return fields\n .map(field => {\n if (field.tag === '020') {\n const subfieldA = field.subfields.find(sf => sf.code === 'a');\n if (subfieldA) {\n return {name: 'ISBN', value: subfieldA.value};\n }\n const subfieldZ = field.subfields.find(sf => sf.code === 'z');\n if (subfieldZ) {\n return {name: 'ISBN (subfield Z)', value: subfieldZ.value};\n }\n\n return {name: 'ISBN', value: undefined};\n }\n\n return {name: 'ISSN', value: getISSN()};\n\n function getISSN() {\n const subfieldAorL = field.subfields.find(sf => sf.code === 'a' || sf.code === 'l');\n\n if (subfieldAorL) {\n return subfieldAorL.value;\n }\n\n return undefined;\n }\n })\n .reduce((acc, obj) => {\n const {name, value} = obj;\n const msg = `${name} (${value}) is not valid`;\n\n return {...acc, messages: acc.messages.concat(msg)};\n }, {valid: false, messages: []});\n }\n\n\n function fix(record) {\n getRelevantFields(record).forEach(field => {\n if (field.tag === '020') {\n field.subfields.forEach(subfield => fixField020Subfield(field, subfield));\n return;\n }\n // 022 ISSN:\n const subfield = field.subfields.find(sf => sf.code === 'a' || sf.code === 'l');\n if (subfield && handleInvalid) { // eslint-disable-line functional/no-conditional-statement\n // $a/$l => $y (bit overkill to add $z and remove $a/$l instead of just renaming)\n field.subfields.push({code: 'y', value: subfield.value}); // eslint-disable-line functional/immutable-data\n record.removeSubfield(subfield, field);\n }\n });\n\n\n function fixField020Subfield(field, subfield) {\n split020A(); // subfield and field are in the scope\n addHyphens(subfield);\n handleInvalidIsbn(field, subfield); // remove 020$a, add 020$z, Do this last, as it uses deletion\n return;\n\n function addHyphens(subfield) {\n if (!subfieldsIsbnRequiresHyphenation(subfield)) {\n return;\n }\n // ISBN is valid but is missing hyphens\n const normalizedValue = normalizeIsbnValue(subfield.value);\n if (normalizedValue !== undefined) { // eslint-disable-line functional/no-conditional-statement\n subfield.value = normalizedValue; // eslint-disable-line functional/immutable-data\n }\n }\n\n function handleInvalidIsbn(field, subfield) {\n if (subfield.code !== 'a' || !handleInvalid) {\n return;\n }\n const head = getFirstWord(subfield.value);\n if (!invalidISBN(head)) {\n return;\n }\n // $a => $z (bit overkill to add $z and remove $a instead of just renaming, but too lazy to fix/test thorougly)\n field.subfields.push({code: 'z', value: subfield.value}); // eslint-disable-line functional/immutable-data\n record.removeSubfield(subfield, field);\n }\n\n function split020A() {\n // Move non-initial words from $a to $q:\n if (subfield.code !== 'a') {\n return;\n }\n const value = trimSpaces(subfield.value);\n const position = value.indexOf(' ');\n if (position === -1) {\n return;\n }\n const head = getFirstWord(value);\n if (invalidISBN(head)) { // Don't split, if first word ain't ISBN\n return;\n }\n const tail = value.substring(position + 1);\n subfield.value = head; // eslint-disable-line functional/immutable-data\n field.subfields.push({code: 'q', value: tail}); // eslint-disable-line functional/immutable-data\n }\n\n function normalizeIsbnValue(value) {\n const trimmedValue = getFirstWord(value);\n //const trimmedValue = trimISBN(value); // NB! This might lose information that should be stored in $q...\n const auditResult = ISBN.audit(trimmedValue);\n if (!auditResult.validIsbn) {\n return undefined;\n }\n const numbersOnly = trimmedValue.replace(/[^0-9Xx]+/ug, '');\n const parsedIsbn = ISBN.parse(trimmedValue);\n if (hyphenateISBN) { // eslint-disable-line functional/no-conditional-statement\n return numbersOnly.length === 10 ? parsedIsbn.isbn10h : parsedIsbn.isbn13h; // eslint-disable-line functional/immutable-data\n }\n return numbersOnly.length === 10 ? parsedIsbn.isbn10 : parsedIsbn.isbn13; // eslint-disable-line functional/immutable-data\n }\n }\n }\n};\n"],"file":"isbn-issn.js"}
|
|
1
|
+
{"version":3,"file":"isbn-issn.js","names":["hyphenateISBN","handleInvalid","validate","fix","description","stringHasSpace","str","indexOf","trimSpaces","value","replace","isMultiWord","inputString","trimmedString","getFirstWord","arr","split","invalidISBN","isbn","isbnOnly","auditedIsbn","ISBN","audit","validIsbn","invalidSubfield","subfield","code","invalidField020","field","subfields","some","sf","subfieldsIsbnRequiresHyphenation","includes","requiresHyphenation","isbn2","parsedIsbn","parse","isbn10h","isbn13h","getRelevantFields","record","fields","filter","tag","fieldsIsbnRequiresHyphenation","invalidField022","find","subfieldAorL","undefined","subfieldY","length","valid","map","subfieldA","name","subfieldZ","getISSN","reduce","acc","obj","msg","messages","concat","forEach","fixField020Subfield","push","removeSubfield","split020A","addHyphens","handleInvalidIsbn","normalizedValue","normalizeIsbnValue","head","position","tail","substring","trimmedValue","auditResult","numbersOnly","isbn10","isbn13"],"sources":["../src/isbn-issn.js"],"sourcesContent":["import ISBN from 'isbn3';\nimport validateISSN from '@natlibfi/issn-verify';\n\n// handleInvalid: move invalid 020$a to 020$z, and invalid 022$a to 022$y\nexport default ({hyphenateISBN = false, handleInvalid = false} = {}) => {\n return {\n validate, fix,\n description: 'Validates ISBN and ISSN values'\n };\n\n function stringHasSpace(str) {\n return str.indexOf(' ') > -1;\n }\n\n function trimSpaces(value) {\n return value.replace(/^\\s+/u, '').replace(/\\s+$/u, '').replace(/\\s+/gu, ' ');\n }\n\n function isMultiWord(inputString) {\n const trimmedString = trimSpaces(inputString);\n return stringHasSpace(trimmedString);\n }\n\n function getFirstWord(inputString) {\n const trimmedString = trimSpaces(inputString);\n const arr = trimmedString.split(' ');\n return arr[0];\n }\n\n function invalidISBN(isbn) {\n const isbnOnly = getFirstWord(isbn);\n const auditedIsbn = ISBN.audit(isbnOnly);\n return !auditedIsbn.validIsbn;\n }\n\n function invalidSubfield(subfield) {\n if (subfield.code !== 'a') {\n return false;\n }\n return invalidISBN(subfield.value) || isMultiWord(subfield.value);\n }\n\n\n function invalidField020(field) {\n if (field.subfields && field.subfields.some(sf => invalidSubfield(sf))) {\n return true;\n }\n return false;\n }\n\n function subfieldsIsbnRequiresHyphenation(subfield) {\n if (!hyphenateISBN || !['a', 'z'].includes(subfield.code)) {\n return false;\n }\n\n const isbn = getFirstWord(subfield.value);\n if (subfield.code === 'a') {\n return requiresHyphenation(isbn);\n }\n\n // $z is a bit hacky: hyphenation is required only iff valid and no '-' chars\n if (isbn.indexOf('-') > -1) {\n return false;\n }\n return !invalidISBN(isbn);\n\n function requiresHyphenation(isbn) {\n if (!hyphenateISBN) {\n return false;\n }\n // Handle old notation such as \"978-952-396-001-5 (nid.)\"\n const isbn2 = getFirstWord(isbn);\n\n if (invalidISBN(isbn2)) {\n return false;\n }\n\n const parsedIsbn = ISBN.parse(isbn2);\n // Return true only if existing ISBN is a valid and hyphenated 10 or 13 digit ISBN:\n return !(isbn2 === parsedIsbn.isbn10h || isbn2 === parsedIsbn.isbn13h);\n }\n }\n\n function getRelevantFields(record) {\n //return record.get(/^(?:020|022)$/u).filter(field => {\n return record.fields.filter(field => {\n if (!field.subfields) {\n return false;\n }\n // Check ISBN:\n if (field.tag === '020') {\n if (invalidField020(field)) { // checks multiwordness\n return true;\n }\n return fieldsIsbnRequiresHyphenation(field);\n }\n\n // Check ISSN:\n if (field.tag === '022') {\n if (invalidField022(field)) {\n return true;\n }\n\n const subfield = field.subfields.find(sf => sf.code === 'a' || sf.code === 'l');\n\n return !validateISSN(subfield.value);\n }\n return false;\n });\n\n function fieldsIsbnRequiresHyphenation(field) {\n return field.subfields && field.subfields.some(sf => subfieldsIsbnRequiresHyphenation(sf));\n }\n\n function invalidField022(field) {\n const subfieldAorL = field.subfields.find(sf => sf.code === 'a' || sf.code === 'l');\n\n if (subfieldAorL === undefined) {\n const subfieldY = field.subfields.find(sf => sf.code === 'y');\n if (subfieldY) {\n return false;\n }\n\n return true;\n }\n return false;\n }\n }\n\n function validate(record) {\n const fields = getRelevantFields(record);\n\n if (fields.length === 0) {\n return {valid: true};\n }\n\n return fields\n .map(field => {\n if (field.tag === '020') {\n const subfieldA = field.subfields.find(sf => sf.code === 'a');\n if (subfieldA) {\n return {name: 'ISBN', value: subfieldA.value};\n }\n const subfieldZ = field.subfields.find(sf => sf.code === 'z');\n if (subfieldZ) {\n return {name: 'ISBN (subfield Z)', value: subfieldZ.value};\n }\n\n return {name: 'ISBN', value: undefined};\n }\n\n return {name: 'ISSN', value: getISSN()};\n\n function getISSN() {\n const subfieldAorL = field.subfields.find(sf => sf.code === 'a' || sf.code === 'l');\n\n if (subfieldAorL) {\n return subfieldAorL.value;\n }\n\n return undefined;\n }\n })\n .reduce((acc, obj) => {\n const {name, value} = obj;\n const msg = `${name} (${value}) is not valid`;\n\n return {...acc, messages: acc.messages.concat(msg)};\n }, {valid: false, messages: []});\n }\n\n\n function fix(record) {\n getRelevantFields(record).forEach(field => {\n if (field.tag === '020') {\n field.subfields.forEach(subfield => fixField020Subfield(field, subfield));\n return;\n }\n // 022 ISSN:\n const subfield = field.subfields.find(sf => sf.code === 'a' || sf.code === 'l');\n if (subfield && handleInvalid) { // eslint-disable-line functional/no-conditional-statement\n // $a/$l => $y (bit overkill to add $z and remove $a/$l instead of just renaming)\n field.subfields.push({code: 'y', value: subfield.value}); // eslint-disable-line functional/immutable-data\n record.removeSubfield(subfield, field);\n }\n });\n\n\n function fixField020Subfield(field, subfield) {\n split020A(); // subfield and field are in the scope\n addHyphens(subfield);\n handleInvalidIsbn(field, subfield); // remove 020$a, add 020$z, Do this last, as it uses deletion\n return;\n\n function addHyphens(subfield) {\n if (!subfieldsIsbnRequiresHyphenation(subfield)) {\n return;\n }\n // ISBN is valid but is missing hyphens\n const normalizedValue = normalizeIsbnValue(subfield.value);\n if (normalizedValue !== undefined) { // eslint-disable-line functional/no-conditional-statement\n subfield.value = normalizedValue; // eslint-disable-line functional/immutable-data\n }\n }\n\n function handleInvalidIsbn(field, subfield) {\n if (subfield.code !== 'a' || !handleInvalid) {\n return;\n }\n const head = getFirstWord(subfield.value);\n if (!invalidISBN(head)) {\n return;\n }\n // $a => $z (bit overkill to add $z and remove $a instead of just renaming, but too lazy to fix/test thorougly)\n field.subfields.push({code: 'z', value: subfield.value}); // eslint-disable-line functional/immutable-data\n record.removeSubfield(subfield, field);\n }\n\n function split020A() {\n // Move non-initial words from $a to $q:\n if (subfield.code !== 'a') {\n return;\n }\n const value = trimSpaces(subfield.value);\n const position = value.indexOf(' ');\n if (position === -1) {\n return;\n }\n const head = getFirstWord(value);\n if (invalidISBN(head)) { // Don't split, if first word ain't ISBN\n return;\n }\n const tail = value.substring(position + 1);\n subfield.value = head; // eslint-disable-line functional/immutable-data\n field.subfields.push({code: 'q', value: tail}); // eslint-disable-line functional/immutable-data\n }\n\n function normalizeIsbnValue(value) {\n const trimmedValue = getFirstWord(value);\n //const trimmedValue = trimISBN(value); // NB! This might lose information that should be stored in $q...\n const auditResult = ISBN.audit(trimmedValue);\n if (!auditResult.validIsbn) {\n return undefined;\n }\n const numbersOnly = trimmedValue.replace(/[^0-9Xx]+/ug, '');\n const parsedIsbn = ISBN.parse(trimmedValue);\n if (hyphenateISBN) { // eslint-disable-line functional/no-conditional-statement\n return numbersOnly.length === 10 ? parsedIsbn.isbn10h : parsedIsbn.isbn13h; // eslint-disable-line functional/immutable-data\n }\n return numbersOnly.length === 10 ? parsedIsbn.isbn10 : parsedIsbn.isbn13; // eslint-disable-line functional/immutable-data\n }\n }\n }\n};\n"],"mappings":"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"}
|
package/dist/isbn-issn.spec.js
CHANGED
|
@@ -8,33 +8,6 @@ var _isbnIssn = _interopRequireDefault(require("../src/isbn-issn"));
|
|
|
8
8
|
|
|
9
9
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
10
|
|
|
11
|
-
/**
|
|
12
|
-
*
|
|
13
|
-
* @licstart The following is the entire license notice for the JavaScript code in this file.
|
|
14
|
-
*
|
|
15
|
-
* MARC record validators used in Melinda
|
|
16
|
-
*
|
|
17
|
-
* Copyright (c) 2014-2022 University Of Helsinki (The National Library Of Finland)
|
|
18
|
-
*
|
|
19
|
-
* This file is part of marc-record-validators-melinda
|
|
20
|
-
*
|
|
21
|
-
* marc-record-validators-melinda program is free software: you can redistribute it and/or modify
|
|
22
|
-
* it under the terms of the GNU Lesser General Public License as
|
|
23
|
-
* published by the Free Software Foundation, either version 3 of the
|
|
24
|
-
* License, or (at your option) any later version.
|
|
25
|
-
*
|
|
26
|
-
* marc-record-validators-melinda is distributed in the hope that it will be useful,
|
|
27
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
28
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
29
|
-
* GNU Lesser General Public License for more details.
|
|
30
|
-
*
|
|
31
|
-
* You should have received a copy of the GNU Lesser General Public License
|
|
32
|
-
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
33
|
-
*
|
|
34
|
-
* @licend The above is the entire license notice
|
|
35
|
-
* for the JavaScript code in this file.
|
|
36
|
-
*
|
|
37
|
-
*/
|
|
38
11
|
describe('isbn-issn', () => {
|
|
39
12
|
it('Creates a validator', async () => {
|
|
40
13
|
const validator = await (0, _isbnIssn.default)();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/isbn-issn.spec.js"],"names":["describe","it","validator","to","be","an","that","has","any","keys","description","a","validate","hyphenateISBN","record","MarcRecord","fields","tag","ind1","ind2","subfields","code","value","result","eql","valid","messages","skip","handleInvalid","fix"],"mappings":"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","sourcesContent":["/**\n *\n * @licstart The following is the entire license notice for the JavaScript code in this file.\n *\n * MARC record validators used in Melinda\n *\n * Copyright (c) 2014-2022 University Of Helsinki (The National Library Of Finland)\n *\n * This file is part of marc-record-validators-melinda\n *\n * marc-record-validators-melinda program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * marc-record-validators-melinda is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n * @licend The above is the entire license notice\n * for the JavaScript code in this file.\n *\n */\n\n\nimport {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/isbn-issn';\n\ndescribe('isbn-issn', () => {\n it('Creates a validator', async () => {\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\n describe('#validate', () => {\n it('Finds the record valid', async () => {\n const validator = await validatorFactory({hyphenateISBN: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '978-600-377-017-1'}]\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '90-6831-372-X'}]\n },\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '978-600-377-017-1'}]},\n {\n tag: '022',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '0355-0893'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true});\n });\n\n it('Finds the record invalid', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'foo'}]\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '90-68-31-372-X'}] // contains an extra hyphen\n },\n {\n tag: '022',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'bar'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({\n valid: false, messages: [\n 'ISBN (foo) is not valid',\n 'ISSN (bar) is not valid'\n ]\n });\n });\n\n it('020 field without $a and $z is ok in this context (= no invalid ISBNs)', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'q', value: 'nidottu'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({\n valid: true\n });\n });\n\n it('Finds the invalid 022 field', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '022',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'z', value: '0000-0000'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({\n valid: false, messages: ['ISSN (undefined) is not valid']\n });\n });\n\n it('Finds the record invalid (reason: multiword)', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '978-600-377-017-1 (nid.)'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false, messages: ['ISBN (978-600-377-017-1 (nid.)) is not valid']});\n });\n\n it('Finds the record invalid (ISSN in \\'l\\'-subfield)', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'foo'}]\n },\n {\n tag: '022',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'l', value: 'bar'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({\n valid: false, messages: [\n 'ISBN (foo) is not valid',\n 'ISSN (bar) is not valid'\n ]\n });\n });\n\n it('Finds the record invalid (valid ISBN without hyphens)', async () => {\n const validator = await validatorFactory({hyphenateISBN: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '9789519155470'}]\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '9068-31-372-X'}] // legal digits, but bad hyphenation\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '386006004X'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false, messages: [\n 'ISBN (9789519155470) is not valid',\n 'ISBN (9068-31-372-X) is not valid',\n 'ISBN (386006004X) is not valid'\n ]});\n });\n\n it.skip('Finds the record invalid (Missing ISBN)');\n it.skip('Finds the record invalid (Missing ISSN)');\n });\n\n describe('#fix', () => {\n it('Moves invalid ISBN to z-subfield', async () => {\n const validator = await validatorFactory({handleInvalid: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '020', ind1: ' ', ind2: ' ',\n subfields: [{code: 'a', value: 'foo'}]\n },\n {\n tag: '020', ind1: ' ', ind2: ' ',\n subfields: [{code: 'a', value: 'crappy val'}]\n },\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: '97895234216609'}]},\n // Just a sanity check due to earlier issues:\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '97895234216609'}]}\n ]\n });\n\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: 'foo'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: 'crappy val'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '97895234216609'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '97895234216609'}]}\n ]);\n });\n\n it('Moves invalid ISSN to y-subfield', async () => {\n const validator = await validatorFactory({handleInvalid: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '022', ind1: ' ', ind2: ' ',\n subfields: [{code: 'a', value: 'foo'}]\n }\n ]\n });\n\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '022', ind1: ' ', ind2: ' ', subfields: [{code: 'y', value: 'foo'}]\n }\n ]);\n });\n\n it('Moves invalid ISSN to y-subfield (Origin l-subfield)', async () => {\n const validator = await validatorFactory({handleInvalid: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '022', ind1: ' ', ind2: ' ',\n subfields: [{code: 'l', value: 'foo'}]\n }\n ]\n });\n\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '022', ind1: ' ', ind2: ' ', subfields: [{code: 'y', value: 'foo'}]\n }\n ]);\n });\n\n it('Trims spaces from value (No hyphenate)', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: ' 9786003770171'}]\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '9786003770171 (nidottu)'}]\n }\n ]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n // NB! Initial space does not need to be removed. It's crap, but not this fixer's crap.\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: ' 9786003770171'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: '9786003770171'}, {code: 'q', value: '(nidottu)'}]}\n ]);\n });\n\n it('Trims spaces and hyphenates value', async () => {\n const validator = await validatorFactory({hyphenateISBN: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: '9786003770171 (nid.)'},\n {code: 'z', value: '9786003770171 (nid.)'},\n {code: 'z', value: 'foo bar'}\n ]\n }\n ]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: '978-600-377-017-1'},\n {code: 'z', value: '978-600-377-017-1'},\n {code: 'z', value: 'foo bar'},\n // NB! Technically $q should come before $z subfields, but this is good enough.\n {code: 'q', value: '(nid.)'}\n ]\n }\n ]);\n });\n\n it('No relevant data', async () => {\n const validator = await validatorFactory({hyphenateISBN: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '005',\n value: 'whatever'\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'q', value: 'sidottu'}]\n },\n {\n tag: '024',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: ' 9786003770171'}]\n }\n ]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {tag: '005', value: 'whatever'},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'q', value: 'sidottu'}]},\n {tag: '024', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: ' 9786003770171'}]}\n ]);\n });\n\n it('Add hyphens to ISBN', async () => {\n const validator = await validatorFactory({hyphenateISBN: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '020', ind1: ' ', ind2: ' ',\n subfields: [{code: 'a', value: '9789916605325'}]\n },\n {\n tag: '020', ind1: ' ', ind2: ' ',\n subfields: [{code: 'a', value: '917153086X'}]\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '9068-31-372-X'}] // legal digits, but bad hyphenation\n },\n {\n tag: '020', ind1: ' ', ind2: ' ',\n subfields: [{code: 'a', value: '386006004X (nid.)'}]\n },\n {\n tag: '020', ind1: ' ', ind2: ' ',\n subfields: [{code: 'z', value: '9789916605325'}]\n },\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '9789916605325 (sid.)'}]}\n ]\n });\n\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: '978-9916-605-32-5'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: '91-7153-086-X'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: '90-6831-372-X'}]}, // corrected hyphens\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: '3-86006-004-X'}, {code: 'q', value: '(nid.)'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '978-9916-605-32-5'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '978-9916-605-32-5'}]}\n ]);\n });\n });\n});\n"],"file":"isbn-issn.spec.js"}
|
|
1
|
+
{"version":3,"file":"isbn-issn.spec.js","names":["describe","it","validator","to","be","an","that","has","any","keys","description","a","validate","hyphenateISBN","record","MarcRecord","fields","tag","ind1","ind2","subfields","code","value","result","eql","valid","messages","skip","handleInvalid","fix"],"sources":["../src/isbn-issn.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/isbn-issn';\n\ndescribe('isbn-issn', () => {\n it('Creates a validator', async () => {\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\n describe('#validate', () => {\n it('Finds the record valid', async () => {\n const validator = await validatorFactory({hyphenateISBN: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '978-600-377-017-1'}]\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '90-6831-372-X'}]\n },\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '978-600-377-017-1'}]},\n {\n tag: '022',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '0355-0893'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true});\n });\n\n it('Finds the record invalid', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'foo'}]\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '90-68-31-372-X'}] // contains an extra hyphen\n },\n {\n tag: '022',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'bar'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({\n valid: false, messages: [\n 'ISBN (foo) is not valid',\n 'ISSN (bar) is not valid'\n ]\n });\n });\n\n it('020 field without $a and $z is ok in this context (= no invalid ISBNs)', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'q', value: 'nidottu'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({\n valid: true\n });\n });\n\n it('Finds the invalid 022 field', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '022',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'z', value: '0000-0000'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({\n valid: false, messages: ['ISSN (undefined) is not valid']\n });\n });\n\n it('Finds the record invalid (reason: multiword)', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '978-600-377-017-1 (nid.)'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false, messages: ['ISBN (978-600-377-017-1 (nid.)) is not valid']});\n });\n\n it('Finds the record invalid (ISSN in \\'l\\'-subfield)', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'foo'}]\n },\n {\n tag: '022',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'l', value: 'bar'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({\n valid: false, messages: [\n 'ISBN (foo) is not valid',\n 'ISSN (bar) is not valid'\n ]\n });\n });\n\n it('Finds the record invalid (valid ISBN without hyphens)', async () => {\n const validator = await validatorFactory({hyphenateISBN: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '9789519155470'}]\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '9068-31-372-X'}] // legal digits, but bad hyphenation\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '386006004X'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false, messages: [\n 'ISBN (9789519155470) is not valid',\n 'ISBN (9068-31-372-X) is not valid',\n 'ISBN (386006004X) is not valid'\n ]});\n });\n\n it.skip('Finds the record invalid (Missing ISBN)');\n it.skip('Finds the record invalid (Missing ISSN)');\n });\n\n describe('#fix', () => {\n it('Moves invalid ISBN to z-subfield', async () => {\n const validator = await validatorFactory({handleInvalid: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '020', ind1: ' ', ind2: ' ',\n subfields: [{code: 'a', value: 'foo'}]\n },\n {\n tag: '020', ind1: ' ', ind2: ' ',\n subfields: [{code: 'a', value: 'crappy val'}]\n },\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: '97895234216609'}]},\n // Just a sanity check due to earlier issues:\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '97895234216609'}]}\n ]\n });\n\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: 'foo'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: 'crappy val'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '97895234216609'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '97895234216609'}]}\n ]);\n });\n\n it('Moves invalid ISSN to y-subfield', async () => {\n const validator = await validatorFactory({handleInvalid: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '022', ind1: ' ', ind2: ' ',\n subfields: [{code: 'a', value: 'foo'}]\n }\n ]\n });\n\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '022', ind1: ' ', ind2: ' ', subfields: [{code: 'y', value: 'foo'}]\n }\n ]);\n });\n\n it('Moves invalid ISSN to y-subfield (Origin l-subfield)', async () => {\n const validator = await validatorFactory({handleInvalid: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '022', ind1: ' ', ind2: ' ',\n subfields: [{code: 'l', value: 'foo'}]\n }\n ]\n });\n\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '022', ind1: ' ', ind2: ' ', subfields: [{code: 'y', value: 'foo'}]\n }\n ]);\n });\n\n it('Trims spaces from value (No hyphenate)', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: ' 9786003770171'}]\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '9786003770171 (nidottu)'}]\n }\n ]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n // NB! Initial space does not need to be removed. It's crap, but not this fixer's crap.\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: ' 9786003770171'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: '9786003770171'}, {code: 'q', value: '(nidottu)'}]}\n ]);\n });\n\n it('Trims spaces and hyphenates value', async () => {\n const validator = await validatorFactory({hyphenateISBN: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: '9786003770171 (nid.)'},\n {code: 'z', value: '9786003770171 (nid.)'},\n {code: 'z', value: 'foo bar'}\n ]\n }\n ]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: '978-600-377-017-1'},\n {code: 'z', value: '978-600-377-017-1'},\n {code: 'z', value: 'foo bar'},\n // NB! Technically $q should come before $z subfields, but this is good enough.\n {code: 'q', value: '(nid.)'}\n ]\n }\n ]);\n });\n\n it('No relevant data', async () => {\n const validator = await validatorFactory({hyphenateISBN: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '005',\n value: 'whatever'\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'q', value: 'sidottu'}]\n },\n {\n tag: '024',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: ' 9786003770171'}]\n }\n ]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {tag: '005', value: 'whatever'},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'q', value: 'sidottu'}]},\n {tag: '024', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: ' 9786003770171'}]}\n ]);\n });\n\n it('Add hyphens to ISBN', async () => {\n const validator = await validatorFactory({hyphenateISBN: true});\n const record = new MarcRecord({\n fields: [\n {\n tag: '020', ind1: ' ', ind2: ' ',\n subfields: [{code: 'a', value: '9789916605325'}]\n },\n {\n tag: '020', ind1: ' ', ind2: ' ',\n subfields: [{code: 'a', value: '917153086X'}]\n },\n {\n tag: '020',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: '9068-31-372-X'}] // legal digits, but bad hyphenation\n },\n {\n tag: '020', ind1: ' ', ind2: ' ',\n subfields: [{code: 'a', value: '386006004X (nid.)'}]\n },\n {\n tag: '020', ind1: ' ', ind2: ' ',\n subfields: [{code: 'z', value: '9789916605325'}]\n },\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '9789916605325 (sid.)'}]}\n ]\n });\n\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: '978-9916-605-32-5'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: '91-7153-086-X'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: '90-6831-372-X'}]}, // corrected hyphens\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: '3-86006-004-X'}, {code: 'q', value: '(nid.)'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '978-9916-605-32-5'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'z', value: '978-9916-605-32-5'}]}\n ]);\n });\n });\n});\n"],"mappings":"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"}
|
package/dist/item-language.js
CHANGED
|
@@ -13,33 +13,6 @@ var _debug = _interopRequireDefault(require("debug"));
|
|
|
13
13
|
|
|
14
14
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
15
|
|
|
16
|
-
/**
|
|
17
|
-
*
|
|
18
|
-
* @licstart The following is the entire license notice for the JavaScript code in this file.
|
|
19
|
-
*
|
|
20
|
-
* MARC record validators used in Melinda
|
|
21
|
-
*
|
|
22
|
-
* Copyright (c) 2014-2020 University Of Helsinki (The National Library Of Finland)
|
|
23
|
-
*
|
|
24
|
-
* This file is part of marc-record-validators-melinda
|
|
25
|
-
*
|
|
26
|
-
* marc-record-validators-melinda program is free software: you can redistribute it and/or modify
|
|
27
|
-
* it under the terms of the GNU Lesser General Public License as
|
|
28
|
-
* published by the Free Software Foundation, either version 3 of the
|
|
29
|
-
* License, or (at your option) any later version.
|
|
30
|
-
*
|
|
31
|
-
* marc-record-validators-melinda is distributed in the hope that it will be useful,
|
|
32
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
33
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
34
|
-
* GNU Lesser General Public License for more details.
|
|
35
|
-
*
|
|
36
|
-
* You should have received a copy of the GNU Lesser General Public License
|
|
37
|
-
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
38
|
-
*
|
|
39
|
-
* @licend The above is the entire license notice
|
|
40
|
-
* for the JavaScript code in this file.
|
|
41
|
-
*
|
|
42
|
-
*/
|
|
43
16
|
async function _default(tagPattern, treshold = 0.9) {
|
|
44
17
|
const debug = (0, _debug.default)('@natlibfi/marc-record-validator-melinda/item-language');
|
|
45
18
|
const cldFactory = await (0, _cld3Asm.loadModule)();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/item-language.js"],"names":["tagPattern","treshold","debug","cldFactory","RegExp","description","validate","fix","Error","record","results","checkLanguage","failed","valid","Boolean","currentCode","messages","detected","suggested","join","f008","get","shift","start","value","slice","end","f041","subfield","subfields","find","sf","code","push","sort","a","b","insertField","tag","ind1","ind2","text","getText","langCode","getLanguageCode","Identifier","create","length","dispose","findLanguage","is_reliable","probability","get2TLangCode","language","err","err2","stack","message","reduce","acc","field","fieldText","test","LanguageCodes","where"],"mappings":"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","sourcesContent":["/**\n*\n* @licstart The following is the entire license notice for the JavaScript code in this file.\n*\n* MARC record validators used in Melinda\n*\n* Copyright (c) 2014-2020 University Of Helsinki (The National Library Of Finland)\n*\n* This file is part of marc-record-validators-melinda\n*\n* marc-record-validators-melinda program is free software: you can redistribute it and/or modify\n* it under the terms of the GNU Lesser General Public License as\n* published by the Free Software Foundation, either version 3 of the\n* License, or (at your option) any later version.\n*\n* marc-record-validators-melinda is distributed in the hope that it will be useful,\n* but WITHOUT ANY WARRANTY; without even the implied warranty of\n* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n* GNU Lesser General Public License for more details.\n*\n* You should have received a copy of the GNU Lesser General Public License\n* along with this program. If not, see <http://www.gnu.org/licenses/>.\n*\n* @licend The above is the entire license notice\n* for the JavaScript code in this file.\n*\n*/\n\n\nimport {loadModule as loadCLD} from 'cld3-asm';\nimport LanguageCodes from 'langs';\nimport createDebugLogger from 'debug';\n\nexport default async function (tagPattern, treshold = 0.9) {\n const debug = createDebugLogger('@natlibfi/marc-record-validator-melinda/item-language');\n const cldFactory = await loadCLD();\n\n if (tagPattern instanceof RegExp) {\n return {\n description:\n 'Handles invalid/missing item language code',\n validate,\n fix\n };\n }\n\n throw new Error('No tagPattern provided');\n\n async function validate(record) {\n const results = await checkLanguage(record);\n\n if (results.failed) {\n return {valid: Boolean(results.currentCode), messages: ['Language detection failed']};\n }\n\n if (results.detected) {\n if (results.detected !== results.currentCode) {\n return {valid: false, messages: [`Item language code is invalid. Correct language code: ${results.detected}`]};\n }\n\n return {valid: true};\n }\n\n if (results.suggested) {\n return {valid: Boolean(results.currentCode), messages: [`Item language code is invalid. Current code: ${results.currentCode}, suggestions: ${results.suggested.join()}`]};\n }\n }\n\n async function fix(record) {\n const results = await checkLanguage(record);\n\n if (results.suggested && results.currentCode) {\n return;\n }\n\n if (results.failed && !results.currentCode) {\n return;\n }\n\n if (results.detected && results.detected !== results.currentCode) {\n const f008 = record.get(/^008$/u).shift(); // eslint-disable-line functional/immutable-data\n\n if (f008) { // eslint-disable-line functional/no-conditional-statement\n const start = f008.value.slice(0, 35);\n const end = f008.value.slice(38);\n f008.value = `${start}${results.detected}${end}`; // eslint-disable-line functional/immutable-data\n }\n\n const f041 = record.get(/^041$/u).shift(); // eslint-disable-line functional/immutable-data\n\n if (f041) {\n const subfield = f041.subfields.find(sf => sf.code === 'a');\n\n if (subfield) { // eslint-disable-line functional/no-conditional-statement\n subfield.value = results.detected; // eslint-disable-line functional/immutable-data\n } else { // eslint-disable-line functional/no-conditional-statement\n f041.subfields.push({code: 'a', value: results.detected}); // eslint-disable-line functional/immutable-data\n f041.subfields.sort((a, b) => { // eslint-disable-line functional/immutable-data\n if (a.code < b.code) {\n return -1;\n }\n\n if (a.code > b.code) {\n return 1;\n }\n\n return 0;\n });\n }\n } else { // eslint-disable-line functional/no-conditional-statement\n record.insertField({tag: '041', ind1: ' ', ind2: ' ', subfields: [\n {\n code: 'a',\n value: results.detected\n }\n ]});\n }\n }\n }\n\n async function checkLanguage(record) {\n const text = getText(record);\n const langCode = getLanguageCode(record);\n\n const Identifier = cldFactory.create();\n\n if (text.length === 0) {\n Identifier.dispose();\n return {failed: true, currentCode: langCode};\n }\n\n try {\n const results = await Identifier.findLanguage(text);\n Identifier.dispose();\n\n if (results.is_reliable) {\n if (results.probability >= treshold) {\n return {\n detected: get2TLangCode(results.language),\n currentCode: langCode\n };\n }\n\n return {\n currentCode: langCode,\n suggested: [get2TLangCode(results.language)]\n };\n }\n\n return {failed: true, currentCode: langCode};\n } catch (err) {\n /* istanbul ignore next: How to cause errors? */\n try {\n Identifier.dispose();\n } catch (err2) {\n debug(`Got error disposing identifier: ${err2 instanceof Error ? err2.stack : err2}`);\n }\n\n /* istanbul ignore next: How to cause errors? */\n throw err instanceof Error ? err : new Error(err.message);\n }\n\n function getText(record) {\n return record.get(tagPattern).reduce((acc, field) => {\n const fieldText = field.subfields.find(sf => sf.code === 'a').value;\n return `${acc}${fieldText}`;\n }, '');\n }\n\n function getLanguageCode(record) {\n const f008 = record.get(/^008$/u).shift(); // eslint-disable-line functional/immutable-data\n\n if (f008) {\n const code = f008.value.slice(35, 38);\n if ((/^[^ |^]+$/u).test(code) && code !== 'zzzx') {\n return code;\n }\n }\n\n const f041 = record.get(/^041$/u).shift(); // eslint-disable-line functional/immutable-data\n\n if (f041) {\n const code = f041.subfields.find(sf => sf.code === 'a').value;\n return code;\n }\n }\n\n function get2TLangCode(code) {\n return LanguageCodes.where('1', code)['2T'];\n }\n }\n}\n"],"file":"item-language.js"}
|
|
1
|
+
{"version":3,"file":"item-language.js","names":["tagPattern","treshold","debug","cldFactory","RegExp","description","validate","fix","Error","record","results","checkLanguage","failed","valid","Boolean","currentCode","messages","detected","suggested","join","f008","get","shift","start","value","slice","end","f041","subfield","subfields","find","sf","code","push","sort","a","b","insertField","tag","ind1","ind2","text","getText","langCode","getLanguageCode","Identifier","create","length","dispose","findLanguage","is_reliable","probability","get2TLangCode","language","err","err2","stack","message","reduce","acc","field","fieldText","test","LanguageCodes","where"],"sources":["../src/item-language.js"],"sourcesContent":["import {loadModule as loadCLD} from 'cld3-asm';\nimport LanguageCodes from 'langs';\nimport createDebugLogger from 'debug';\n\nexport default async function (tagPattern, treshold = 0.9) {\n const debug = createDebugLogger('@natlibfi/marc-record-validator-melinda/item-language');\n const cldFactory = await loadCLD();\n\n if (tagPattern instanceof RegExp) {\n return {\n description:\n 'Handles invalid/missing item language code',\n validate,\n fix\n };\n }\n\n throw new Error('No tagPattern provided');\n\n async function validate(record) {\n const results = await checkLanguage(record);\n\n if (results.failed) {\n return {valid: Boolean(results.currentCode), messages: ['Language detection failed']};\n }\n\n if (results.detected) {\n if (results.detected !== results.currentCode) {\n return {valid: false, messages: [`Item language code is invalid. Correct language code: ${results.detected}`]};\n }\n\n return {valid: true};\n }\n\n if (results.suggested) {\n return {valid: Boolean(results.currentCode), messages: [`Item language code is invalid. Current code: ${results.currentCode}, suggestions: ${results.suggested.join()}`]};\n }\n }\n\n async function fix(record) {\n const results = await checkLanguage(record);\n\n if (results.suggested && results.currentCode) {\n return;\n }\n\n if (results.failed && !results.currentCode) {\n return;\n }\n\n if (results.detected && results.detected !== results.currentCode) {\n const f008 = record.get(/^008$/u).shift(); // eslint-disable-line functional/immutable-data\n\n if (f008) { // eslint-disable-line functional/no-conditional-statement\n const start = f008.value.slice(0, 35);\n const end = f008.value.slice(38);\n f008.value = `${start}${results.detected}${end}`; // eslint-disable-line functional/immutable-data\n }\n\n const f041 = record.get(/^041$/u).shift(); // eslint-disable-line functional/immutable-data\n\n if (f041) {\n const subfield = f041.subfields.find(sf => sf.code === 'a');\n\n if (subfield) { // eslint-disable-line functional/no-conditional-statement\n subfield.value = results.detected; // eslint-disable-line functional/immutable-data\n } else { // eslint-disable-line functional/no-conditional-statement\n f041.subfields.push({code: 'a', value: results.detected}); // eslint-disable-line functional/immutable-data\n f041.subfields.sort((a, b) => { // eslint-disable-line functional/immutable-data\n if (a.code < b.code) {\n return -1;\n }\n\n if (a.code > b.code) {\n return 1;\n }\n\n return 0;\n });\n }\n } else { // eslint-disable-line functional/no-conditional-statement\n record.insertField({tag: '041', ind1: ' ', ind2: ' ', subfields: [\n {\n code: 'a',\n value: results.detected\n }\n ]});\n }\n }\n }\n\n async function checkLanguage(record) {\n const text = getText(record);\n const langCode = getLanguageCode(record);\n\n const Identifier = cldFactory.create();\n\n if (text.length === 0) {\n Identifier.dispose();\n return {failed: true, currentCode: langCode};\n }\n\n try {\n const results = await Identifier.findLanguage(text);\n Identifier.dispose();\n\n if (results.is_reliable) {\n if (results.probability >= treshold) {\n return {\n detected: get2TLangCode(results.language),\n currentCode: langCode\n };\n }\n\n return {\n currentCode: langCode,\n suggested: [get2TLangCode(results.language)]\n };\n }\n\n return {failed: true, currentCode: langCode};\n } catch (err) {\n /* istanbul ignore next: How to cause errors? */\n try {\n Identifier.dispose();\n } catch (err2) {\n debug(`Got error disposing identifier: ${err2 instanceof Error ? err2.stack : err2}`);\n }\n\n /* istanbul ignore next: How to cause errors? */\n throw err instanceof Error ? err : new Error(err.message);\n }\n\n function getText(record) {\n return record.get(tagPattern).reduce((acc, field) => {\n const fieldText = field.subfields.find(sf => sf.code === 'a').value;\n return `${acc}${fieldText}`;\n }, '');\n }\n\n function getLanguageCode(record) {\n const f008 = record.get(/^008$/u).shift(); // eslint-disable-line functional/immutable-data\n\n if (f008) {\n const code = f008.value.slice(35, 38);\n if ((/^[^ |^]+$/u).test(code) && code !== 'zzzx') {\n return code;\n }\n }\n\n const f041 = record.get(/^041$/u).shift(); // eslint-disable-line functional/immutable-data\n\n if (f041) {\n const code = f041.subfields.find(sf => sf.code === 'a').value;\n return code;\n }\n }\n\n function get2TLangCode(code) {\n return LanguageCodes.where('1', code)['2T'];\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -10,33 +10,6 @@ var _itemLanguage = _interopRequireDefault(require("../src/item-language"));
|
|
|
10
10
|
|
|
11
11
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
12
12
|
|
|
13
|
-
/**
|
|
14
|
-
*
|
|
15
|
-
* @licstart The following is the entire license notice for the JavaScript code in this file.
|
|
16
|
-
*
|
|
17
|
-
* MARC record validators used in Melinda
|
|
18
|
-
*
|
|
19
|
-
* Copyright (c) 2014-2020 University Of Helsinki (The National Library Of Finland)
|
|
20
|
-
*
|
|
21
|
-
* This file is part of marc-record-validators-melinda
|
|
22
|
-
*
|
|
23
|
-
* marc-record-validators-melinda program is free software: you can redistribute it and/or modify
|
|
24
|
-
* it under the terms of the GNU Lesser General Public License as
|
|
25
|
-
* published by the Free Software Foundation, either version 3 of the
|
|
26
|
-
* License, or (at your option) any later version.
|
|
27
|
-
*
|
|
28
|
-
* marc-record-validators-melinda is distributed in the hope that it will be useful,
|
|
29
|
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
30
|
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
31
|
-
* GNU Lesser General Public License for more details.
|
|
32
|
-
*
|
|
33
|
-
* You should have received a copy of the GNU Lesser General Public License
|
|
34
|
-
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
35
|
-
*
|
|
36
|
-
* @licend The above is the entire license notice
|
|
37
|
-
* for the JavaScript code in this file.
|
|
38
|
-
*
|
|
39
|
-
*/
|
|
40
13
|
const {
|
|
41
14
|
expect
|
|
42
15
|
} = _chai.default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/item-language.spec.js"],"names":["expect","chai","use","chaiAsPromised","describe","it","validator","to","be","an","that","has","any","keys","description","a","validate","rejectedWith","Error","record","MarcRecord","fields","tag","ind1","ind2","subfields","code","value","result","eql","valid","messages","fix","err","message","equal"],"mappings":"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","sourcesContent":["/**\n *\n * @licstart The following is the entire license notice for the JavaScript code in this file.\n *\n * MARC record validators used in Melinda\n *\n * Copyright (c) 2014-2020 University Of Helsinki (The National Library Of Finland)\n *\n * This file is part of marc-record-validators-melinda\n *\n * marc-record-validators-melinda program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * marc-record-validators-melinda is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n * @licend The above is the entire license notice\n * for the JavaScript code in this file.\n *\n */\n\n\nimport chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/item-language';\n\nconst {expect} = chai;\nchai.use(chaiAsPromised);\n\ndescribe('item-language', () => {\n it('Creates a validator', async () => {\n const validator = await validatorFactory(/^520$/u);\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\n it('Throws an error when tagPattern is not provided', async () => {\n await expect(validatorFactory()).to.be.rejectedWith(Error, 'No tagPattern provided');\n });\n\n describe('#validate', () => {\n it('Finds the record valid', async () => {\n const validator = await validatorFactory(/^520$/u);\n const record = new MarcRecord({\n fields: [\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'fin'}]\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: '',\n subfields: [\n {\n code: 'a',\n value: 'Matti Ylösen Veroparatiisit on kirja siitä, kuinka miljonäärit ja monikansalliset yritykset ovat 20 vuoden aikana siirtäneet kiihtyvällä tahdilla tulojaan säätelyn ja verottajan ulottumattomiin korkeiden pankkisalaisuuslakien suojiin. Samoihin keitaisiin, joita myös kansainvälinen rikollisuus käyttää rahanpesuun. Suomi on toistaiseksi ollut osa ongelmaa, ei sen ratkaisua.\\nKirja sisältää näkökulmia ja kiinnekohtia demokratian, hyvinvointivaltion ja kilpailullisen markkinatalouden kriiseihin. Mukana myös toimintaehdotuksia, joita Suomen tulee ajaa veroparatiisiongelman ratkaisemiseksi. Veroparatiisit on ajankohtainen tietopaketti veronkierron mekanismeista ja vaikutuksista.'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true});\n });\n\n it('Finds the record invalid (Language code is missing and detection failed', async () => {\n const validator = await validatorFactory(/^520$/u);\n const record = new MarcRecord({\n fields: [\n {\n tag: '520',\n ind1: ' ',\n ind2: '',\n subfields: [\n {\n code: 'a',\n value: '.'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false, messages: ['Language detection failed']});\n });\n\n it('Finds the record invalid (Detected language differs)', async () => {\n const validator = await validatorFactory(/^520$/u);\n const record = new MarcRecord({\n fields: [\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|fin|^'\n },\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'fin'}]\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: '',\n subfields: [\n {\n code: 'a',\n value: 'If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false, messages: ['Item language code is invalid. Correct language code: eng']});\n });\n\n it('Finds the record invalid (Probability doesn\\'t meet treshold)', async () => {\n const validator = await validatorFactory(/^520$/u, 1);\n const record = new MarcRecord({\n fields: [\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|fin|^'\n },\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'fin'}]\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: '',\n subfields: [\n {\n code: 'a',\n value: 'If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true, messages: ['Item language code is invalid. Current code: fin, suggestions: eng']});\n });\n\n it('Finds the record invalid (No detectable text)', async () => {\n const validator = await validatorFactory(/^520$/u, 1);\n const record = new MarcRecord({\n fields: [\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|fin|^'\n },\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'fin'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true, messages: ['Language detection failed']});\n });\n });\n\n describe('#fix', () => {\n it('Fixes the record', async () => {\n const validator = await validatorFactory(/^520$/u);\n const record = new MarcRecord({\n fields: [\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|fin|^'\n },\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'eng'}]\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.'\n }\n ]\n }\n ]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|eng|^'\n },\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'eng'}]\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.'\n }\n ]\n }\n ]);\n });\n\n it('Fixes the record (Insert missing fields)', async () => {\n const validator = await validatorFactory(/^520$/u);\n const record = new MarcRecord({\n fields: [\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|fin|^'\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.'\n }\n ]\n }\n ]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|eng|^'\n },\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'eng'}]\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.'\n }\n ]\n }\n ]);\n });\n\n it('Fixes the record (Insert missing subfields)', async () => {\n const validator = await validatorFactory(/^520$/u);\n const record = new MarcRecord({\n fields: [\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|fin|^'\n },\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'b', value: 'foo'}]\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.'\n }\n ]\n }\n ]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|eng|^'\n },\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'eng'}, {code: 'b', value: 'foo'}]\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.'\n }\n ]\n }\n ]);\n });\n\n it('Fails to fix the record', async () => {\n const validator = await validatorFactory(/^520$/u);\n const record = new MarcRecord({\n fields: [\n {\n tag: '520',\n ind1: ' ',\n ind2: '',\n subfields: [\n {\n code: 'a',\n value: '.'\n }\n ]\n }\n ]\n });\n\n try {\n await validator.fix(record);\n } catch (err) {\n expect(err.message).to.equal('Language code is missing and detection failed');\n }\n });\n });\n});\n"],"file":"item-language.spec.js"}
|
|
1
|
+
{"version":3,"file":"item-language.spec.js","names":["expect","chai","use","chaiAsPromised","describe","it","validator","to","be","an","that","has","any","keys","description","a","validate","rejectedWith","Error","record","MarcRecord","fields","tag","ind1","ind2","subfields","code","value","result","eql","valid","messages","fix","err","message","equal"],"sources":["../src/item-language.spec.js"],"sourcesContent":["import chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/item-language';\n\nconst {expect} = chai;\nchai.use(chaiAsPromised);\n\ndescribe('item-language', () => {\n it('Creates a validator', async () => {\n const validator = await validatorFactory(/^520$/u);\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\n it('Throws an error when tagPattern is not provided', async () => {\n await expect(validatorFactory()).to.be.rejectedWith(Error, 'No tagPattern provided');\n });\n\n describe('#validate', () => {\n it('Finds the record valid', async () => {\n const validator = await validatorFactory(/^520$/u);\n const record = new MarcRecord({\n fields: [\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'fin'}]\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: '',\n subfields: [\n {\n code: 'a',\n value: 'Matti Ylösen Veroparatiisit on kirja siitä, kuinka miljonäärit ja monikansalliset yritykset ovat 20 vuoden aikana siirtäneet kiihtyvällä tahdilla tulojaan säätelyn ja verottajan ulottumattomiin korkeiden pankkisalaisuuslakien suojiin. Samoihin keitaisiin, joita myös kansainvälinen rikollisuus käyttää rahanpesuun. Suomi on toistaiseksi ollut osa ongelmaa, ei sen ratkaisua.\\nKirja sisältää näkökulmia ja kiinnekohtia demokratian, hyvinvointivaltion ja kilpailullisen markkinatalouden kriiseihin. Mukana myös toimintaehdotuksia, joita Suomen tulee ajaa veroparatiisiongelman ratkaisemiseksi. Veroparatiisit on ajankohtainen tietopaketti veronkierron mekanismeista ja vaikutuksista.'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true});\n });\n\n it('Finds the record invalid (Language code is missing and detection failed', async () => {\n const validator = await validatorFactory(/^520$/u);\n const record = new MarcRecord({\n fields: [\n {\n tag: '520',\n ind1: ' ',\n ind2: '',\n subfields: [\n {\n code: 'a',\n value: '.'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false, messages: ['Language detection failed']});\n });\n\n it('Finds the record invalid (Detected language differs)', async () => {\n const validator = await validatorFactory(/^520$/u);\n const record = new MarcRecord({\n fields: [\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|fin|^'\n },\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'fin'}]\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: '',\n subfields: [\n {\n code: 'a',\n value: 'If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false, messages: ['Item language code is invalid. Correct language code: eng']});\n });\n\n it('Finds the record invalid (Probability doesn\\'t meet treshold)', async () => {\n const validator = await validatorFactory(/^520$/u, 1);\n const record = new MarcRecord({\n fields: [\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|fin|^'\n },\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'fin'}]\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: '',\n subfields: [\n {\n code: 'a',\n value: 'If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true, messages: ['Item language code is invalid. Current code: fin, suggestions: eng']});\n });\n\n it('Finds the record invalid (No detectable text)', async () => {\n const validator = await validatorFactory(/^520$/u, 1);\n const record = new MarcRecord({\n fields: [\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|fin|^'\n },\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'fin'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true, messages: ['Language detection failed']});\n });\n });\n\n describe('#fix', () => {\n it('Fixes the record', async () => {\n const validator = await validatorFactory(/^520$/u);\n const record = new MarcRecord({\n fields: [\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|fin|^'\n },\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'eng'}]\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.'\n }\n ]\n }\n ]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|eng|^'\n },\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'eng'}]\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.'\n }\n ]\n }\n ]);\n });\n\n it('Fixes the record (Insert missing fields)', async () => {\n const validator = await validatorFactory(/^520$/u);\n const record = new MarcRecord({\n fields: [\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|fin|^'\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.'\n }\n ]\n }\n ]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|eng|^'\n },\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'eng'}]\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.'\n }\n ]\n }\n ]);\n });\n\n it('Fixes the record (Insert missing subfields)', async () => {\n const validator = await validatorFactory(/^520$/u);\n const record = new MarcRecord({\n fields: [\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|fin|^'\n },\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'b', value: 'foo'}]\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.'\n }\n ]\n }\n ]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '008',\n value: '151118t20162016fi^a|||^^^^^^^|0|^0|eng|^'\n },\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'eng'}, {code: 'b', value: 'foo'}]\n },\n {\n tag: '520',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.'\n }\n ]\n }\n ]);\n });\n\n it('Fails to fix the record', async () => {\n const validator = await validatorFactory(/^520$/u);\n const record = new MarcRecord({\n fields: [\n {\n tag: '520',\n ind1: ' ',\n ind2: '',\n subfields: [\n {\n code: 'a',\n value: '.'\n }\n ]\n }\n ]\n });\n\n try {\n await validator.fix(record);\n } catch (err) {\n expect(err.message).to.equal('Language code is missing and detection failed');\n }\n });\n });\n});\n"],"mappings":"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"}
|
|
@@ -111,6 +111,10 @@ function _default() {
|
|
|
111
111
|
debug(`Handling subfield ${subfield.code}`);
|
|
112
112
|
let portion = getPortion(subfield, rulesForField); // eslint-disable-line functional/no-let
|
|
113
113
|
|
|
114
|
+
if (portion === false) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
|
|
114
118
|
if (portion === 'CF' || portion === 'NC') {
|
|
115
119
|
return;
|
|
116
120
|
}
|
|
@@ -171,7 +175,7 @@ function _default() {
|
|
|
171
175
|
const [portion] = rules.filter(rule => rule.namePortion === subfield.code).map(rule => rule.portion);
|
|
172
176
|
|
|
173
177
|
if (portion === undefined) {
|
|
174
|
-
|
|
178
|
+
return false;
|
|
175
179
|
}
|
|
176
180
|
|
|
177
181
|
return portion.toUpperCase();
|
|
@@ -229,6 +233,22 @@ function _default() {
|
|
|
229
233
|
}
|
|
230
234
|
}
|
|
231
235
|
|
|
236
|
+
if (punctType === 'SPACECOLON') {
|
|
237
|
+
if (!/:$/u.test(preceedingSubfield.value)) {
|
|
238
|
+
// eslint-disable-line functional/no-conditional-statement
|
|
239
|
+
const nextValue = `${preceedingSubfield.value} :`;
|
|
240
|
+
debug(`Updated subfield ${preceedingSubfield.code} from '${preceedingSubfield.value}' to '${nextValue}'`);
|
|
241
|
+
preceedingSubfield.value = nextValue; // eslint-disable-line functional/immutable-data
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
if (/[^ ]:$/u.test(preceedingSubfield.value)) {
|
|
245
|
+
// eslint-disable-line functional/no-conditional-statement
|
|
246
|
+
const nextValue = `${preceedingSubfield.value.slice(0, -1)} :`;
|
|
247
|
+
debug(`Updated subfield ${preceedingSubfield.code} from '${preceedingSubfield.value}' to '${nextValue}'`);
|
|
248
|
+
preceedingSubfield.value = nextValue; // eslint-disable-line functional/immutable-data
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
232
252
|
debug('addSubfieldPunctuation -- end');
|
|
233
253
|
}
|
|
234
254
|
|