@natlibfi/marc-record-validators-melinda 11.6.6 → 11.6.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.
- package/.github/workflows/melinda-node-tests.yml +1 -1
- package/dist/access-rights.js +1 -5
- package/dist/access-rights.js.map +1 -1
- package/dist/addMissingField336.js +1 -1
- package/dist/addMissingField336.js.map +1 -1
- package/dist/cyrillux-usemarcon-replacement.js +41 -45
- package/dist/cyrillux-usemarcon-replacement.js.map +1 -1
- package/dist/cyrillux.js +13 -17
- package/dist/cyrillux.js.map +1 -1
- package/dist/disambiguateSeriesStatements.js +3 -4
- package/dist/disambiguateSeriesStatements.js.map +1 -1
- package/dist/double-commas.js +2 -1
- package/dist/double-commas.js.map +1 -1
- package/dist/duplicates-ind1.js +1 -1
- package/dist/duplicates-ind1.js.map +1 -1
- package/dist/empty-fields.js +0 -4
- package/dist/empty-fields.js.map +1 -1
- package/dist/ending-punctuation.js +21 -49
- package/dist/ending-punctuation.js.map +1 -1
- package/dist/ending-whitespace.js +0 -4
- package/dist/ending-whitespace.js.map +1 -1
- package/dist/field-008-18-34-character-groups.js +4 -5
- package/dist/field-008-18-34-character-groups.js.map +1 -1
- package/dist/field-505-separators.js +8 -6
- package/dist/field-505-separators.js.map +1 -1
- package/dist/field-521-fix.js +5 -6
- package/dist/field-521-fix.js.map +1 -1
- package/dist/field-exclusion.js +5 -12
- package/dist/field-exclusion.js.map +1 -1
- package/dist/field-exclusion.spec.js +3 -5
- package/dist/field-exclusion.spec.js.map +1 -1
- package/dist/field-structure.js +2 -5
- package/dist/field-structure.js.map +1 -1
- package/dist/fields-present.js +1 -1
- package/dist/fields-present.js.map +1 -1
- package/dist/fields-present.spec.js +1 -1
- package/dist/fields-present.spec.js.map +1 -1
- package/dist/fix-33X.js +5 -6
- package/dist/fix-33X.js.map +1 -1
- package/dist/fix-country-codes.js +3 -4
- package/dist/fix-country-codes.js.map +1 -1
- package/dist/fix-language-codes.js +12 -9
- package/dist/fix-language-codes.js.map +1 -1
- package/dist/fixRelatorTerms.js +8 -8
- package/dist/fixRelatorTerms.js.map +1 -1
- package/dist/fixed-fields.js +1 -4
- package/dist/fixed-fields.js.map +1 -1
- package/dist/identical-fields.js +2 -3
- package/dist/identical-fields.js.map +1 -1
- package/dist/indicator-fixes.js +14 -15
- package/dist/indicator-fixes.js.map +1 -1
- package/dist/isbn-issn.js +8 -11
- package/dist/isbn-issn.js.map +1 -1
- package/dist/item-language.js +5 -12
- package/dist/item-language.js.map +1 -1
- package/dist/merge-fields/counterpartField.js +6 -8
- package/dist/merge-fields/counterpartField.js.map +1 -1
- package/dist/merge-fields/index.js +3 -3
- package/dist/merge-fields/index.js.map +1 -1
- package/dist/merge-fields/mergeConstraints.js +0 -1
- package/dist/merge-fields/mergeConstraints.js.map +1 -1
- package/dist/merge-fields/mergeField.js +12 -18
- package/dist/merge-fields/mergeField.js.map +1 -1
- package/dist/merge-fields/mergeIndicator.js +5 -5
- package/dist/merge-fields/mergeIndicator.js.map +1 -1
- package/dist/merge-fields/mergeOrAddPostprocess.js +6 -9
- package/dist/merge-fields/mergeOrAddPostprocess.js.map +1 -1
- package/dist/merge-fields/mergeOrAddSubfield.js +6 -8
- package/dist/merge-fields/mergeOrAddSubfield.js.map +1 -1
- package/dist/merge-fields/mergeSubfield.js +8 -8
- package/dist/merge-fields/mergeSubfield.js.map +1 -1
- package/dist/merge-fields/removeDuplicateSubfields.js +1 -2
- package/dist/merge-fields/removeDuplicateSubfields.js.map +1 -1
- package/dist/merge-fields/worldKnowledge.js +1 -1
- package/dist/merge-fields/worldKnowledge.js.map +1 -1
- package/dist/mergeField500Lisapainokset.js +0 -3
- package/dist/mergeField500Lisapainokset.js.map +1 -1
- package/dist/mergeRelatorTermFields.js +3 -3
- package/dist/mergeRelatorTermFields.js.map +1 -1
- package/dist/modernize-502.js +6 -6
- package/dist/modernize-502.js.map +1 -1
- package/dist/multiple-subfield-0.js +4 -4
- package/dist/multiple-subfield-0.js.map +1 -1
- package/dist/non-breaking-space.js +0 -4
- package/dist/non-breaking-space.js.map +1 -1
- package/dist/normalize-dashes.js +5 -4
- package/dist/normalize-dashes.js.map +1 -1
- package/dist/normalize-identifiers.js +6 -6
- package/dist/normalize-identifiers.js.map +1 -1
- package/dist/normalize-qualifying-information.js +4 -4
- package/dist/normalize-qualifying-information.js.map +1 -1
- package/dist/normalize-utf8-diacritics.js +7 -7
- package/dist/normalize-utf8-diacritics.js.map +1 -1
- package/dist/normalizeFieldForComparison.js +21 -20
- package/dist/normalizeFieldForComparison.js.map +1 -1
- package/dist/normalizeSubfieldValueForComparison.js +1 -2
- package/dist/normalizeSubfieldValueForComparison.js.map +1 -1
- package/dist/prepublicationUtils.js +3 -3
- package/dist/prepublicationUtils.js.map +1 -1
- package/dist/punctuation/index.js +14 -31
- package/dist/punctuation/index.js.map +1 -1
- package/dist/punctuation2.js +9 -10
- package/dist/punctuation2.js.map +1 -1
- package/dist/reindexSubfield6OccurenceNumbers.js +8 -9
- package/dist/reindexSubfield6OccurenceNumbers.js.map +1 -1
- package/dist/removeDuplicateDataFields.js +18 -20
- package/dist/removeDuplicateDataFields.js.map +1 -1
- package/dist/removeInferiorDataFields.js +16 -19
- package/dist/removeInferiorDataFields.js.map +1 -1
- package/dist/resolvable-ext-references-melinda.js +4 -8
- package/dist/resolvable-ext-references-melinda.js.map +1 -1
- package/dist/resolveOrphanedSubfield6s.js +9 -9
- package/dist/resolveOrphanedSubfield6s.js.map +1 -1
- package/dist/sanitize-vocabulary-source-codes.js +9 -9
- package/dist/sanitize-vocabulary-source-codes.js.map +1 -1
- package/dist/sort-tags.js +2 -2
- package/dist/sort-tags.js.map +1 -1
- package/dist/sortFields.js +4 -9
- package/dist/sortFields.js.map +1 -1
- package/dist/sortRelatorTerms.js +4 -5
- package/dist/sortRelatorTerms.js.map +1 -1
- package/dist/sortSubfields.js +5 -6
- package/dist/sortSubfields.js.map +1 -1
- package/dist/stripPunctuation.js +2 -2
- package/dist/stripPunctuation.js.map +1 -1
- package/dist/subfield-exclusion.js +4 -11
- package/dist/subfield-exclusion.js.map +1 -1
- package/dist/subfield6Utils.js +12 -11
- package/dist/subfield6Utils.js.map +1 -1
- package/dist/subfield8Utils.js +8 -9
- package/dist/subfield8Utils.js.map +1 -1
- package/dist/subfieldValueNormalizations.js +5 -8
- package/dist/subfieldValueNormalizations.js.map +1 -1
- package/dist/sync-007-and-300.js +8 -8
- package/dist/sync-007-and-300.js.map +1 -1
- package/dist/translate-terms.js +5 -6
- package/dist/translate-terms.js.map +1 -1
- package/dist/typeOfDate-008.js +3 -4
- package/dist/typeOfDate-008.js.map +1 -1
- package/dist/unicode-decomposition.js +1 -1
- package/dist/unicode-decomposition.js.map +1 -1
- package/dist/update-field-540.js +5 -6
- package/dist/update-field-540.js.map +1 -1
- package/dist/urn.js +4 -9
- package/dist/urn.js.map +1 -1
- package/dist/utils.js +5 -9
- package/dist/utils.js.map +1 -1
- package/eslint.config.mjs +53 -0
- package/package.json +12 -13
- package/src/access-rights.js +4 -4
- package/src/addMissingField336.js +1 -1
- package/src/cyrillux-usemarcon-replacement.js +38 -38
- package/src/cyrillux.js +14 -14
- package/src/disambiguateSeriesStatements.js +3 -3
- package/src/double-commas.js +2 -2
- package/src/duplicates-ind1.js +1 -1
- package/src/empty-fields.js +4 -4
- package/src/ending-punctuation.js +46 -49
- package/src/ending-whitespace.js +0 -2
- package/src/field-008-18-34-character-groups.js +5 -5
- package/src/field-505-separators.js +6 -6
- package/src/field-521-fix.js +6 -6
- package/src/field-exclusion.js +12 -12
- package/src/field-exclusion.spec.js +4 -4
- package/src/field-structure.js +5 -5
- package/src/fields-present.js +1 -1
- package/src/fields-present.spec.js +1 -1
- package/src/fix-33X.js +5 -5
- package/src/fix-country-codes.js +3 -3
- package/src/fix-language-codes.js +10 -9
- package/src/fixRelatorTerms.js +8 -8
- package/src/fixed-fields.js +3 -3
- package/src/identical-fields.js +3 -3
- package/src/indicator-fixes.js +15 -15
- package/src/isbn-issn.js +11 -11
- package/src/item-language.js +10 -10
- package/src/merge-fields/counterpartField.js +7 -7
- package/src/merge-fields/index.js +3 -3
- package/src/merge-fields/mergeConstraints.js +1 -1
- package/src/merge-fields/mergeField.js +16 -17
- package/src/merge-fields/mergeIndicator.js +5 -5
- package/src/merge-fields/mergeOrAddPostprocess.js +9 -9
- package/src/merge-fields/mergeOrAddSubfield.js +6 -6
- package/src/merge-fields/mergeSubfield.js +8 -8
- package/src/merge-fields/removeDuplicateSubfields.js +1 -2
- package/src/merge-fields/worldKnowledge.js +1 -1
- package/src/mergeField500Lisapainokset.js +0 -2
- package/src/mergeRelatorTermFields.js +3 -3
- package/src/modernize-502.js +6 -6
- package/src/multiple-subfield-0.js +4 -4
- package/src/non-breaking-space.js +0 -2
- package/src/normalize-dashes.js +4 -4
- package/src/normalize-identifiers.js +6 -6
- package/src/normalize-qualifying-information.js +4 -4
- package/src/normalize-utf8-diacritics.js +7 -7
- package/src/normalizeFieldForComparison.js +20 -20
- package/src/normalizeSubfieldValueForComparison.js +1 -1
- package/src/prepublicationUtils.js +3 -3
- package/src/punctuation/index.js +29 -29
- package/src/punctuation2.js +10 -10
- package/src/reindexSubfield6OccurenceNumbers.js +9 -9
- package/src/removeDuplicateDataFields.js +21 -23
- package/src/removeInferiorDataFields.js +19 -19
- package/src/resolvable-ext-references-melinda.js +8 -8
- package/src/resolveOrphanedSubfield6s.js +9 -9
- package/src/sanitize-vocabulary-source-codes.js +8 -8
- package/src/sort-tags.js +2 -2
- package/src/sortFields.js +6 -6
- package/src/sortRelatorTerms.js +5 -5
- package/src/sortSubfields.js +6 -6
- package/src/stripPunctuation.js +2 -2
- package/src/subfield-exclusion.js +11 -11
- package/src/subfield6Utils.js +11 -11
- package/src/subfield8Utils.js +6 -9
- package/src/subfieldValueNormalizations.js +5 -7
- package/src/sync-007-and-300.js +8 -8
- package/src/translate-terms.js +3 -5
- package/src/typeOfDate-008.js +3 -3
- package/src/unicode-decomposition.js +1 -1
- package/src/update-field-540.js +6 -6
- package/src/urn.js +8 -6
- package/src/utils.js +8 -8
- package/.eslintignore +0 -1
|
@@ -36,7 +36,7 @@ export default function () {
|
|
|
36
36
|
|
|
37
37
|
const res = {message: duplicates};
|
|
38
38
|
|
|
39
|
-
res.valid = res.message.length < 1;
|
|
39
|
+
res.valid = res.message.length < 1;
|
|
40
40
|
return res;
|
|
41
41
|
}
|
|
42
42
|
}
|
|
@@ -46,7 +46,7 @@ function deriveInferiorChains(fields, record) {
|
|
|
46
46
|
//nvdebug(`======= GOT ${fields.length} FIELDS TO CHAINIFY`);
|
|
47
47
|
const hash = {};
|
|
48
48
|
|
|
49
|
-
fields.forEach(f => fieldToChainToDeletables(f));
|
|
49
|
+
fields.forEach(f => fieldToChainToDeletables(f)); // eslint-disable-line array-callback-return
|
|
50
50
|
|
|
51
51
|
return hash;
|
|
52
52
|
|
|
@@ -65,8 +65,8 @@ function deriveInferiorChains(fields, record) {
|
|
|
65
65
|
const arr = deriveChainDeletables([chainAsString]);
|
|
66
66
|
//nvdebug(`GOT ${arr.length} DELETABLES FOR ${chainAsString}`);
|
|
67
67
|
arr.forEach(val => {
|
|
68
|
-
if (!(val in hash)) {
|
|
69
|
-
hash[val] = field;
|
|
68
|
+
if (!(val in hash)) {
|
|
69
|
+
hash[val] = field;
|
|
70
70
|
}
|
|
71
71
|
});
|
|
72
72
|
}
|
|
@@ -78,7 +78,7 @@ function deriveInferiorChains(fields, record) {
|
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
// Fix MRA-476 (part 1): one $6 value can be worse than the other
|
|
81
|
-
const withoutScriptIdentificationCode = chainAsString.replace(/( ‡6 [0-9X][0-9][0-9]-(?:XX|[0-9]+))\/[^ ]+/u, '$1');
|
|
81
|
+
const withoutScriptIdentificationCode = chainAsString.replace(/( ‡6 [0-9X][0-9][0-9]-(?:XX|[0-9]+))\/[^ ]+/u, '$1');
|
|
82
82
|
|
|
83
83
|
// Remove keepless versions:
|
|
84
84
|
const keepless = chainAsString.replace(/ ‡9 [A-Z]+<KEEP>/u, '');
|
|
@@ -150,15 +150,15 @@ export function removeInferiorChains(record, fix = true) {
|
|
|
150
150
|
const triggeringChain = fieldToChain(triggeringField, record);
|
|
151
151
|
|
|
152
152
|
// If the inferior (deletable) chain is 1XX-based, convert the triggering better chain from 7XX to 1XX:
|
|
153
|
-
if (chainContains1XX(chain)) {
|
|
154
|
-
triggeringChain.forEach(f => sevenToOne(f, triggeringChain));
|
|
153
|
+
if (chainContains1XX(chain)) {
|
|
154
|
+
triggeringChain.forEach(f => sevenToOne(f, triggeringChain)); // eslint-disable-line array-callback-return
|
|
155
155
|
}
|
|
156
156
|
//nvdebug(`iRIS6C: ${chainAsString}`);
|
|
157
157
|
const deletedString = fieldsToString(chain);
|
|
158
158
|
const message = `DEL: '${deletedString}' REASON: '${fieldsToString(triggeringChain)}'`;
|
|
159
|
-
if (fix) {
|
|
159
|
+
if (fix) {
|
|
160
160
|
//nvdebug(`INFERIOR $6 CHAIN REMOVAL: ${message}}`, debug);
|
|
161
|
-
chain.forEach(field => record.removeField(field));
|
|
161
|
+
chain.forEach(field => record.removeField(field)); // eslint-disable-line array-callback-return
|
|
162
162
|
}
|
|
163
163
|
return innerRemoveInferiorChains(remainingFields, [...deletedStringsArray, message]);
|
|
164
164
|
}
|
|
@@ -174,9 +174,9 @@ export function removeInferiorChains(record, fix = true) {
|
|
|
174
174
|
}
|
|
175
175
|
// Retag field 7XX as 1XX and fix corresponding occurrence numbers as well:
|
|
176
176
|
const pairs = fieldGetOccurrenceNumberPairs(field, chain);
|
|
177
|
-
field.tag = `1${field.tag.substring(1)}`;
|
|
177
|
+
field.tag = `1${field.tag.substring(1)}`;
|
|
178
178
|
// There should always be one pair, but I'm not sanity-checking this
|
|
179
|
-
pairs.forEach(pairedField => fieldSevenToOneOccurrenceNumber(pairedField));
|
|
179
|
+
pairs.forEach(pairedField => fieldSevenToOneOccurrenceNumber(pairedField)); // eslint-disable-line array-callback-return
|
|
180
180
|
}
|
|
181
181
|
|
|
182
182
|
}
|
|
@@ -186,7 +186,7 @@ function getIdentifierlessAndKeeplessSubsets(fieldAsString) {
|
|
|
186
186
|
// The rules below are not perfect (in complex cases they don't catch all permutations), but good enough:
|
|
187
187
|
// Remove identifier(s) (MELKEHITYS-2383-ish):
|
|
188
188
|
|
|
189
|
-
const identifierlessString = fieldAsString.replace(/ ‡[01] [^‡]+($| ‡)/u, '$1');
|
|
189
|
+
const identifierlessString = fieldAsString.replace(/ ‡[01] [^‡]+($| ‡)/u, '$1');
|
|
190
190
|
const keeplessString = fieldAsString.replace(/ ‡9 [A-Z]+<KEEP>/u, '');
|
|
191
191
|
|
|
192
192
|
return [identifierlessString, keeplessString].filter(val => val !== fieldAsString);
|
|
@@ -208,7 +208,7 @@ function deriveIndividualDeletables490(todoList, deletables = []) {
|
|
|
208
208
|
// Without final $v or $x:
|
|
209
209
|
const withoutFinalVOrX = fieldAsString.replace(/ *[;,] ‡[vx] [^‡]+$/u, '');
|
|
210
210
|
// Add intermediate $x-less version
|
|
211
|
-
const xless = fieldAsString.replace(/, ‡x [^‡]+(, ‡x| ; ‡v)/u, '$1');
|
|
211
|
+
const xless = fieldAsString.replace(/, ‡x [^‡]+(, ‡x| ; ‡v)/u, '$1');
|
|
212
212
|
|
|
213
213
|
// Add $xv-less version (handled by recursion?)
|
|
214
214
|
const xvless = fieldAsString.replace(/, ‡x [^‡]+ ‡v [^‡]+$/u, '');
|
|
@@ -219,7 +219,7 @@ function deriveIndividualDeletables490(todoList, deletables = []) {
|
|
|
219
219
|
const arr = [sixless, withoutFinalVOrX, xless, xvless, modifiedInd2].filter(val => val !== fieldAsString);
|
|
220
220
|
|
|
221
221
|
/*
|
|
222
|
-
if (arr.length) {
|
|
222
|
+
if (arr.length) {
|
|
223
223
|
nvdebug(`${arr.length} derivation(s) for ${fieldAsString}`);
|
|
224
224
|
nvdebug(arr.join('\n'));
|
|
225
225
|
}
|
|
@@ -262,7 +262,7 @@ function deriveIndividualDeletables(record) {
|
|
|
262
262
|
|
|
263
263
|
const accentless = getAccentlessVersion(currString);
|
|
264
264
|
const d490 = deriveIndividualDeletables490([currString]);
|
|
265
|
-
const subsets = getIdentifierlessAndKeeplessSubsets(currString);
|
|
265
|
+
const subsets = getIdentifierlessAndKeeplessSubsets(currString);
|
|
266
266
|
const moreToDo = [...accentless, ...d490, ...subsets];
|
|
267
267
|
|
|
268
268
|
|
|
@@ -301,7 +301,7 @@ function deriveIndividualDeletables(record) {
|
|
|
301
301
|
replace(/ ‡[rg] /gu, ' '). // remove $r and $g subfields
|
|
302
302
|
replace(/ ‡t /u, ' ‡a '). // change first $t to $a
|
|
303
303
|
// ind2: '1' => '#':
|
|
304
|
-
replace(/^505 (.)0/u, '505 $1#');
|
|
304
|
+
replace(/^505 (.)0/u, '505 $1#');
|
|
305
305
|
if (tmp !== currString) {
|
|
306
306
|
return processTodoList([tmp, ...stillToDo, ...moreToDo], [...deletables, tmp]);
|
|
307
307
|
}
|
|
@@ -318,11 +318,11 @@ function deriveIndividualDeletables(record) {
|
|
|
318
318
|
|
|
319
319
|
// MET-381: remove occurence number TAG-00, if TAG-NN existists
|
|
320
320
|
if (currString.match(/^880.* ‡6 [0-9][0-9][0-9]-(?:[1-9][0-9]|0[1-9])/u)) {
|
|
321
|
-
const tmp = currString.replace(/( ‡6 [0-9][0-9][0-9])-[0-9]+/u, '$1-00');
|
|
321
|
+
const tmp = currString.replace(/( ‡6 [0-9][0-9][0-9])-[0-9]+/u, '$1-00');
|
|
322
322
|
//nvdebug(`MET-381: ADD TO DELETABLES: '${tmp}'`);
|
|
323
323
|
//deletableStringsArray.push(tmp);
|
|
324
324
|
if (tmp.match(/ ‡6 [0-9][0-9][0-9]-00\/[^ ]+ /u)) {
|
|
325
|
-
const tmp2 = tmp.replace(/( ‡6 [0-9][0-9][0-9]-00)[^ ]+/u, '$1');
|
|
325
|
+
const tmp2 = tmp.replace(/( ‡6 [0-9][0-9][0-9]-00)[^ ]+/u, '$1');
|
|
326
326
|
//nvdebug(`MET-381: ADD TO DELETABLES: '${tmp2}'`);
|
|
327
327
|
return processTodoList([...stillToDo, ...moreToDo], [...deletables, tmp, tmp2]);
|
|
328
328
|
}
|
|
@@ -411,7 +411,7 @@ export function removeIndividualInferiorDatafields(record, fix = true) { // No $
|
|
|
411
411
|
|
|
412
412
|
const deletedFieldsAsStrings = hits.map(f => fieldToString(f));
|
|
413
413
|
|
|
414
|
-
if (fix) {
|
|
414
|
+
if (fix) {
|
|
415
415
|
hits.forEach(field => {
|
|
416
416
|
//nvdebug(`Remove inferior field: ${fieldToString(field)}`, debug);
|
|
417
417
|
record.removeField(field);
|
|
@@ -22,8 +22,8 @@ export default function ({endpoint, prefixPattern, fields}) {
|
|
|
22
22
|
// Filter matching field keys from record.fields
|
|
23
23
|
const subfields = record.fields.reduce((prev, current) => {
|
|
24
24
|
Object.keys(fields).forEach(key => {
|
|
25
|
-
if (key === current.tag) {
|
|
26
|
-
prev.push(current);
|
|
25
|
+
if (key === current.tag) {
|
|
26
|
+
prev.push(current);
|
|
27
27
|
}
|
|
28
28
|
});
|
|
29
29
|
return prev;
|
|
@@ -32,10 +32,10 @@ export default function ({endpoint, prefixPattern, fields}) {
|
|
|
32
32
|
// Filter matching objects from subfields
|
|
33
33
|
const matchingTags = [...subfields].reduce((prev, current) => {
|
|
34
34
|
Object.keys(fields).forEach(key => {
|
|
35
|
-
if (key === current.tag) {
|
|
35
|
+
if (key === current.tag) {
|
|
36
36
|
current.subfields.filter(item => {
|
|
37
|
-
if (Object.values(fields[key]).filter(value => value === item.code)[0]) {
|
|
38
|
-
prev.push({tag: current.tag, code: item.code, value: item.value});
|
|
37
|
+
if (Object.values(fields[key]).filter(value => value === item.code)[0]) {
|
|
38
|
+
prev.push({tag: current.tag, code: item.code, value: item.value});
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
return prev;
|
|
@@ -47,9 +47,9 @@ export default function ({endpoint, prefixPattern, fields}) {
|
|
|
47
47
|
|
|
48
48
|
// Matching prefixPattern is removed from object value field.
|
|
49
49
|
matchingTags.forEach(obj => {
|
|
50
|
-
if (prefixPattern.test(obj.value)) {
|
|
51
|
-
obj.value = obj.value.replace(prefixPattern, '');
|
|
52
|
-
removedPrefixes.push(obj);
|
|
50
|
+
if (prefixPattern.test(obj.value)) {
|
|
51
|
+
obj.value = obj.value.replace(prefixPattern, '');
|
|
52
|
+
removedPrefixes.push(obj);
|
|
53
53
|
}
|
|
54
54
|
});
|
|
55
55
|
return resolveValidation(removedPrefixes);
|
|
@@ -15,12 +15,12 @@ export default function () {
|
|
|
15
15
|
function fix(record) {
|
|
16
16
|
nvdebug('Fix SF6 orphaned occurrence numbers');
|
|
17
17
|
const res = {message: [], fix: [], valid: true};
|
|
18
|
-
//message.fix = [];
|
|
18
|
+
//message.fix = [];
|
|
19
19
|
|
|
20
20
|
// This can not really fail...
|
|
21
21
|
recordFixSubfield6OccurrenceNumbers(record);
|
|
22
22
|
|
|
23
|
-
//message.valid = !(message.message.length >= 1);
|
|
23
|
+
//message.valid = !(message.message.length >= 1);
|
|
24
24
|
return res;
|
|
25
25
|
}
|
|
26
26
|
|
|
@@ -33,10 +33,10 @@ export default function () {
|
|
|
33
33
|
|
|
34
34
|
const res = {message: []};
|
|
35
35
|
|
|
36
|
-
if (orphanedFields.length > 0) {
|
|
37
|
-
res.message = [`${orphanedFields.length} orphaned occurrence number field(s) detected`];
|
|
36
|
+
if (orphanedFields.length > 0) {
|
|
37
|
+
res.message = [`${orphanedFields.length} orphaned occurrence number field(s) detected`];
|
|
38
38
|
}
|
|
39
|
-
res.valid = res.message.length < 1;
|
|
39
|
+
res.valid = res.message.length < 1;
|
|
40
40
|
return res;
|
|
41
41
|
}
|
|
42
42
|
}
|
|
@@ -45,12 +45,12 @@ export function recordFixSubfield6OccurrenceNumbers(record) {
|
|
|
45
45
|
const fieldsContainingSubfield6 = record.fields.filter(field => fieldHasSubfield(field, '6'));
|
|
46
46
|
const orphanedFields = getOrphanedFields(fieldsContainingSubfield6);
|
|
47
47
|
|
|
48
|
-
orphanedFields.forEach(field => fieldFixOrphanedSubfields(field));
|
|
48
|
+
orphanedFields.forEach(field => fieldFixOrphanedSubfields(field)); // eslint-disable-line array-callback-return
|
|
49
49
|
|
|
50
50
|
function fieldFixOrphanedSubfields(field) {
|
|
51
51
|
// Field 880: orphaned $6 subfields: occurrence number is changed to '00':
|
|
52
52
|
if (field.tag === '880') {
|
|
53
|
-
field.subfields.forEach(sf => field880FixOrphanedSubfield(sf));
|
|
53
|
+
field.subfields.forEach(sf => field880FixOrphanedSubfield(sf)); // eslint-disable-line array-callback-return
|
|
54
54
|
return;
|
|
55
55
|
}
|
|
56
56
|
// Non-880 fields get their orphaned $6s removed:
|
|
@@ -59,7 +59,7 @@ export function recordFixSubfield6OccurrenceNumbers(record) {
|
|
|
59
59
|
record.removeField(field);
|
|
60
60
|
return;
|
|
61
61
|
}
|
|
62
|
-
field.subfields = remainingSubfields;
|
|
62
|
+
field.subfields = remainingSubfields;
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
function field880FixOrphanedSubfield(subfield) {
|
|
@@ -78,7 +78,7 @@ function findPairForSubfield6OccurrenceNumber(subfield6, myTag, candPairFields)
|
|
|
78
78
|
return undefined;
|
|
79
79
|
}
|
|
80
80
|
nvdebug(`LOOKING FOR PAIR: ${myTag} ${subfieldToString(subfield6)}`);
|
|
81
|
-
candPairFields.forEach(field => fieldToString(field));
|
|
81
|
+
candPairFields.forEach(field => fieldToString(field)); // eslint-disable-line array-callback-return
|
|
82
82
|
|
|
83
83
|
// Only valid $6 value that fails to map to another field is iffy...
|
|
84
84
|
const referredTag = subfield6.value.substring(0, 3);
|
|
@@ -15,7 +15,7 @@ export default function () {
|
|
|
15
15
|
function fix(record) {
|
|
16
16
|
const res = {message: [], fix: [], valid: true};
|
|
17
17
|
const relevantFields = getRelevantFields(record);
|
|
18
|
-
relevantFields.forEach(f => fieldSanitizeVocabularySourceCode(f));
|
|
18
|
+
relevantFields.forEach(f => fieldSanitizeVocabularySourceCode(f)); // eslint-disable-line array-callback-return
|
|
19
19
|
return res;
|
|
20
20
|
}
|
|
21
21
|
|
|
@@ -23,9 +23,9 @@ export default function () {
|
|
|
23
23
|
const res = {message: []};
|
|
24
24
|
const relevantFields = getRelevantFields(record);
|
|
25
25
|
|
|
26
|
-
relevantFields.forEach(field => validateField(field, res));
|
|
26
|
+
relevantFields.forEach(field => validateField(field, res)); // eslint-disable-line array-callback-return
|
|
27
27
|
|
|
28
|
-
res.valid = !(res.message.length >= 1);
|
|
28
|
+
res.valid = !(res.message.length >= 1);
|
|
29
29
|
return res;
|
|
30
30
|
}
|
|
31
31
|
|
|
@@ -39,12 +39,12 @@ export default function () {
|
|
|
39
39
|
const normalizedField = fieldSanitizeVocabularySourceCode(clone(field));
|
|
40
40
|
const mod = fieldToString(normalizedField);
|
|
41
41
|
if (orig !== mod) { // Fail as the input is "broken"/"crap"/sumthing
|
|
42
|
-
res.message.push(`FIXABLE: '${orig}' => '${mod}'`);
|
|
42
|
+
res.message.push(`FIXABLE: '${orig}' => '${mod}'`);
|
|
43
43
|
return;
|
|
44
44
|
}
|
|
45
45
|
// Handle illegal values here
|
|
46
46
|
if (fieldHasUnfixableVocabularySourceCode(field)) {
|
|
47
|
-
res.message.push(`CAN'T BE FIXED AUTOMATICALLY: '${orig}'`);
|
|
47
|
+
res.message.push(`CAN'T BE FIXED AUTOMATICALLY: '${orig}'`);
|
|
48
48
|
return;
|
|
49
49
|
}
|
|
50
50
|
return;
|
|
@@ -52,7 +52,7 @@ export default function () {
|
|
|
52
52
|
|
|
53
53
|
|
|
54
54
|
function fieldSanitizeVocabularySourceCode(field) {
|
|
55
|
-
field.subfields.forEach(sf => subfieldSanitizeVocabularySourceCode(sf));
|
|
55
|
+
field.subfields.forEach(sf => subfieldSanitizeVocabularySourceCode(sf)); // eslint-disable-line array-callback-return
|
|
56
56
|
return field;
|
|
57
57
|
}
|
|
58
58
|
|
|
@@ -60,7 +60,7 @@ export default function () {
|
|
|
60
60
|
if (subfield.code !== '2') {
|
|
61
61
|
return;
|
|
62
62
|
}
|
|
63
|
-
subfield.value = stringFixVocabularySourceCode(subfield.value);
|
|
63
|
+
subfield.value = stringFixVocabularySourceCode(subfield.value);
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
}
|
|
@@ -72,7 +72,7 @@ function stringFixVocabularySourceCode(value) {
|
|
|
72
72
|
// Try to remove spaces, change '//' to '/' and remove final '.' and '/':
|
|
73
73
|
const tmp = value.replace(/ /ug, '')
|
|
74
74
|
.replace(/\/+/ug, '/')
|
|
75
|
-
.replace(/(.)[./]$/gu, '$1')
|
|
75
|
+
.replace(/(.)[./]$/gu, '$1')
|
|
76
76
|
.replace(/^yso-(?:aika|paikat)\//u, 'yso/'); // IMP-HELMET crap. Also, they still have a '.' at the end of $a...
|
|
77
77
|
|
|
78
78
|
// NB! Use the modified value ONLY if the result (tmp variable) is a legal subfield code...
|
package/src/sort-tags.js
CHANGED
|
@@ -27,8 +27,8 @@ function sortPatternFields(record, tagPattern) {
|
|
|
27
27
|
const matchingTags = record.fields.map(field => tagPattern.some(pattern => pattern.test(field.tag)) ? field : null).filter(tag => tag);
|
|
28
28
|
const sortedArray = sortFields(record.fields);
|
|
29
29
|
const fixedArray = sortedArray.filter(field => !tagPattern.some(pattern => pattern.test(field.tag)));
|
|
30
|
-
fixedArray.splice(index(sortedArray, tagPattern), 0, ...matchingTags);
|
|
31
|
-
record.fields = fixedArray;
|
|
30
|
+
fixedArray.splice(index(sortedArray, tagPattern), 0, ...matchingTags);
|
|
31
|
+
record.fields = fixedArray;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
function sortFields(fields) {
|
package/src/sortFields.js
CHANGED
|
@@ -22,7 +22,7 @@ export default function () {
|
|
|
22
22
|
function fix(record) {
|
|
23
23
|
const res = {message: [], fix: [], valid: true};
|
|
24
24
|
|
|
25
|
-
record.fields.sort(fieldOrderComparator);
|
|
25
|
+
record.fields.sort(fieldOrderComparator);
|
|
26
26
|
|
|
27
27
|
return res;
|
|
28
28
|
}
|
|
@@ -31,16 +31,16 @@ export default function () {
|
|
|
31
31
|
const res = {message: []};
|
|
32
32
|
|
|
33
33
|
const fields = record.fields.map(f => clone(f));
|
|
34
|
-
fields.sort(fieldOrderComparator);
|
|
34
|
+
fields.sort(fieldOrderComparator);
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
const relocatedFields = fields.filter((f, i) => fieldToString(f) !== fieldToString(record.fields[i]));
|
|
38
38
|
|
|
39
|
-
if (relocatedFields.length > 0) {
|
|
40
|
-
res.message.push(`${relocatedFields.length} field(s) in new places`);
|
|
39
|
+
if (relocatedFields.length > 0) {
|
|
40
|
+
res.message.push(`${relocatedFields.length} field(s) in new places`);
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
res.valid = !(res.message.length >= 1);
|
|
43
|
+
res.valid = !(res.message.length >= 1);
|
|
44
44
|
return res;
|
|
45
45
|
}
|
|
46
46
|
}
|
|
@@ -217,7 +217,7 @@ export function fieldOrderComparator(fieldA, fieldB) {
|
|
|
217
217
|
return globalFieldOrderComparator(fieldA, fieldB, sorterFunctions);
|
|
218
218
|
}
|
|
219
219
|
|
|
220
|
-
function sortByIndexTerms(fieldA, fieldB) {
|
|
220
|
+
function sortByIndexTerms(fieldA, fieldB) {
|
|
221
221
|
|
|
222
222
|
const indexTermFields = ['600', '610', '611', '630', '648', '650', '651', '652', '653', '654', '655', '656', '657', '658', '659', '662'];
|
|
223
223
|
|
package/src/sortRelatorTerms.js
CHANGED
|
@@ -41,12 +41,12 @@ export default function () {
|
|
|
41
41
|
sortAdjacentRelatorTerms(clonedField, typeOfMaterial);
|
|
42
42
|
const clonedFieldAsString = fieldToString(clonedField);
|
|
43
43
|
const fieldAsString = fieldToString(field);
|
|
44
|
-
if (fieldAsString !== clonedFieldAsString) {
|
|
45
|
-
res.message.push(`${fieldAsString} => ${clonedFieldAsString}`);
|
|
44
|
+
if (fieldAsString !== clonedFieldAsString) {
|
|
45
|
+
res.message.push(`${fieldAsString} => ${clonedFieldAsString}`);
|
|
46
46
|
}
|
|
47
47
|
});
|
|
48
48
|
|
|
49
|
-
res.valid = !(res.message.length >= 1);
|
|
49
|
+
res.valid = !(res.message.length >= 1);
|
|
50
50
|
return res;
|
|
51
51
|
}
|
|
52
52
|
}
|
|
@@ -103,8 +103,8 @@ function swapRelatorTermSubfields(field, typeOfMaterial = undefined) {
|
|
|
103
103
|
|
|
104
104
|
// Swap:
|
|
105
105
|
const tmp = field.subfields[index - 1];
|
|
106
|
-
field.subfields[index - 1] = field.subfields[index];
|
|
107
|
-
field.subfields[index] = tmp;
|
|
106
|
+
field.subfields[index - 1] = field.subfields[index];
|
|
107
|
+
field.subfields[index] = tmp;
|
|
108
108
|
fieldFixPunctuation(field);
|
|
109
109
|
return true;
|
|
110
110
|
}
|
package/src/sortSubfields.js
CHANGED
|
@@ -54,12 +54,12 @@ export default function (defaultTagPattern) {
|
|
|
54
54
|
sortAdjacentSubfields(clonedField);
|
|
55
55
|
const clonedFieldAsString = fieldToString(clonedField);
|
|
56
56
|
const fieldAsString = fieldToString(field);
|
|
57
|
-
if (fieldAsString !== clonedFieldAsString) {
|
|
58
|
-
res.message.push(clonedFieldAsString);
|
|
57
|
+
if (fieldAsString !== clonedFieldAsString) {
|
|
58
|
+
res.message.push(clonedFieldAsString);
|
|
59
59
|
}
|
|
60
60
|
});
|
|
61
61
|
|
|
62
|
-
res.valid = !(res.message.length >= 1);
|
|
62
|
+
res.valid = !(res.message.length >= 1);
|
|
63
63
|
return res;
|
|
64
64
|
}
|
|
65
65
|
}
|
|
@@ -157,8 +157,8 @@ function swapSubfields(field, sortOrder) {
|
|
|
157
157
|
}
|
|
158
158
|
// Swap:
|
|
159
159
|
const tmp = field.subfields[index - 1];
|
|
160
|
-
field.subfields[index - 1] = sf;
|
|
161
|
-
field.subfields[index] = tmp;
|
|
160
|
+
field.subfields[index - 1] = sf;
|
|
161
|
+
field.subfields[index] = tmp;
|
|
162
162
|
return true;
|
|
163
163
|
});
|
|
164
164
|
|
|
@@ -195,7 +195,7 @@ function moveSubfield6ToTheFront(field) {
|
|
|
195
195
|
// https://www.loc.gov/marc/bibliographic/ecbdcntf.html says "Subfield $6 is always the first subfield in the field."
|
|
196
196
|
const sf6s = field.subfields.filter(sf => sf.code === '6');
|
|
197
197
|
const others = field.subfields.filter(sf => sf.code !== '6');
|
|
198
|
-
field.subfields = [...sf6s, ...others];
|
|
198
|
+
field.subfields = [...sf6s, ...others];
|
|
199
199
|
}
|
|
200
200
|
|
|
201
201
|
export function sortAdjacentSubfields(field, externalSortOrder = []) {
|
package/src/stripPunctuation.js
CHANGED
|
@@ -20,7 +20,7 @@ export default function () {
|
|
|
20
20
|
function fix(record) {
|
|
21
21
|
nvdebug('Strip punctuation to data fields: fixer');
|
|
22
22
|
const res = {message: [], fix: [], valid: true};
|
|
23
|
-
record.fields.forEach(f => fieldStripPunctuation(f));
|
|
23
|
+
record.fields.forEach(f => fieldStripPunctuation(f)); // eslint-disable-line array-callback-return
|
|
24
24
|
return res;
|
|
25
25
|
}
|
|
26
26
|
|
|
@@ -36,7 +36,7 @@ export default function () {
|
|
|
36
36
|
|
|
37
37
|
const res = {message: messages};
|
|
38
38
|
|
|
39
|
-
res.valid = res.message.length < 1;
|
|
39
|
+
res.valid = res.message.length < 1;
|
|
40
40
|
return res;
|
|
41
41
|
}
|
|
42
42
|
}
|
|
@@ -77,10 +77,10 @@ export default function (config) {
|
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
// Check subfields recursively
|
|
80
|
-
if (key === 'subfields') {
|
|
80
|
+
if (key === 'subfields') {
|
|
81
81
|
forEach(data, ([, subObj]) => {
|
|
82
82
|
// Console.log("subObj: ", subObj, " type: ", typeof subObj, !(Array.isArray(subObj)))
|
|
83
|
-
if (typeof subObj === 'object' && !Array.isArray(subObj)) {
|
|
83
|
+
if (typeof subObj === 'object' && !Array.isArray(subObj)) {
|
|
84
84
|
checkMandatory(spec[key], subObj);
|
|
85
85
|
|
|
86
86
|
forEach(subObj, ([subKey, subVal]) => {
|
|
@@ -128,7 +128,7 @@ export default function (config) {
|
|
|
128
128
|
|
|
129
129
|
// Configuration object not found from found element
|
|
130
130
|
return false;
|
|
131
|
-
})) {
|
|
131
|
+
})) {
|
|
132
132
|
// All configuration fields match, check if some subfields should be excluded.
|
|
133
133
|
confObj.subfields.forEach(subField => {
|
|
134
134
|
const excluded = [];
|
|
@@ -138,17 +138,17 @@ export default function (config) {
|
|
|
138
138
|
const subFieldCodeFine = subField.code && elemSub.code && subField.code.test(elemSub.code);
|
|
139
139
|
const subFieldValueFine = subField.value && elemSub.value && subField.value.test(elemSub.value);
|
|
140
140
|
if (subFieldCodeFine && (typeof subField.value === 'undefined' || subFieldValueFine)) {
|
|
141
|
-
if (fix) {
|
|
142
|
-
excluded.push(elemSub);
|
|
143
|
-
} else {
|
|
144
|
-
res.message.push(`Subfield $${element.tag}$$${elemSub.code}should be excluded`);
|
|
141
|
+
if (fix) {
|
|
142
|
+
excluded.push(elemSub);
|
|
143
|
+
} else {
|
|
144
|
+
res.message.push(`Subfield $${element.tag}$$${elemSub.code}should be excluded`);
|
|
145
145
|
}
|
|
146
146
|
}
|
|
147
147
|
});
|
|
148
148
|
|
|
149
|
-
excluded.forEach(sf => record.removeSubfield(sf, element));
|
|
149
|
+
excluded.forEach(sf => record.removeSubfield(sf, element)); // eslint-disable-line array-callback-return
|
|
150
150
|
// If no subfields remains, the whole field will be removed as well:
|
|
151
|
-
if (element.subfields && element.subfields.length === 0) {
|
|
151
|
+
if (element.subfields && element.subfields.length === 0) {
|
|
152
152
|
record.removeField(element);
|
|
153
153
|
}
|
|
154
154
|
});
|
|
@@ -158,8 +158,8 @@ export default function (config) {
|
|
|
158
158
|
|
|
159
159
|
// Fix does not send response
|
|
160
160
|
if (!fix) {
|
|
161
|
-
if (res.message.length > 0) {
|
|
162
|
-
res.valid = false;
|
|
161
|
+
if (res.message.length > 0) {
|
|
162
|
+
res.valid = false;
|
|
163
163
|
}
|
|
164
164
|
|
|
165
165
|
return res;
|
package/src/subfield6Utils.js
CHANGED
|
@@ -51,9 +51,9 @@ export function subfield6ResetOccurrenceNumber(subfield, occurrenceNumber) {
|
|
|
51
51
|
}
|
|
52
52
|
const occurrenceNumberAsString = typeof occurrenceNumber === 'number' ? intToOccurrenceNumberString(occurrenceNumber) : occurrenceNumber;
|
|
53
53
|
|
|
54
|
-
const newValue = subfield.value.substring(0, 4) + occurrenceNumberAsString + subfield6GetTail(subfield);
|
|
54
|
+
const newValue = subfield.value.substring(0, 4) + occurrenceNumberAsString + subfield6GetTail(subfield);
|
|
55
55
|
//nvdebug(`Set subfield $6 value from ${subfieldToString(subfield)} to ${newValue}`);
|
|
56
|
-
subfield.value = newValue;
|
|
56
|
+
subfield.value = newValue;
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
|
|
@@ -70,7 +70,7 @@ export function subfield6HasWantedTagAndOccurrenceNumber(subfield, tagAndOccurre
|
|
|
70
70
|
return false;
|
|
71
71
|
}
|
|
72
72
|
// We could also use generic code and go getTag()+'-'+getIndex() instead of regexp...
|
|
73
|
-
const key = subfield.value.replace(/^([0-9][0-9][0-9]-[0-9][0-9]+).*$/u, '$1');
|
|
73
|
+
const key = subfield.value.replace(/^([0-9][0-9][0-9]-[0-9][0-9]+).*$/u, '$1');
|
|
74
74
|
nvdebug(` Compare '${key}' vs '${tagAndOccurrenceNumber}'`);
|
|
75
75
|
return key === tagAndOccurrenceNumber;
|
|
76
76
|
}
|
|
@@ -99,7 +99,7 @@ export function fieldHasOccurrenceNumber(field, occurrenceNumber) {
|
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
export function fieldResetOccurrenceNumber(field, newOccurrenceNumber, oldOccurrenceNumber = undefined) {
|
|
102
|
-
field.subfields.forEach(subfield => innerReset(subfield));
|
|
102
|
+
field.subfields.forEach(subfield => innerReset(subfield)); // eslint-disable-line array-callback-return
|
|
103
103
|
|
|
104
104
|
function innerReset(subfield) {
|
|
105
105
|
// (Optional) Check that this is really the occurrence number we wan't to reseot
|
|
@@ -203,14 +203,14 @@ function subfieldSevenToOneOccurrenceNumber(subfield) {
|
|
|
203
203
|
if (subfield.code !== '6' || subfield.value.substring(0, 1) !== '7') {
|
|
204
204
|
return;
|
|
205
205
|
}
|
|
206
|
-
subfield.value = `1${subfield.value.substring(1)}`;
|
|
206
|
+
subfield.value = `1${subfield.value.substring(1)}`;
|
|
207
207
|
}
|
|
208
208
|
|
|
209
209
|
export function fieldSevenToOneOccurrenceNumber(field) {
|
|
210
210
|
if (field.tag !== '880') {
|
|
211
211
|
return;
|
|
212
212
|
}
|
|
213
|
-
field.subfields.forEach(sf => subfieldSevenToOneOccurrenceNumber(sf));
|
|
213
|
+
field.subfields.forEach(sf => subfieldSevenToOneOccurrenceNumber(sf)); // eslint-disable-line array-callback-return
|
|
214
214
|
}
|
|
215
215
|
|
|
216
216
|
|
|
@@ -223,7 +223,7 @@ export function fieldGetOccurrenceNumberPairs(field, candFields) {
|
|
|
223
223
|
return pairs;
|
|
224
224
|
}
|
|
225
225
|
nvdebug(`${pairs.length} PAIR(S) FOUND FOR '${fieldToString(field)}'`);
|
|
226
|
-
pairs.forEach(pairedField => nvdebug(` '${fieldToString(pairedField)}'`));
|
|
226
|
+
pairs.forEach(pairedField => nvdebug(` '${fieldToString(pairedField)}'`)); // eslint-disable-line array-callback-return
|
|
227
227
|
return pairs;
|
|
228
228
|
}
|
|
229
229
|
|
|
@@ -355,7 +355,7 @@ function guessTargetLinkingNumber(fields, defaultTargetLinkingNumber) {
|
|
|
355
355
|
return defaultTargetLinkingNumber;
|
|
356
356
|
}
|
|
357
357
|
const linkingNumbers = fieldsGetAllSubfield8LinkingNumbers(fields);
|
|
358
|
-
return linkingNumbers.length === 1 ? linkingNumbers[0] : 0;
|
|
358
|
+
return linkingNumbers.length === 1 ? linkingNumbers[0] : 0;
|
|
359
359
|
}
|
|
360
360
|
|
|
361
361
|
export function fieldsToNormalizedString(fields, defaultTargetLinkingNumber = 0, normalizeOccurrenceNumber = false, normalizeEntryTag = false) {
|
|
@@ -363,7 +363,7 @@ export function fieldsToNormalizedString(fields, defaultTargetLinkingNumber = 0,
|
|
|
363
363
|
|
|
364
364
|
nvdebug(`fieldsToNormalizedString: OCC: ${normalizeOccurrenceNumber}`);
|
|
365
365
|
const strings = fields.map(field => fieldToNormalizedString(field, targetLinkingNumber, normalizeOccurrenceNumber, normalizeEntryTag));
|
|
366
|
-
strings.sort();
|
|
366
|
+
strings.sort();
|
|
367
367
|
return strings.join('\t__SEPARATOR__\t');
|
|
368
368
|
}
|
|
369
369
|
|
|
@@ -482,7 +482,7 @@ export function get6s(field, candidateFields) { // NB! Convert field to fields!!
|
|
|
482
482
|
|
|
483
483
|
const relevantFields = candidateFields.filter(f => occurrenceNumbers.some(o => fieldHasOccurrenceNumber(f, o)));
|
|
484
484
|
nvdebug(`${fieldToString(field)}: $6-RELFIELDS FOUND: ${relevantFields.length}...`);
|
|
485
|
-
relevantFields.forEach(f => nvdebug(fieldToString(f)));
|
|
485
|
+
relevantFields.forEach(f => nvdebug(fieldToString(f))); // eslint-disable-line array-callback-return
|
|
486
486
|
return relevantFields;
|
|
487
487
|
}
|
|
488
488
|
|
|
@@ -493,5 +493,5 @@ export function resetSubfield6Tag(subfield, tag) {
|
|
|
493
493
|
// NB! mainly for 1XX<->7XX transfers
|
|
494
494
|
const newValue = `${tag}-${subfield.value.substring(4)}`;
|
|
495
495
|
nvdebug(`Set subfield $6 value from ${subfieldToString(subfield)} to ${newValue}`, debugDev);
|
|
496
|
-
subfield.value = newValue;
|
|
496
|
+
subfield.value = newValue;
|
|
497
497
|
}
|
package/src/subfield8Utils.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
import {fieldToString, nvdebug} from './utils';
|
|
5
5
|
|
|
6
|
-
const sf8Regexp = /^([1-9][0-9]*)(?:\.[0-9]+)?(?:\\[acprux])?$/u;
|
|
6
|
+
const sf8Regexp = /^([1-9][0-9]*)(?:\.[0-9]+)?(?:\\[acprux])?$/u;
|
|
7
7
|
|
|
8
8
|
export function isValidSubfield8(subfield) {
|
|
9
9
|
if (subfield.code !== '8') {
|
|
@@ -48,7 +48,6 @@ export function recordGetFieldsWithSubfield8LinkingNumber(record, linkingNumber)
|
|
|
48
48
|
|
|
49
49
|
|
|
50
50
|
export function fieldsGetAllSubfield8LinkingNumbers(fields) {
|
|
51
|
-
/* eslint-disable */
|
|
52
51
|
let subfield8LinkingNumbers = [];
|
|
53
52
|
fields.forEach(field => {
|
|
54
53
|
if (!field.subfields) {
|
|
@@ -64,8 +63,6 @@ export function fieldsGetAllSubfield8LinkingNumbers(fields) {
|
|
|
64
63
|
});
|
|
65
64
|
|
|
66
65
|
return subfield8LinkingNumbers;
|
|
67
|
-
/* eslint-enable */
|
|
68
|
-
|
|
69
66
|
}
|
|
70
67
|
|
|
71
68
|
export function recordGetAllSubfield8LinkingNumbers(record) {
|
|
@@ -80,19 +77,19 @@ export function add8s(fields, record) {
|
|
|
80
77
|
}
|
|
81
78
|
|
|
82
79
|
nvdebug(`Linking number(s): ${linkingNumbers.join(', ')}`);
|
|
83
|
-
linkingNumbers.forEach(number => collectLinkingNumberFields(number));
|
|
80
|
+
linkingNumbers.forEach(number => collectLinkingNumberFields(number)); // eslint-disable-line array-callback-return
|
|
84
81
|
|
|
85
|
-
fields.forEach(f => nvdebug(`AFTER ADDING 8s: '${fieldToString(f)}'`));
|
|
82
|
+
fields.forEach(f => nvdebug(`AFTER ADDING 8s: '${fieldToString(f)}'`)); // eslint-disable-line array-callback-return
|
|
86
83
|
|
|
87
84
|
return fields;
|
|
88
85
|
|
|
89
86
|
function collectLinkingNumberFields(linkingNumber) {
|
|
90
87
|
// Remove existing hits (to avoid field repetition):
|
|
91
|
-
fields = fields.filter(f => !fieldHasLinkingNumber(f, linkingNumber));
|
|
88
|
+
fields = fields.filter(f => !fieldHasLinkingNumber(f, linkingNumber));
|
|
92
89
|
// Add them and their "sisters" back:
|
|
93
90
|
const addableFields = record.fields.filter(f => fieldHasLinkingNumber(f, linkingNumber));
|
|
94
|
-
addableFields.forEach(f => nvdebug(`(RE-?)ADD ${fieldToString(f)}`));
|
|
95
|
-
fields = fields.concat(addableFields);
|
|
91
|
+
addableFields.forEach(f => nvdebug(`(RE-?)ADD ${fieldToString(f)}`)); // eslint-disable-line array-callback-return
|
|
92
|
+
fields = fields.concat(addableFields);
|
|
96
93
|
|
|
97
94
|
}
|
|
98
95
|
}
|