@natlibfi/marc-record-validators-melinda 9.0.5-alpha.1 → 9.0.7-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.
@@ -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-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 {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: '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 (Spaces in ISBN)', 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: ' 9789519155470'}]\n },\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({\n valid: false, messages: [\n 'ISBN ( 9789519155470) is not valid',\n 'ISBN (978-600-377-017-1 (nid.)) is not valid'\n ]\n });\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: '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 (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 (nid.)'}]\n }\n ]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: '9786003770171'}]},\n {tag: '020', ind1: ' ', ind2: ' ', subfields: [{code: 'a', value: '9786003770171'}]}\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 ]\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: '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: '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', 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: '3-86006-004-X'}]},\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,"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"}
@@ -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
- throw new Error(`Unknown subfield code ${subfield.code}`);
178
+ return false;
175
179
  }
176
180
 
177
181
  return portion.toUpperCase();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/punctuation/index.js"],"names":["debug","cloneDeep","field","r","MarcRecord","appendField","get","tag","readPunctuationRulesFromJSON","recordType","json","getRules","rules","filter","row","selector","map","namePortion","description","portion","preceedingPunctuation","exceptions","RegExp","replace","trim","autRules","bibRules","fieldToString","subfields","ind1","ind2","subfield","code","value","join","validateField","element","testField","JSON","stringify","punctuated","punctuateField","isEqual","rulesForField","getRulesForField","length","currentPortion","preceedingField","inNamePortion","sub","getPortion","forEach","includes","addSubfieldPunctuation","addNamePortionPunctuation","rule","test","undefined","Error","toUpperCase","preceedingSubfield","subfieldContainsPunctuation","nextValue","currentSubfield","punctType","getPrecedingPunctuation","exceptionsFunctions","getExceptions","isExceptionCase","some","fn","endsInPunctuation","punct","exception","parseExceptions","expectionsString","exceptionRules","split","exceptionFuncs","exceptionRule","match","exec","type","preceededCode","normalizedType","normalizedCode","push","ifPrecededByException","validate","record","valid","fields","every","leader","fix"],"mappings":"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","sourcesContent":["import {MarcRecord} from '@natlibfi/marc-record';\nimport createDebug from 'debug';\nimport {autRules, bibRules} from './rules';\n\nconst debug = createDebug('@natlibfi/marc-record-validator-melinda/punctuation');\n\nfunction cloneDeep(field) {\n const r = new MarcRecord();\n r.appendField(field);\n return r.get(field.tag)?.[0];\n}\n\nexport default function () {\n function readPunctuationRulesFromJSON(recordType) {\n const json = getRules(recordType);\n const rules = json.filter(row => row.selector !== '').map(row => {\n const {selector, namePortion, description, portion, preceedingPunctuation, exceptions} = row;\n return {\n selector: new RegExp(selector.replace(/X/ug, '.'), 'u'),\n namePortion: namePortion.replace(/\\$/ug, '').trim(),\n description, portion, preceedingPunctuation, exceptions\n };\n });\n\n return rules;\n }\n\n function getRules(recordType) {\n if (recordType === 'z') {\n return autRules;\n }\n\n return bibRules;\n }\n\n function fieldToString(field) {\n if (field && field.subfields) {\n const ind1 = field.ind1 || ' ';\n const ind2 = field.ind2 || ' ';\n const subfields = field.subfields.map(subfield => `‡${subfield.code}${subfield.value}`).join('');\n return `${field.tag} ${ind1}${ind2} ${subfields}`;\n }\n\n return `${field.tag} ${field.value}`;\n }\n\n function validateField(recordType = 'a') {\n return function (element) {\n const testField = cloneDeep(element);\n debug(`Original field: ${JSON.stringify(element)}`);\n const punctuated = punctuateField(testField, recordType);\n debug(`Punctuation result: ${JSON.stringify(punctuated)}`);\n if (!punctuated) {\n debug('No punctuation result -> true');\n return true;\n }\n\n if (MarcRecord.isEqual(punctuated, element)) {\n debug(`Original field (element): ${JSON.stringify(element)}`);\n debug('Punctuation result equals original field');\n return true;\n }\n\n return false;\n };\n }\n\n function punctuateField(field, recordType) {\n const rules = readPunctuationRulesFromJSON(recordType);\n debug(`Handling field ${field.tag}`);\n debug(`Field contents: ${fieldToString(field)}`);\n const rulesForField = getRulesForField(field.tag, rules);\n if (rulesForField.length === 0) {\n debug(`No matching rules for field ${field.tag}`);\n return;\n }\n\n let currentPortion; // eslint-disable-line functional/no-let\n let preceedingField; // eslint-disable-line functional/no-let\n let inNamePortion = true; // eslint-disable-line functional/no-let\n\n debug(`Field subfields: ${field.subfields.map(sub => sub.code)}`);\n debug(`Field portions: ${field.subfields.map(sub => getPortion(sub, rulesForField))}`);\n\n field.subfields.forEach(subfield => {\n debug(`Handling subfield ${subfield.code}`);\n let portion = getPortion(subfield, rulesForField); // eslint-disable-line functional/no-let\n\n if (portion === 'CF' || portion === 'NC') {\n return;\n }\n\n if (inNamePortion && portion.includes('T', 'S')) { // eslint-disable-line functional/no-conditional-statement\n debug(`Portion changed to ${portion}. Not in name portion anymore`);\n inNamePortion = false;\n }\n\n if (inNamePortion && portion === 'NT') { // eslint-disable-line functional/no-conditional-statement\n portion = 'N';\n }\n\n if (!inNamePortion && portion === 'NT') { // eslint-disable-line functional/no-conditional-statement\n portion = 'T';\n }\n\n debug(`Current portion is ${portion}.`);\n\n if (currentPortion) {\n if (currentPortion === portion) { // eslint-disable-line functional/no-conditional-statement\n debug(`Current stayed as ${portion}. Adding punctuation for subfield.`);\n addSubfieldPunctuation(preceedingField, subfield, rulesForField);\n } else {\n debug(`Current portion changed to ${portion}.`);\n if (portion !== 'S') { // eslint-disable-line functional/no-conditional-statement\n debug('Adding punctuation for portion.');\n addNamePortionPunctuation(preceedingField);\n }\n }\n }\n\n currentPortion = portion;\n preceedingField = subfield;\n });\n\n if (recordType !== 'z') { // eslint-disable-line functional/no-conditional-statement\n addNamePortionPunctuation(preceedingField);\n }\n\n debug(`After punctuation: ${fieldToString(field)}`);\n\n return field;\n }\n\n function getRulesForField(tag, rules) {\n return rules.filter(rule => rule.selector.test(tag));\n }\n\n function getPortion(subfield, rules) {\n debug(`Looking for namePortion for ${subfield.code}`);\n const [portion] = rules.filter(rule => rule.namePortion === subfield.code).map(rule => rule.portion);\n\n if (portion === undefined) {\n throw new Error(`Unknown subfield code ${subfield.code}`);\n }\n\n return portion.toUpperCase();\n }\n\n function addNamePortionPunctuation(preceedingSubfield) {\n const subfieldContainsPunctuation = (/[?\")\\].\\-!,]$/u).test(preceedingSubfield.value);\n if (!subfieldContainsPunctuation) { // eslint-disable-line functional/no-conditional-statement\n const nextValue = `${preceedingSubfield.value}.`;\n debug(`Updated subfield ${preceedingSubfield.code} from '${preceedingSubfield.value}' to '${nextValue}'`);\n preceedingSubfield.value = nextValue; // eslint-disable-line functional/immutable-data\n }\n }\n\n function addSubfieldPunctuation(preceedingSubfield, currentSubfield, rules) {\n const punctType = getPrecedingPunctuation(currentSubfield, rules);\n const exceptionsFunctions = getExceptions(currentSubfield, rules);\n\n const isExceptionCase = exceptionsFunctions.some(fn => fn(preceedingSubfield));\n\n if (isExceptionCase) {\n return;\n }\n\n const endsInPunctuation = (/[?\")\\]\\-!,]$/u).test(preceedingSubfield.value);\n debug(`addSubfieldPunctuation -- punctType: ${punctType} endsInPunctuation: ${endsInPunctuation}`);\n\n if (!endsInPunctuation) {\n if (punctType === 'PERIOD' && !(/\\.$/u).test(preceedingSubfield.value)) { // eslint-disable-line functional/no-conditional-statement\n const nextValue = `${preceedingSubfield.value}.`;\n debug(`Updated subfield ${preceedingSubfield.code} from '${preceedingSubfield.value}' to '${nextValue}'`);\n preceedingSubfield.value = nextValue; // eslint-disable-line functional/immutable-data\n }\n }\n\n if (punctType === 'COMMA') {\n if (!(/,$/u).test(preceedingSubfield.value)) {\n if (!(/^[[(]/u).test(currentSubfield.value)) { // eslint-disable-line functional/no-conditional-statement\n const nextValue = `${preceedingSubfield.value},`;\n debug(`Updated subfield ${preceedingSubfield.code} from '${preceedingSubfield.value}' to '${nextValue}'`);\n preceedingSubfield.value = nextValue; // eslint-disable-line functional/immutable-data\n }\n }\n }\n\n if (punctType === 'COND_COMMA') {\n if (!(/[-,]$/u).test(preceedingSubfield.value)) { // eslint-disable-line functional/no-conditional-statement\n const nextValue = `${preceedingSubfield.value},`;\n debug(`Updated subfield ${preceedingSubfield.code} from '${preceedingSubfield.value}' to '${nextValue}'`);\n preceedingSubfield.value = nextValue; // eslint-disable-line functional/immutable-data\n }\n }\n\n debug('addSubfieldPunctuation -- end');\n }\n\n function getPrecedingPunctuation(subfield, rules) {\n const [punct] = rules.filter(rule => rule.namePortion === subfield.code).map(rule => rule.preceedingPunctuation);\n\n if (punct === undefined) {\n throw new Error(`Unknown subfield code ${subfield.code}`);\n }\n\n return punct.toUpperCase();\n }\n\n function getExceptions(subfield, rules) {\n const [exception] = rules.filter(rule => rule.namePortion === subfield.code).map(rule => parseExceptions(rule.exceptions));\n\n if (exception === undefined) {\n throw new Error(`Unknown subfield code ${subfield.code}`);\n }\n\n return exception;\n }\n\n function parseExceptions(expectionsString) {\n const exceptionRules = expectionsString.split('\\n');\n const exceptionFuncs = [];\n\n exceptionRules.forEach(exceptionRule => {\n const match = (/- (.*) if preceded by (.*)/u).exec(exceptionRule); // eslint-disable-line prefer-named-capture-group\n if (match) { // eslint-disable-line functional/no-conditional-statement\n const [, type, preceededCode] = match;\n const normalizedType = type.trim().toUpperCase().trim();\n const normalizedCode = preceededCode.replace(/\\$/ug, '').trim();\n exceptionFuncs.push(ifPrecededByException(normalizedCode, normalizedType)); // eslint-disable-line functional/immutable-data\n }\n });\n\n return exceptionFuncs;\n }\n\n function ifPrecededByException(code, type) {\n return preceedingSubfield => {\n if (code === preceedingSubfield.code) {\n debug(`Adding ${type} to ${preceedingSubfield.code}`);\n if (type === 'SEMICOLON' && !(/;$/u).test(preceedingSubfield.value)) { // eslint-disable-line functional/no-conditional-statement\n const nextValue = `${preceedingSubfield.value} ;`;\n debug(`Updated subfield ${preceedingSubfield.code} from '${preceedingSubfield.value}' to '${nextValue}'`);\n preceedingSubfield.value = nextValue; // eslint-disable-line functional/immutable-data\n }\n\n if (type === 'COLON' && !(/:$/u).test(preceedingSubfield.value)) { // eslint-disable-line functional/no-conditional-statement\n const nextValue = `${preceedingSubfield.value} :`;\n debug(`Updated subfield ${preceedingSubfield.code} from '${preceedingSubfield.value}' to '${nextValue}'`);\n preceedingSubfield.value = nextValue; // eslint-disable-line functional/immutable-data\n }\n\n return true;\n }\n\n return false;\n };\n }\n\n function validate(record) {\n return {valid: record.fields.every(validateField(record.leader[6]))};\n }\n\n function fix(record) {\n record.fields.map(field => punctuateField(field, record.leader[6]));\n return true;\n }\n\n return {\n description: 'Fixes punctuation of fields',\n validate,\n fix\n };\n}\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../src/punctuation/index.js"],"names":["debug","cloneDeep","field","r","MarcRecord","appendField","get","tag","readPunctuationRulesFromJSON","recordType","json","getRules","rules","filter","row","selector","map","namePortion","description","portion","preceedingPunctuation","exceptions","RegExp","replace","trim","autRules","bibRules","fieldToString","subfields","ind1","ind2","subfield","code","value","join","validateField","element","testField","JSON","stringify","punctuated","punctuateField","isEqual","rulesForField","getRulesForField","length","currentPortion","preceedingField","inNamePortion","sub","getPortion","forEach","includes","addSubfieldPunctuation","addNamePortionPunctuation","rule","test","undefined","toUpperCase","preceedingSubfield","subfieldContainsPunctuation","nextValue","currentSubfield","punctType","getPrecedingPunctuation","exceptionsFunctions","getExceptions","isExceptionCase","some","fn","endsInPunctuation","punct","Error","exception","parseExceptions","expectionsString","exceptionRules","split","exceptionFuncs","exceptionRule","match","exec","type","preceededCode","normalizedType","normalizedCode","push","ifPrecededByException","validate","record","valid","fields","every","leader","fix"],"mappings":"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","sourcesContent":["import {MarcRecord} from '@natlibfi/marc-record';\nimport createDebug from 'debug';\nimport {autRules, bibRules} from './rules';\n\nconst debug = createDebug('@natlibfi/marc-record-validator-melinda/punctuation');\n\nfunction cloneDeep(field) {\n const r = new MarcRecord();\n r.appendField(field);\n return r.get(field.tag)?.[0];\n}\n\nexport default function () {\n function readPunctuationRulesFromJSON(recordType) {\n const json = getRules(recordType);\n const rules = json.filter(row => row.selector !== '').map(row => {\n const {selector, namePortion, description, portion, preceedingPunctuation, exceptions} = row;\n return {\n selector: new RegExp(selector.replace(/X/ug, '.'), 'u'),\n namePortion: namePortion.replace(/\\$/ug, '').trim(),\n description, portion, preceedingPunctuation, exceptions\n };\n });\n\n return rules;\n }\n\n function getRules(recordType) {\n if (recordType === 'z') {\n return autRules;\n }\n\n return bibRules;\n }\n\n function fieldToString(field) {\n if (field && field.subfields) {\n const ind1 = field.ind1 || ' ';\n const ind2 = field.ind2 || ' ';\n const subfields = field.subfields.map(subfield => `‡${subfield.code}${subfield.value}`).join('');\n return `${field.tag} ${ind1}${ind2} ${subfields}`;\n }\n\n return `${field.tag} ${field.value}`;\n }\n\n function validateField(recordType = 'a') {\n return function (element) {\n const testField = cloneDeep(element);\n debug(`Original field: ${JSON.stringify(element)}`);\n const punctuated = punctuateField(testField, recordType);\n debug(`Punctuation result: ${JSON.stringify(punctuated)}`);\n if (!punctuated) {\n debug('No punctuation result -> true');\n return true;\n }\n\n if (MarcRecord.isEqual(punctuated, element)) {\n debug(`Original field (element): ${JSON.stringify(element)}`);\n debug('Punctuation result equals original field');\n return true;\n }\n\n return false;\n };\n }\n\n function punctuateField(field, recordType) {\n const rules = readPunctuationRulesFromJSON(recordType);\n debug(`Handling field ${field.tag}`);\n debug(`Field contents: ${fieldToString(field)}`);\n const rulesForField = getRulesForField(field.tag, rules);\n if (rulesForField.length === 0) {\n debug(`No matching rules for field ${field.tag}`);\n return;\n }\n\n let currentPortion; // eslint-disable-line functional/no-let\n let preceedingField; // eslint-disable-line functional/no-let\n let inNamePortion = true; // eslint-disable-line functional/no-let\n\n debug(`Field subfields: ${field.subfields.map(sub => sub.code)}`);\n debug(`Field portions: ${field.subfields.map(sub => getPortion(sub, rulesForField))}`);\n\n field.subfields.forEach(subfield => {\n debug(`Handling subfield ${subfield.code}`);\n let portion = getPortion(subfield, rulesForField); // eslint-disable-line functional/no-let\n\n if (portion === false) {\n return;\n }\n\n if (portion === 'CF' || portion === 'NC') {\n return;\n }\n\n if (inNamePortion && portion.includes('T', 'S')) { // eslint-disable-line functional/no-conditional-statement\n debug(`Portion changed to ${portion}. Not in name portion anymore`);\n inNamePortion = false;\n }\n\n if (inNamePortion && portion === 'NT') { // eslint-disable-line functional/no-conditional-statement\n portion = 'N';\n }\n\n if (!inNamePortion && portion === 'NT') { // eslint-disable-line functional/no-conditional-statement\n portion = 'T';\n }\n\n debug(`Current portion is ${portion}.`);\n\n if (currentPortion) {\n if (currentPortion === portion) { // eslint-disable-line functional/no-conditional-statement\n debug(`Current stayed as ${portion}. Adding punctuation for subfield.`);\n addSubfieldPunctuation(preceedingField, subfield, rulesForField);\n } else {\n debug(`Current portion changed to ${portion}.`);\n if (portion !== 'S') { // eslint-disable-line functional/no-conditional-statement\n debug('Adding punctuation for portion.');\n addNamePortionPunctuation(preceedingField);\n }\n }\n }\n\n currentPortion = portion;\n preceedingField = subfield;\n });\n\n if (recordType !== 'z') { // eslint-disable-line functional/no-conditional-statement\n addNamePortionPunctuation(preceedingField);\n }\n\n debug(`After punctuation: ${fieldToString(field)}`);\n\n return field;\n }\n\n function getRulesForField(tag, rules) {\n return rules.filter(rule => rule.selector.test(tag));\n }\n\n function getPortion(subfield, rules) {\n debug(`Looking for namePortion for ${subfield.code}`);\n const [portion] = rules.filter(rule => rule.namePortion === subfield.code).map(rule => rule.portion);\n\n if (portion === undefined) {\n return false;\n }\n\n return portion.toUpperCase();\n }\n\n function addNamePortionPunctuation(preceedingSubfield) {\n const subfieldContainsPunctuation = (/[?\")\\].\\-!,]$/u).test(preceedingSubfield.value);\n if (!subfieldContainsPunctuation) { // eslint-disable-line functional/no-conditional-statement\n const nextValue = `${preceedingSubfield.value}.`;\n debug(`Updated subfield ${preceedingSubfield.code} from '${preceedingSubfield.value}' to '${nextValue}'`);\n preceedingSubfield.value = nextValue; // eslint-disable-line functional/immutable-data\n }\n }\n\n function addSubfieldPunctuation(preceedingSubfield, currentSubfield, rules) {\n const punctType = getPrecedingPunctuation(currentSubfield, rules);\n const exceptionsFunctions = getExceptions(currentSubfield, rules);\n\n const isExceptionCase = exceptionsFunctions.some(fn => fn(preceedingSubfield));\n\n if (isExceptionCase) {\n return;\n }\n\n const endsInPunctuation = (/[?\")\\]\\-!,]$/u).test(preceedingSubfield.value);\n debug(`addSubfieldPunctuation -- punctType: ${punctType} endsInPunctuation: ${endsInPunctuation}`);\n\n if (!endsInPunctuation) {\n if (punctType === 'PERIOD' && !(/\\.$/u).test(preceedingSubfield.value)) { // eslint-disable-line functional/no-conditional-statement\n const nextValue = `${preceedingSubfield.value}.`;\n debug(`Updated subfield ${preceedingSubfield.code} from '${preceedingSubfield.value}' to '${nextValue}'`);\n preceedingSubfield.value = nextValue; // eslint-disable-line functional/immutable-data\n }\n }\n\n if (punctType === 'COMMA') {\n if (!(/,$/u).test(preceedingSubfield.value)) {\n if (!(/^[[(]/u).test(currentSubfield.value)) { // eslint-disable-line functional/no-conditional-statement\n const nextValue = `${preceedingSubfield.value},`;\n debug(`Updated subfield ${preceedingSubfield.code} from '${preceedingSubfield.value}' to '${nextValue}'`);\n preceedingSubfield.value = nextValue; // eslint-disable-line functional/immutable-data\n }\n }\n }\n\n if (punctType === 'COND_COMMA') {\n if (!(/[-,]$/u).test(preceedingSubfield.value)) { // eslint-disable-line functional/no-conditional-statement\n const nextValue = `${preceedingSubfield.value},`;\n debug(`Updated subfield ${preceedingSubfield.code} from '${preceedingSubfield.value}' to '${nextValue}'`);\n preceedingSubfield.value = nextValue; // eslint-disable-line functional/immutable-data\n }\n }\n\n debug('addSubfieldPunctuation -- end');\n }\n\n function getPrecedingPunctuation(subfield, rules) {\n const [punct] = rules.filter(rule => rule.namePortion === subfield.code).map(rule => rule.preceedingPunctuation);\n\n if (punct === undefined) {\n throw new Error(`Unknown subfield code ${subfield.code}`);\n }\n\n return punct.toUpperCase();\n }\n\n function getExceptions(subfield, rules) {\n const [exception] = rules.filter(rule => rule.namePortion === subfield.code).map(rule => parseExceptions(rule.exceptions));\n\n if (exception === undefined) {\n throw new Error(`Unknown subfield code ${subfield.code}`);\n }\n\n return exception;\n }\n\n function parseExceptions(expectionsString) {\n const exceptionRules = expectionsString.split('\\n');\n const exceptionFuncs = [];\n\n exceptionRules.forEach(exceptionRule => {\n const match = (/- (.*) if preceded by (.*)/u).exec(exceptionRule); // eslint-disable-line prefer-named-capture-group\n if (match) { // eslint-disable-line functional/no-conditional-statement\n const [, type, preceededCode] = match;\n const normalizedType = type.trim().toUpperCase().trim();\n const normalizedCode = preceededCode.replace(/\\$/ug, '').trim();\n exceptionFuncs.push(ifPrecededByException(normalizedCode, normalizedType)); // eslint-disable-line functional/immutable-data\n }\n });\n\n return exceptionFuncs;\n }\n\n function ifPrecededByException(code, type) {\n return preceedingSubfield => {\n if (code === preceedingSubfield.code) {\n debug(`Adding ${type} to ${preceedingSubfield.code}`);\n if (type === 'SEMICOLON' && !(/;$/u).test(preceedingSubfield.value)) { // eslint-disable-line functional/no-conditional-statement\n const nextValue = `${preceedingSubfield.value} ;`;\n debug(`Updated subfield ${preceedingSubfield.code} from '${preceedingSubfield.value}' to '${nextValue}'`);\n preceedingSubfield.value = nextValue; // eslint-disable-line functional/immutable-data\n }\n\n if (type === 'COLON' && !(/:$/u).test(preceedingSubfield.value)) { // eslint-disable-line functional/no-conditional-statement\n const nextValue = `${preceedingSubfield.value} :`;\n debug(`Updated subfield ${preceedingSubfield.code} from '${preceedingSubfield.value}' to '${nextValue}'`);\n preceedingSubfield.value = nextValue; // eslint-disable-line functional/immutable-data\n }\n\n return true;\n }\n\n return false;\n };\n }\n\n function validate(record) {\n return {valid: record.fields.every(validateField(record.leader[6]))};\n }\n\n function fix(record) {\n record.fields.map(field => punctuateField(field, record.leader[6]));\n return true;\n }\n\n return {\n description: 'Fixes punctuation of fields',\n validate,\n fix\n };\n}\n"],"file":"index.js"}
@@ -77,8 +77,9 @@ describe('resolvable-ext-references-melinda', () => {
77
77
  endpoint,
78
78
  prefixPattern,
79
79
  fields
80
- });
81
- await expect(validator.validate()).to.be.rejectedWith(Error, 'Cannot read property \'fields\' of undefined');
80
+ }); // Cannot read property 'fields' of undefined or Cannot read properties of undefined (reading 'fields')'
81
+
82
+ await expect(validator.validate()).to.be.rejectedWith(Error, /^Cannot read propert/u);
82
83
  });
83
84
  describe('#validate', () => {
84
85
  it('Finds prefixPattern on record and removes it', async () => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/resolvable-ext-references-melinda.spec.js"],"names":["expect","chai","use","chaiAsPromised","endpoint","queryParam","prefixPattern","fields","describe","afterEach","testContext","default","__ResetDependency__","it","validator","to","be","an","that","has","any","keys","description","a","validate","rejectedWith","Error","mock","fetchMock","sandbox","get","fixture5000","fixture9550","__Rewire__","record","MarcRecord","tag","value","subfields","code","result","eql","valid","messages","fixture1000"],"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 fetchMock from 'fetch-mock';\nimport * as testContext from '../src/resolvable-ext-references-melinda';\nimport {fixture5000, fixture9550, fixture1000} from '../test-fixtures/resolvable-ext-references-melinda';\n\nconst {expect} = chai;\nchai.use(chaiAsPromised);\n\nconst endpoint = 'http://melinda.kansalliskirjasto.fi:210/fin01';\nconst queryParam = '?operation=searchRetrieve&maximumRecords=2&version=1&query=rec.id=';\nconst prefixPattern = /^\\(FOOBAR\\)/u;\nconst fields = {\n 773: ['w'],\n 833: ['w', 'p']\n};\n\ndescribe('resolvable-ext-references-melinda', () => {\n afterEach(() => {\n testContext.default.__ResetDependency__('fetch');\n });\n\n it('Creates a validator', async () => {\n const validator = await testContext.default({endpoint, prefixPattern, fields});\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 prefixPattern not provided', async () => {\n const validator = await testContext.default({endpoint, prefixPattern, fields});\n await expect(validator.validate()).to.be.rejectedWith(Error, 'Cannot read property \\'fields\\' of undefined');\n });\n\n describe('#validate', () => {\n it('Finds prefixPattern on record and removes it', async () => {\n const mock = fetchMock.sandbox();\n mock.get(`${endpoint}${queryParam}5000`, fixture5000);\n mock.get(`${endpoint}${queryParam}9550`, fixture9550);\n\n testContext.default.__Rewire__('fetch', mock);\n const validator = await testContext.default({endpoint, prefixPattern, fields});\n\n const record = new MarcRecord({\n fields: [\n {\n tag: '001',\n value: '123456'\n },\n {\n tag: '035',\n subfields: [\n {\n code: 'a',\n value: '(FI-MELINDA)123456'\n }\n ]\n },\n {\n tag: '773',\n subfields: [\n {\n code: 'w',\n value: '(FOOBAR)5000'\n }\n ]\n },\n {\n tag: '833',\n subfields: [\n {\n code: 'p',\n value: '(FOOBAR)9550'\n },\n {\n code: 'c',\n value: '(FI-MELINDA)8850'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true, messages: []});\n });\n\n it('Finds no matching prefixPattern on record', async () => {\n const mock = fetchMock.sandbox();\n\n mock.get(`${endpoint}5000`, fixture5000);\n\n testContext.default.__Rewire__('fetch', mock);\n const validator = await testContext.default({endpoint, prefixPattern, fields});\n\n const record = new MarcRecord({\n fields: [\n {\n tag: '001',\n value: '123456'\n },\n {\n tag: '035',\n subfields: [\n {\n code: 'a',\n value: '(FI-MELINDA)123456'\n }\n ]\n },\n {\n tag: '773',\n subfields: [\n {\n code: 'w',\n value: '(FI-MELINDA)123456'\n }\n ]\n },\n {\n tag: '833',\n subfields: [\n {\n code: 'p',\n value: '(FI-MELINDA)2620'\n },\n {\n code: 'w',\n value: '(FI-MELINDA)8850'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true, messages: []});\n });\n\n it('Finds prefixPattern on record but values not resolvable', async () => {\n const mock = fetchMock.sandbox();\n mock.get(`${endpoint}${queryParam}1000`, fixture1000);\n\n testContext.default.__Rewire__('fetch', mock);\n const validator = await testContext.default({endpoint, prefixPattern, fields});\n\n const record = new MarcRecord({\n fields: [\n {\n tag: '001',\n value: '123456'\n },\n {\n tag: '035',\n subfields: [\n {\n code: 'a',\n value: '(FI-MELINDA)123456'\n }\n ]\n },\n {\n tag: '773',\n subfields: [\n {\n code: 'w',\n value: '(FOOBAR)1000'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false, messages: ['Field 773$w with value 1000 is not resolvable']});\n });\n });\n});\n"],"file":"resolvable-ext-references-melinda.spec.js"}
1
+ {"version":3,"sources":["../src/resolvable-ext-references-melinda.spec.js"],"names":["expect","chai","use","chaiAsPromised","endpoint","queryParam","prefixPattern","fields","describe","afterEach","testContext","default","__ResetDependency__","it","validator","to","be","an","that","has","any","keys","description","a","validate","rejectedWith","Error","mock","fetchMock","sandbox","get","fixture5000","fixture9550","__Rewire__","record","MarcRecord","tag","value","subfields","code","result","eql","valid","messages","fixture1000"],"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 fetchMock from 'fetch-mock';\nimport * as testContext from '../src/resolvable-ext-references-melinda';\nimport {fixture5000, fixture9550, fixture1000} from '../test-fixtures/resolvable-ext-references-melinda';\n\nconst {expect} = chai;\nchai.use(chaiAsPromised);\n\nconst endpoint = 'http://melinda.kansalliskirjasto.fi:210/fin01';\nconst queryParam = '?operation=searchRetrieve&maximumRecords=2&version=1&query=rec.id=';\nconst prefixPattern = /^\\(FOOBAR\\)/u;\nconst fields = {\n 773: ['w'],\n 833: ['w', 'p']\n};\n\ndescribe('resolvable-ext-references-melinda', () => {\n afterEach(() => {\n testContext.default.__ResetDependency__('fetch');\n });\n\n it('Creates a validator', async () => {\n const validator = await testContext.default({endpoint, prefixPattern, fields});\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 prefixPattern not provided', async () => {\n const validator = await testContext.default({endpoint, prefixPattern, fields});\n // Cannot read property 'fields' of undefined or Cannot read properties of undefined (reading 'fields')'\n await expect(validator.validate()).to.be.rejectedWith(Error, /^Cannot read propert/u);\n });\n\n describe('#validate', () => {\n it('Finds prefixPattern on record and removes it', async () => {\n const mock = fetchMock.sandbox();\n mock.get(`${endpoint}${queryParam}5000`, fixture5000);\n mock.get(`${endpoint}${queryParam}9550`, fixture9550);\n\n testContext.default.__Rewire__('fetch', mock);\n const validator = await testContext.default({endpoint, prefixPattern, fields});\n\n const record = new MarcRecord({\n fields: [\n {\n tag: '001',\n value: '123456'\n },\n {\n tag: '035',\n subfields: [\n {\n code: 'a',\n value: '(FI-MELINDA)123456'\n }\n ]\n },\n {\n tag: '773',\n subfields: [\n {\n code: 'w',\n value: '(FOOBAR)5000'\n }\n ]\n },\n {\n tag: '833',\n subfields: [\n {\n code: 'p',\n value: '(FOOBAR)9550'\n },\n {\n code: 'c',\n value: '(FI-MELINDA)8850'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true, messages: []});\n });\n\n it('Finds no matching prefixPattern on record', async () => {\n const mock = fetchMock.sandbox();\n\n mock.get(`${endpoint}5000`, fixture5000);\n\n testContext.default.__Rewire__('fetch', mock);\n const validator = await testContext.default({endpoint, prefixPattern, fields});\n\n const record = new MarcRecord({\n fields: [\n {\n tag: '001',\n value: '123456'\n },\n {\n tag: '035',\n subfields: [\n {\n code: 'a',\n value: '(FI-MELINDA)123456'\n }\n ]\n },\n {\n tag: '773',\n subfields: [\n {\n code: 'w',\n value: '(FI-MELINDA)123456'\n }\n ]\n },\n {\n tag: '833',\n subfields: [\n {\n code: 'p',\n value: '(FI-MELINDA)2620'\n },\n {\n code: 'w',\n value: '(FI-MELINDA)8850'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true, messages: []});\n });\n\n it('Finds prefixPattern on record but values not resolvable', async () => {\n const mock = fetchMock.sandbox();\n mock.get(`${endpoint}${queryParam}1000`, fixture1000);\n\n testContext.default.__Rewire__('fetch', mock);\n const validator = await testContext.default({endpoint, prefixPattern, fields});\n\n const record = new MarcRecord({\n fields: [\n {\n tag: '001',\n value: '123456'\n },\n {\n tag: '035',\n subfields: [\n {\n code: 'a',\n value: '(FI-MELINDA)123456'\n }\n ]\n },\n {\n tag: '773',\n subfields: [\n {\n code: 'w',\n value: '(FOOBAR)1000'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false, messages: ['Field 773$w with value 1000 is not resolvable']});\n });\n });\n});\n"],"file":"resolvable-ext-references-melinda.spec.js"}
package/package.json CHANGED
@@ -14,7 +14,7 @@
14
14
  "url": "git@github.com:natlibfi/marc-record-validators-melinda.git"
15
15
  },
16
16
  "license": "LGPL-3.0+",
17
- "version": "9.0.5-alpha.1",
17
+ "version": "9.0.7-alpha.1",
18
18
  "main": "./dist/index.js",
19
19
  "publishConfig": {
20
20
  "access": "public"