@natlibfi/marc-record-validators-melinda 10.15.4 → 10.15.6-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -3,6 +3,6 @@ MARC record validators used in Melinda. See [wiki](https://github.com/NatLibFi/m
|
|
|
3
3
|
|
|
4
4
|
## License and copyright
|
|
5
5
|
|
|
6
|
-
Copyright (c) 2014-
|
|
6
|
+
Copyright (c) 2014-2024 **University Of Helsinki (The National Library Of Finland)**
|
|
7
7
|
|
|
8
8
|
This project's source code is licensed under the terms of **MIT** or any later version.
|
|
@@ -8,7 +8,7 @@ var _marcRecord = require("@natlibfi/marc-record");
|
|
|
8
8
|
var _debug = _interopRequireDefault(require("debug"));
|
|
9
9
|
var _rules = require("./rules");
|
|
10
10
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
-
const debug = (0, _debug.default)('@natlibfi/marc-record-validator-melinda/punctuation');
|
|
11
|
+
const debug = (0, _debug.default)('@natlibfi/marc-record-validator-melinda/punctuation:dev');
|
|
12
12
|
function cloneDeep(field) {
|
|
13
13
|
const r = new _marcRecord.MarcRecord();
|
|
14
14
|
r.appendField(field);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_marcRecord","require","_debug","_interopRequireDefault","_rules","obj","__esModule","default","debug","createDebug","cloneDeep","field","r","MarcRecord","appendField","get","tag","_default","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","slice","punct","Error","exception","parseExceptions","expectionsString","exceptionRules","split","exceptionFuncs","exceptionRule","match","exec","type","preceededCode","normalizedType","normalizedCode","push","ifPrecededByException","validate","record","valid","fields","every","leader","fix"],"sources":["../../src/punctuation/index.js"],"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-statements\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-statements\n portion = 'N';\n }\n\n if (!inNamePortion && portion === 'NT') { // eslint-disable-line functional/no-conditional-statements\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-statements\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-statements\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-statements\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-statements\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-statements\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-statements\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-statements\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 === 'SPACECOLON') {\n if (!(/:$/u).test(preceedingSubfield.value)) { // eslint-disable-line functional/no-conditional-statements\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 if ((/[^ ]:$/u).test(preceedingSubfield.value)) { // eslint-disable-line functional/no-conditional-statements\n const nextValue = `${preceedingSubfield.value.slice(0, -1)} :`;\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 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-statements\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-statements\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-statements\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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["_marcRecord","require","_debug","_interopRequireDefault","_rules","obj","__esModule","default","debug","createDebug","cloneDeep","field","r","MarcRecord","appendField","get","tag","_default","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","slice","punct","Error","exception","parseExceptions","expectionsString","exceptionRules","split","exceptionFuncs","exceptionRule","match","exec","type","preceededCode","normalizedType","normalizedCode","push","ifPrecededByException","validate","record","valid","fields","every","leader","fix"],"sources":["../../src/punctuation/index.js"],"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:dev');\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-statements\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-statements\n portion = 'N';\n }\n\n if (!inNamePortion && portion === 'NT') { // eslint-disable-line functional/no-conditional-statements\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-statements\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-statements\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-statements\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-statements\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-statements\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-statements\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-statements\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 === 'SPACECOLON') {\n if (!(/:$/u).test(preceedingSubfield.value)) { // eslint-disable-line functional/no-conditional-statements\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 if ((/[^ ]:$/u).test(preceedingSubfield.value)) { // eslint-disable-line functional/no-conditional-statements\n const nextValue = `${preceedingSubfield.value.slice(0, -1)} :`;\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 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-statements\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-statements\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-statements\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"],"mappings":"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"}
|
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": "MIT",
|
|
17
|
-
"version": "10.15.
|
|
17
|
+
"version": "10.15.6-alpha.1",
|
|
18
18
|
"main": "./dist/index.js",
|
|
19
19
|
"publishConfig": {
|
|
20
20
|
"access": "public"
|
|
@@ -39,8 +39,8 @@
|
|
|
39
39
|
"dependencies": {
|
|
40
40
|
"@babel/register": "^7.23.7",
|
|
41
41
|
"@natlibfi/issn-verify": "^1.0.3",
|
|
42
|
-
"@natlibfi/marc-record": "^8.1.0
|
|
43
|
-
"@natlibfi/marc-record-validate": "^8.0.
|
|
42
|
+
"@natlibfi/marc-record": "^8.1.0",
|
|
43
|
+
"@natlibfi/marc-record-validate": "^8.0.6",
|
|
44
44
|
"cld3-asm": "^3.1.1",
|
|
45
45
|
"clone": "^2.1.2",
|
|
46
46
|
"debug": "^4.3.4",
|
|
@@ -50,13 +50,13 @@
|
|
|
50
50
|
"xml2js": "^0.6.2"
|
|
51
51
|
},
|
|
52
52
|
"peerDependencies": {
|
|
53
|
-
"@natlibfi/marc-record-validate": "^8.0.
|
|
53
|
+
"@natlibfi/marc-record-validate": "^8.0.6"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
|
-
"@babel/cli": "^7.23.
|
|
57
|
-
"@babel/core": "^7.23.
|
|
58
|
-
"@babel/preset-env": "^7.23.
|
|
59
|
-
"@natlibfi/eslint-config-melinda-backend": "^3.0.
|
|
56
|
+
"@babel/cli": "^7.23.9",
|
|
57
|
+
"@babel/core": "^7.23.9",
|
|
58
|
+
"@babel/preset-env": "^7.23.9",
|
|
59
|
+
"@natlibfi/eslint-config-melinda-backend": "^3.0.4",
|
|
60
60
|
"@natlibfi/fixugen": "^2.0.4",
|
|
61
61
|
"@natlibfi/fixura": "^3.0.4",
|
|
62
62
|
"babel-plugin-istanbul": "^6.1.1",
|
package/src/punctuation/index.js
CHANGED
|
@@ -2,7 +2,7 @@ import {MarcRecord} from '@natlibfi/marc-record';
|
|
|
2
2
|
import createDebug from 'debug';
|
|
3
3
|
import {autRules, bibRules} from './rules';
|
|
4
4
|
|
|
5
|
-
const debug = createDebug('@natlibfi/marc-record-validator-melinda/punctuation');
|
|
5
|
+
const debug = createDebug('@natlibfi/marc-record-validator-melinda/punctuation:dev');
|
|
6
6
|
|
|
7
7
|
function cloneDeep(field) {
|
|
8
8
|
const r = new MarcRecord();
|