@natlibfi/marc-record-validators-melinda 11.6.6 → 11.6.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/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
|
@@ -27,8 +27,8 @@ const debugDev = debug.extend('dev');
|
|
|
27
27
|
function removeEnnakkotieto(field) {
|
|
28
28
|
const tmp = field.subfields.filter(subfield => !isEnnakkotietoSubfieldG(subfield));
|
|
29
29
|
// remove only iff some other subfield remains
|
|
30
|
-
if (tmp.length > 0) {
|
|
31
|
-
field.subfields = tmp;
|
|
30
|
+
if (tmp.length > 0) {
|
|
31
|
+
field.subfields = tmp;
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
|
|
@@ -44,11 +44,10 @@ function copyrightYearHack(baseRecord, baseField, sourceField) {
|
|
|
44
44
|
const value = sf.value.replace(/\.$/u, '');
|
|
45
45
|
baseRecord.insertField({'tag': '264', 'ind1': ' ', 'ind2': '4', 'subfields': [{'code': 'c', value}]});
|
|
46
46
|
// Modify original subfield:
|
|
47
|
-
sf.value = removeCopyright(sf.value);
|
|
47
|
+
sf.value = removeCopyright(sf.value);
|
|
48
48
|
});
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
// eslint-disable-next-line max-params
|
|
52
51
|
function mergeField2(baseRecord, baseField, sourceField, config, candFieldPairs880 = []) {
|
|
53
52
|
//// Identical fields
|
|
54
53
|
// No need to check every subfield separately.
|
|
@@ -60,9 +59,9 @@ function mergeField2(baseRecord, baseField, sourceField, config, candFieldPairs8
|
|
|
60
59
|
// If a base ennakkotieto is merged with real data, remove ennakkotieto subfield:
|
|
61
60
|
// (If our prepub normalizations are ok, this should not be needed.
|
|
62
61
|
// However, it's simple and works well enough, so let's keep it here.)
|
|
63
|
-
if (baseField.subfields?.find(sf => isEnnakkotietoSubfieldG(sf)) && !sourceField.subfields?.find(sf => isEnnakkotietoSubfieldG(sf))) {
|
|
62
|
+
if (baseField.subfields?.find(sf => isEnnakkotietoSubfieldG(sf)) && !sourceField.subfields?.find(sf => isEnnakkotietoSubfieldG(sf))) {
|
|
64
63
|
removeEnnakkotieto(baseField);
|
|
65
|
-
baseField.merged = 1;
|
|
64
|
+
baseField.merged = 1;
|
|
66
65
|
}
|
|
67
66
|
|
|
68
67
|
copyrightYearHack(baseRecord, baseField, sourceField);
|
|
@@ -91,7 +90,7 @@ function mergeField2(baseRecord, baseField, sourceField, config, candFieldPairs8
|
|
|
91
90
|
|
|
92
91
|
mergeOrAddSubfield(baseField, subfieldData, candFieldPairs880); // candSubfield);
|
|
93
92
|
const newValue = fieldToString(baseField);
|
|
94
|
-
if (originalBaseValue !== newValue) {
|
|
93
|
+
if (originalBaseValue !== newValue) {
|
|
95
94
|
nvdebug(` SUBFIELD MERGE RESULT: '${newValue}'`, debugDev);
|
|
96
95
|
//debug(` TODO: sort subfields, handle punctuation...`);
|
|
97
96
|
}
|
|
@@ -110,7 +109,7 @@ function skipMergeField(baseRecord, sourceField, config) {
|
|
|
110
109
|
// Skip duplicate field:
|
|
111
110
|
if (baseRecord.fields.some(baseField => !baseField.mergeCandidate && fieldsAreIdentical(sourceField, baseField))) {
|
|
112
111
|
nvdebug(`skipMergeField(): field '${fieldToString(sourceField)}' already exists! No merge required!`, debugDev);
|
|
113
|
-
sourceField.deleted = 1;
|
|
112
|
+
sourceField.deleted = 1;
|
|
114
113
|
return true;
|
|
115
114
|
}
|
|
116
115
|
|
|
@@ -145,9 +144,9 @@ function swapDataBetweenFields(field1, field2) {
|
|
|
145
144
|
return;
|
|
146
145
|
|
|
147
146
|
function swapNamedData(name) {
|
|
148
|
-
const data = field1[name];
|
|
149
|
-
field1[name] = field2[name];
|
|
150
|
-
field2[name] = data;
|
|
147
|
+
const data = field1[name];
|
|
148
|
+
field1[name] = field2[name];
|
|
149
|
+
field2[name] = data;
|
|
151
150
|
}
|
|
152
151
|
|
|
153
152
|
}
|
|
@@ -155,11 +154,11 @@ function swapDataBetweenFields(field1, field2) {
|
|
|
155
154
|
export function mergeField(baseRecord, sourceRecord, sourceField, config) {
|
|
156
155
|
nvdebug(`SELF: ${fieldToString(sourceField)}`, debugDev);
|
|
157
156
|
|
|
158
|
-
sourceField.mergeCandidate = true;
|
|
157
|
+
sourceField.mergeCandidate = true;
|
|
159
158
|
// skip duplicates and special cases:
|
|
160
159
|
if (skipMergeField(baseRecord, sourceField, config)) {
|
|
161
160
|
nvdebug(`mergeField(): don't merge '${fieldToString(sourceField)}'`, debugDev);
|
|
162
|
-
delete sourceField.mergeCandidate;
|
|
161
|
+
delete sourceField.mergeCandidate;
|
|
163
162
|
return false;
|
|
164
163
|
}
|
|
165
164
|
|
|
@@ -167,7 +166,7 @@ export function mergeField(baseRecord, sourceRecord, sourceField, config) {
|
|
|
167
166
|
const counterpartField = getCounterpart(baseRecord, sourceRecord, sourceField, config);
|
|
168
167
|
|
|
169
168
|
if (counterpartField) {
|
|
170
|
-
if (sourceRecordIsBetter(counterpartField, sourceField)) {
|
|
169
|
+
if (sourceRecordIsBetter(counterpartField, sourceField)) {
|
|
171
170
|
swapDataBetweenFields(counterpartField, sourceField);
|
|
172
171
|
}
|
|
173
172
|
|
|
@@ -175,13 +174,13 @@ export function mergeField(baseRecord, sourceRecord, sourceField, config) {
|
|
|
175
174
|
nvdebug(`mergeField(): Got counterpart: '${fieldToString(counterpartField)}'. Thus try merge...`, debugDev);
|
|
176
175
|
nvdebug(`PAIR: ${candFieldPairs880 ? fieldsToString(candFieldPairs880) : 'NADA'}`, debugDev);
|
|
177
176
|
mergeField2(baseRecord, counterpartField, sourceField, config, candFieldPairs880);
|
|
178
|
-
sourceField.deleted = 1;
|
|
179
|
-
delete sourceField.mergeCandidate;
|
|
177
|
+
sourceField.deleted = 1;
|
|
178
|
+
delete sourceField.mergeCandidate;
|
|
180
179
|
return true;
|
|
181
180
|
}
|
|
182
181
|
// NB! Counterpartless field is inserted to 7XX even if field.tag says 1XX:
|
|
183
182
|
debugDev(`mergeField(): No mergable counterpart found for '${fieldToString(sourceField)}'.`);
|
|
184
|
-
delete sourceField.mergeCandidate;
|
|
183
|
+
delete sourceField.mergeCandidate;
|
|
185
184
|
return false;
|
|
186
185
|
}
|
|
187
186
|
|
|
@@ -109,7 +109,7 @@ export function mergeIndicators(toField, fromField, config) {
|
|
|
109
109
|
|
|
110
110
|
// MRA-300: If source contains the (un)holy $9 FENNI<KEEP>, we prefer that value regardless of whatever...
|
|
111
111
|
if (!fieldIsFenniKept(toField) && fieldIsFenniKept(fromField)) {
|
|
112
|
-
toField.ind1 = fromField.ind1;
|
|
112
|
+
toField.ind1 = fromField.ind1;
|
|
113
113
|
return;
|
|
114
114
|
}
|
|
115
115
|
|
|
@@ -122,7 +122,7 @@ export function mergeIndicators(toField, fromField, config) {
|
|
|
122
122
|
const preferredValue = getPreferredValue(preferredValues, fromField.ind1, toField.ind1);
|
|
123
123
|
if (typeof preferredValue !== 'undefined') {
|
|
124
124
|
//nvdebug(`${preferredValue} WINS!`, debugDev);
|
|
125
|
-
toField.ind1 = preferredValue;
|
|
125
|
+
toField.ind1 = preferredValue;
|
|
126
126
|
return;
|
|
127
127
|
}
|
|
128
128
|
//nvdebug(`No winner found indicator 1: '${toField.ind1}' vs '${fromField.ind1}', keep '${toField.ind1}'`, debugDev);
|
|
@@ -151,8 +151,8 @@ export function mergeIndicators(toField, fromField, config) {
|
|
|
151
151
|
nvdebug(`Apply base 260->264 tag swap hack`, debugDev);
|
|
152
152
|
nvdebug(` ${fieldToString(toField)}\n ${fieldToString(fromField)}`, debugDev);
|
|
153
153
|
|
|
154
|
-
toField.tag = '264';
|
|
155
|
-
toField.ind2 = fromField.ind2;
|
|
154
|
+
toField.tag = '264';
|
|
155
|
+
toField.ind2 = fromField.ind2;
|
|
156
156
|
}
|
|
157
157
|
|
|
158
158
|
function mergeIndicator2(toField, fromField, config) {
|
|
@@ -175,7 +175,7 @@ export function mergeIndicators(toField, fromField, config) {
|
|
|
175
175
|
//nvdebug(` Try to merge indicator 2. Got preferred values '${preferredValues}'`, debugDev);
|
|
176
176
|
const preferredValue = getPreferredValue(preferredValues, fromField.ind2, toField.ind2);
|
|
177
177
|
if (typeof preferredValue !== 'undefined') {
|
|
178
|
-
toField.ind2 = preferredValue;
|
|
178
|
+
toField.ind2 = preferredValue;
|
|
179
179
|
return;
|
|
180
180
|
}
|
|
181
181
|
}
|
|
@@ -12,7 +12,7 @@ function postprocessBaseRecord(base) {
|
|
|
12
12
|
// NB! Relator terms are now expanded and translated already at preprocess stage!
|
|
13
13
|
|
|
14
14
|
// remove merge-specific information:
|
|
15
|
-
if (field.merged) {
|
|
15
|
+
if (field.merged) {
|
|
16
16
|
// Field level ideas about things that could be done here:
|
|
17
17
|
// - Fix indicators?
|
|
18
18
|
// Record level fixes should be implemented as validators/fixers
|
|
@@ -23,20 +23,20 @@ function postprocessBaseRecord(base) {
|
|
|
23
23
|
sortAdjacentRelatorTerms(field); // Sort $e subfields with each other
|
|
24
24
|
fieldFixPunctuation(field);
|
|
25
25
|
|
|
26
|
-
delete field.merged;
|
|
26
|
+
delete field.merged;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
if (field.useExternalEndPunctuation) {
|
|
30
|
-
delete field.useExternalEndPunctuation;
|
|
29
|
+
if (field.useExternalEndPunctuation) {
|
|
30
|
+
delete field.useExternalEndPunctuation;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
if (field.added) {
|
|
34
|
-
delete field.added;
|
|
33
|
+
if (field.added) {
|
|
34
|
+
delete field.added;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
/*
|
|
38
|
-
if (field.deleted) {
|
|
39
|
-
delete field.deleted;
|
|
38
|
+
if (field.deleted) {
|
|
39
|
+
delete field.deleted;
|
|
40
40
|
}
|
|
41
41
|
*/
|
|
42
42
|
|
|
@@ -46,7 +46,7 @@ function postprocessBaseRecord(base) {
|
|
|
46
46
|
|
|
47
47
|
function removeDeletedFields(record) {
|
|
48
48
|
// remove fields that are marked as deleted:
|
|
49
|
-
record.fields = record.fields.filter(f => !f.deleted);
|
|
49
|
+
record.fields = record.fields.filter(f => !f.deleted);
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
|
|
@@ -116,9 +116,9 @@ function mergeOrAddSubfieldNotRequired(targetField, candSubfieldData) {
|
|
|
116
116
|
function addSubfield(targetField, candSubfield) {
|
|
117
117
|
nvdebug(` Added subfield '${subfieldToString(candSubfield)}' to field`, debugDev);
|
|
118
118
|
// Add subfield to the end of all subfields. NB! Implement a separate function that does this + subfield reordering somehow...
|
|
119
|
-
targetField.subfields.push(candSubfield);
|
|
119
|
+
targetField.subfields.push(candSubfield);
|
|
120
120
|
|
|
121
|
-
targetField.merged = 1;
|
|
121
|
+
targetField.merged = 1;
|
|
122
122
|
|
|
123
123
|
setPunctuationFlag(targetField, candSubfield);
|
|
124
124
|
sortAdjacentSubfields(targetField);
|
|
@@ -129,7 +129,7 @@ function setPunctuationFlag(field, addedSubfield) {
|
|
|
129
129
|
if (isControlSubfieldCode(addedSubfield.code)) { // These are never punctuation related
|
|
130
130
|
return;
|
|
131
131
|
}
|
|
132
|
-
field.useExternalEndPunctuation = 1;
|
|
132
|
+
field.useExternalEndPunctuation = 1;
|
|
133
133
|
}
|
|
134
134
|
|
|
135
135
|
|
|
@@ -184,7 +184,7 @@ export function mergeOrAddSubfield(targetField, candSubfieldData, candFieldPairs
|
|
|
184
184
|
return;
|
|
185
185
|
}
|
|
186
186
|
nvdebug(` A: Yes. Add repeatable subfield '${subfieldToString(candSubfield)}'`, debugDev);
|
|
187
|
-
targetField.merged = 1;
|
|
187
|
+
targetField.merged = 1;
|
|
188
188
|
setPunctuationFlag(targetField, candSubfield);
|
|
189
189
|
addSubfield(targetField, candSubfield);
|
|
190
190
|
return;
|
|
@@ -196,7 +196,7 @@ export function mergeOrAddSubfield(targetField, candSubfieldData, candFieldPairs
|
|
|
196
196
|
function mergeSubfieldPostprocessor() {
|
|
197
197
|
if (original !== fieldToString(targetField)) {
|
|
198
198
|
nvdebug(` A: Merge. Subfield '${candSubfieldAsString}' replaces the original subfield.`, debugDev);
|
|
199
|
-
targetField.merged = 1;
|
|
199
|
+
targetField.merged = 1;
|
|
200
200
|
setPunctuationFlag(targetField, candSubfield);
|
|
201
201
|
return;
|
|
202
202
|
}
|
|
@@ -207,7 +207,7 @@ export function mergeOrAddSubfield(targetField, candSubfieldData, candFieldPairs
|
|
|
207
207
|
function addSubfieldWithPreviouslyUnseenSubfieldCode() {
|
|
208
208
|
if (!fieldHasSubfield(targetField, candSubfield.code)) {
|
|
209
209
|
nvdebug(` A: Yes. Add previously unseen subfield '${subfieldToString(candSubfield)}'`, debugDev);
|
|
210
|
-
targetField.merged = 1;
|
|
210
|
+
targetField.merged = 1;
|
|
211
211
|
setPunctuationFlag(targetField, candSubfield);
|
|
212
212
|
candFieldPairs880.forEach(pair => resetPaired880(pair, targetField, candSubfield));
|
|
213
213
|
addSubfield(targetField, candSubfield);
|
|
@@ -45,12 +45,12 @@ function anyYear(str) {
|
|
|
45
45
|
function replaceEntrysBirthAndDeathYear(targetField, candSubfield, relevantSubfields) {
|
|
46
46
|
if (birthYearAndDeathYear.test(candSubfield.value)) {
|
|
47
47
|
if (onlyBirthYear.test(relevantSubfields[0].value) && parseInt(relevantSubfields[0].value, 10) === parseInt(candSubfield.value, 10)) {
|
|
48
|
-
relevantSubfields[0].value = candSubfield.value;
|
|
48
|
+
relevantSubfields[0].value = candSubfield.value;
|
|
49
49
|
return true;
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
if (onlyDeathYear.test(relevantSubfields[0].value) && getDeathYear(relevantSubfields[0].value) === getDeathYear(candSubfield.value)) {
|
|
53
|
-
relevantSubfields[0].value = candSubfield.value;
|
|
53
|
+
relevantSubfields[0].value = candSubfield.value;
|
|
54
54
|
return true;
|
|
55
55
|
}
|
|
56
56
|
}
|
|
@@ -65,7 +65,7 @@ function replaceDatesAssociatedWithName(targetField, candSubfield, relevantSubfi
|
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
if (!anyYear(relevantSubfields[0].value) && anyYear(candSubfield.value)) {
|
|
68
|
-
relevantSubfields[0].value = candSubfield.value;
|
|
68
|
+
relevantSubfields[0].value = candSubfield.value;
|
|
69
69
|
return true;
|
|
70
70
|
}
|
|
71
71
|
|
|
@@ -174,7 +174,7 @@ function preferHyphenatedISBN(field, candSubfield, relevantSubfields) {
|
|
|
174
174
|
if (!pair) {
|
|
175
175
|
return false;
|
|
176
176
|
}
|
|
177
|
-
pair.value = candSubfield.value;
|
|
177
|
+
pair.value = candSubfield.value;
|
|
178
178
|
return true;
|
|
179
179
|
}
|
|
180
180
|
|
|
@@ -189,7 +189,7 @@ function preferHttpsOverHttp(candSubfield, relevantSubfields) {
|
|
|
189
189
|
if (!pair) {
|
|
190
190
|
return false;
|
|
191
191
|
}
|
|
192
|
-
pair.value = candSubfield.value;
|
|
192
|
+
pair.value = candSubfield.value;
|
|
193
193
|
return true;
|
|
194
194
|
}
|
|
195
195
|
|
|
@@ -209,7 +209,7 @@ function preferQualifierVersion(field, candSubfield, relevantSubfields) {
|
|
|
209
209
|
return true; // True, but don't prefer the source value
|
|
210
210
|
}
|
|
211
211
|
|
|
212
|
-
pair.value = candSubfield.value;
|
|
212
|
+
pair.value = candSubfield.value;
|
|
213
213
|
return true;
|
|
214
214
|
|
|
215
215
|
function subfieldQualifierCheck(subfield, name, qualifier) {
|
|
@@ -232,7 +232,7 @@ function preferSourceCorporateName(field, candSubfield, pair) {
|
|
|
232
232
|
nvdebug(`CORP base '${pair.value}' vs '${candSubfield.value}'`, debugDev);
|
|
233
233
|
const prefer = actualPrefenceCheck();
|
|
234
234
|
if (prefer) {
|
|
235
|
-
pair.value = candSubfield.value;
|
|
235
|
+
pair.value = candSubfield.value;
|
|
236
236
|
return true;
|
|
237
237
|
}
|
|
238
238
|
return false;
|
|
@@ -290,7 +290,7 @@ export function mergeSubfield(targetField, candSubfield) {
|
|
|
290
290
|
// 260 $a value "[S.l]" is the main type for this.
|
|
291
291
|
const meaninglessSubfields = relevantSubfields.filter(sf => !valueCarriesMeaning(targetField.tag, sf.code, sf.value));
|
|
292
292
|
if (meaninglessSubfields.length > 0) {
|
|
293
|
-
meaninglessSubfields[0].value = candSubfield.value;
|
|
293
|
+
meaninglessSubfields[0].value = candSubfield.value;
|
|
294
294
|
return true;
|
|
295
295
|
}
|
|
296
296
|
|
|
@@ -22,7 +22,7 @@ export function fieldRemoveDuplicateSubfields(field) {
|
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
const strippedField = cloneAndRemovePunctuation(field); // make punctuation-less version
|
|
25
|
-
|
|
25
|
+
|
|
26
26
|
let seen = {};
|
|
27
27
|
|
|
28
28
|
field.subfields = field.subfields.filter((sf, i) => notSeenBefore(sf, i));
|
|
@@ -45,6 +45,5 @@ export function fieldRemoveDuplicateSubfields(field) {
|
|
|
45
45
|
seen[subfieldAsString] = subfieldAsString;
|
|
46
46
|
return true;
|
|
47
47
|
}
|
|
48
|
-
/* eslint-enable */
|
|
49
48
|
|
|
50
49
|
}
|
|
@@ -48,7 +48,7 @@ export function normalizeForSamenessCheck(tag, subfieldCode, originalValue) {
|
|
|
48
48
|
|
|
49
49
|
function normalizePersonalName(originalValue) {
|
|
50
50
|
// Use more readable "Forename Surname" format in comparisons:
|
|
51
|
-
return originalValue.replace(/^([^,]+), ([^,]+)$/u, '$2 $1');
|
|
51
|
+
return originalValue.replace(/^([^,]+), ([^,]+)$/u, '$2 $1');
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
const sallittu506a = ['sallittu kaikenikäisille', 'sallittu', 's']; // downcased, without punctuation
|
|
@@ -133,7 +133,6 @@ export function mergeLisapainokset(record) {
|
|
|
133
133
|
return;
|
|
134
134
|
}
|
|
135
135
|
|
|
136
|
-
/* eslint-disable */
|
|
137
136
|
const collapsedArray = extractAllPrintData(relevantFields);
|
|
138
137
|
if (collapsedArray.length === 0) {
|
|
139
138
|
return;
|
|
@@ -149,5 +148,4 @@ export function mergeLisapainokset(record) {
|
|
|
149
148
|
return;
|
|
150
149
|
}
|
|
151
150
|
});
|
|
152
|
-
/* eslint-enable */
|
|
153
151
|
}
|
|
@@ -34,7 +34,7 @@ export default function () {
|
|
|
34
34
|
const msg = mergeRelatorTermFields(record, false);
|
|
35
35
|
const res = {message: msg};
|
|
36
36
|
|
|
37
|
-
res.valid = !(res.message.length >= 1);
|
|
37
|
+
res.valid = !(res.message.length >= 1);
|
|
38
38
|
return res;
|
|
39
39
|
}
|
|
40
40
|
}
|
|
@@ -49,7 +49,7 @@ function createNormalizedClone(field) {
|
|
|
49
49
|
function createNormalizedCloneWithoutRelatorTerms(field) {
|
|
50
50
|
const clonedField = createNormalizedClone(field);
|
|
51
51
|
// Remove relator terms $e subfi:
|
|
52
|
-
clonedField.subfields = clonedField.subfields.filter(sf => sf.code !== 'e');
|
|
52
|
+
clonedField.subfields = clonedField.subfields.filter(sf => sf.code !== 'e');
|
|
53
53
|
return clonedField;
|
|
54
54
|
}
|
|
55
55
|
|
|
@@ -74,7 +74,7 @@ function copyRelatorSubfields(fromField, toField) {
|
|
|
74
74
|
const relatorTermSubfieldCode = tagToRelatorTermSubfieldCode(fromField.tag);
|
|
75
75
|
const newRelatorTerms = extractAddableRelatorTerms(fromField, toField);
|
|
76
76
|
|
|
77
|
-
newRelatorTerms.forEach(term => toField.subfields.push({code: relatorTermSubfieldCode, value: term})); // eslint-disable-line
|
|
77
|
+
newRelatorTerms.forEach(term => toField.subfields.push({code: relatorTermSubfieldCode, value: term})); // eslint-disable-line array-callback-return
|
|
78
78
|
|
|
79
79
|
}
|
|
80
80
|
|
package/src/modernize-502.js
CHANGED
|
@@ -19,7 +19,7 @@ export default function () {
|
|
|
19
19
|
normalizeField502(field);
|
|
20
20
|
});
|
|
21
21
|
|
|
22
|
-
// message.valid = !(message.message.length >= 1);
|
|
22
|
+
// message.valid = !(message.message.length >= 1);
|
|
23
23
|
return res;
|
|
24
24
|
}
|
|
25
25
|
|
|
@@ -30,7 +30,7 @@ export default function () {
|
|
|
30
30
|
validateField(field, res);
|
|
31
31
|
});
|
|
32
32
|
|
|
33
|
-
res.valid = !(res.message.length >= 1);
|
|
33
|
+
res.valid = !(res.message.length >= 1);
|
|
34
34
|
return res;
|
|
35
35
|
}
|
|
36
36
|
|
|
@@ -43,7 +43,7 @@ export default function () {
|
|
|
43
43
|
const normalizedField = normalizeField502(clone(field));
|
|
44
44
|
const mod = fieldToString(normalizedField);
|
|
45
45
|
if (orig !== mod) { // Fail as the input is "broken"/"crap"/sumthing
|
|
46
|
-
res.message.push(`Fix '${orig}' => '${mod}'`);
|
|
46
|
+
res.message.push(`Fix '${orig}' => '${mod}'`);
|
|
47
47
|
return;
|
|
48
48
|
}
|
|
49
49
|
return;
|
|
@@ -63,7 +63,7 @@ export function normalizeField502(field) {
|
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
// "a = acd[0]"" is way more readable than "[a] = acd"...
|
|
66
|
-
const a = acd[0];
|
|
66
|
+
const a = acd[0];
|
|
67
67
|
const c = acd[1].code === 'c' ? acd[1] : null;
|
|
68
68
|
const d = acd[acd.length - 1].code === 'd' ? acd[acd.length - 1] : null;
|
|
69
69
|
|
|
@@ -74,8 +74,8 @@ export function normalizeField502(field) {
|
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
const newValue = `${extractA()}--${extractC()}${extractD()}`;
|
|
77
|
-
a.value = newValue;
|
|
78
|
-
field.subfields = field.subfields.filter(sf => !['c', 'd'].includes(sf.code));
|
|
77
|
+
a.value = newValue;
|
|
78
|
+
field.subfields = field.subfields.filter(sf => !['c', 'd'].includes(sf.code));
|
|
79
79
|
return field;
|
|
80
80
|
|
|
81
81
|
function extractA() {
|
|
@@ -16,16 +16,16 @@ export default function () {
|
|
|
16
16
|
function fix(record) {
|
|
17
17
|
function fixField(field) {
|
|
18
18
|
const removableSubfields = fieldGetDeletableSubfields(field);
|
|
19
|
-
removableSubfields.forEach(sf => record.removeSubfield(sf, field));
|
|
19
|
+
removableSubfields.forEach(sf => record.removeSubfield(sf, field)); // eslint-disable-line array-callback-return
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
const res = {message: [], fix: [], valid: true};
|
|
23
23
|
|
|
24
24
|
const relevantFields = getRelevantFields(record);
|
|
25
25
|
|
|
26
|
-
relevantFields.forEach(field => fixField(field));
|
|
26
|
+
relevantFields.forEach(field => fixField(field)); // eslint-disable-line array-callback-return
|
|
27
27
|
|
|
28
|
-
// message.valid = !(message.message.length >= 1);
|
|
28
|
+
// message.valid = !(message.message.length >= 1);
|
|
29
29
|
return res;
|
|
30
30
|
}
|
|
31
31
|
|
|
@@ -40,7 +40,7 @@ export default function () {
|
|
|
40
40
|
const relevantFields = getRelevantFields(record);
|
|
41
41
|
const messages = relevantFields.map(field => validateField(field));
|
|
42
42
|
const res = {message: messages};
|
|
43
|
-
res.valid = !(res.message.length >= 1);
|
|
43
|
+
res.valid = !(res.message.length >= 1);
|
|
44
44
|
return res;
|
|
45
45
|
}
|
|
46
46
|
|
|
@@ -26,7 +26,6 @@ export default function () {
|
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
/* eslint-disable functional/immutable-data,functional/no-conditional-statements */
|
|
30
29
|
function fix(record) {
|
|
31
30
|
record.fields.forEach((field) => {
|
|
32
31
|
if (field.value) {
|
|
@@ -41,7 +40,6 @@ export default function () {
|
|
|
41
40
|
});
|
|
42
41
|
});
|
|
43
42
|
}
|
|
44
|
-
/* eslint-enable functional/immutable-data,functional/no-conditional-statements */
|
|
45
43
|
|
|
46
44
|
function valueContainsNonBreakingSpace({value}) {
|
|
47
45
|
return (/\u00A0/u).test(value);
|
package/src/normalize-dashes.js
CHANGED
|
@@ -28,7 +28,7 @@ export default function () {
|
|
|
28
28
|
validateField(field, res);
|
|
29
29
|
});
|
|
30
30
|
|
|
31
|
-
res.valid = !(res.message.length >= 1);
|
|
31
|
+
res.valid = !(res.message.length >= 1);
|
|
32
32
|
return res;
|
|
33
33
|
}
|
|
34
34
|
|
|
@@ -41,7 +41,7 @@ export default function () {
|
|
|
41
41
|
if (orig === mod) { // Fail as the input is "broken"/"crap"/sumthing
|
|
42
42
|
return;
|
|
43
43
|
}
|
|
44
|
-
res.message.push(`'TODO: ${orig}' => '${mod}'`);
|
|
44
|
+
res.message.push(`'TODO: ${orig}' => '${mod}'`);
|
|
45
45
|
return;
|
|
46
46
|
}
|
|
47
47
|
}
|
|
@@ -54,7 +54,7 @@ function fixDashes(field) {
|
|
|
54
54
|
|
|
55
55
|
nvdebug(`Dashing ${fieldToString(field)}`);
|
|
56
56
|
|
|
57
|
-
field.subfields.forEach(sf => subfieldFixDashes(sf));
|
|
57
|
+
field.subfields.forEach(sf => subfieldFixDashes(sf)); // eslint-disable-line array-callback-return
|
|
58
58
|
|
|
59
59
|
return field;
|
|
60
60
|
|
|
@@ -63,7 +63,7 @@ function fixDashes(field) {
|
|
|
63
63
|
return;
|
|
64
64
|
}
|
|
65
65
|
// Normalize dashes U+2010 ... U+2015 to '-':
|
|
66
|
-
subfield.value = subfield.value.replace(/[\u2010\u2011\u2012\u2013\u2014\u2015]/ug, '-');
|
|
66
|
+
subfield.value = subfield.value.replace(/[\u2010\u2011\u2012\u2013\u2014\u2015]/ug, '-');
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
}
|
|
@@ -6,7 +6,7 @@ import {fieldToString} from './utils';
|
|
|
6
6
|
|
|
7
7
|
/*
|
|
8
8
|
function nvdebug(message, func) {
|
|
9
|
-
if (func) {
|
|
9
|
+
if (func) {
|
|
10
10
|
func(message);
|
|
11
11
|
}
|
|
12
12
|
console.info(message); // eslint-disable-line no-console
|
|
@@ -23,7 +23,7 @@ export default function () {
|
|
|
23
23
|
|
|
24
24
|
function fix(record) {
|
|
25
25
|
const res = {message: [], fix: [], valid: true};
|
|
26
|
-
//message.fix = [];
|
|
26
|
+
//message.fix = [];
|
|
27
27
|
|
|
28
28
|
// Actual parsing of all fields
|
|
29
29
|
/*
|
|
@@ -40,7 +40,7 @@ export default function () {
|
|
|
40
40
|
//validateField(field, true, message);
|
|
41
41
|
});
|
|
42
42
|
|
|
43
|
-
// message.valid = !(message.message.length >= 1);
|
|
43
|
+
// message.valid = !(message.message.length >= 1);
|
|
44
44
|
return res;
|
|
45
45
|
}
|
|
46
46
|
|
|
@@ -59,7 +59,7 @@ export default function () {
|
|
|
59
59
|
validateField(field, res);
|
|
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
|
|
|
@@ -74,7 +74,7 @@ export default function () {
|
|
|
74
74
|
const orig = fieldToString(field);
|
|
75
75
|
const mod = fieldToString(normalizedField);
|
|
76
76
|
if (orig !== mod) { // Fail as the input is "broken"/"crap"/sumthing
|
|
77
|
-
res.message.push(`'${orig}' could do with control number identifier normalization`);
|
|
77
|
+
res.message.push(`'${orig}' could do with control number identifier normalization`);
|
|
78
78
|
return;
|
|
79
79
|
}
|
|
80
80
|
|
|
@@ -190,7 +190,7 @@ export function fieldNormalizeControlNumbers(field) {
|
|
|
190
190
|
const targetFormat = normalizeAs(field.tag, sf.code);
|
|
191
191
|
if (targetFormat !== undefined) {
|
|
192
192
|
//nvdebug(`NORMALIZE SUBFIELD $${sf.code} IN FIELD: '${fieldToString(field)}' TO ${targetFormat}`);
|
|
193
|
-
sf.value = normalizeControlSubfieldValue(sf.value, targetFormat);
|
|
193
|
+
sf.value = normalizeControlSubfieldValue(sf.value, targetFormat);
|
|
194
194
|
return;
|
|
195
195
|
}
|
|
196
196
|
});
|
|
@@ -27,7 +27,7 @@ export default function () {
|
|
|
27
27
|
validateField(field, res);
|
|
28
28
|
});
|
|
29
29
|
|
|
30
|
-
res.valid = !(res.message.length >= 1);
|
|
30
|
+
res.valid = !(res.message.length >= 1);
|
|
31
31
|
return res;
|
|
32
32
|
}
|
|
33
33
|
|
|
@@ -38,7 +38,7 @@ export default function () {
|
|
|
38
38
|
normalizeQualifyingInformationField(normalizedField);
|
|
39
39
|
const mod = fieldToString(normalizedField);
|
|
40
40
|
if (orig !== mod) { // Fail as the input is "broken"/"crap"/sumthing
|
|
41
|
-
res.message.push(`'TODO: ${orig}' => '${mod}'`);
|
|
41
|
+
res.message.push(`'TODO: ${orig}' => '${mod}'`);
|
|
42
42
|
return;
|
|
43
43
|
}
|
|
44
44
|
return;
|
|
@@ -51,14 +51,14 @@ function normalizeQualifyingInformationField(field) {
|
|
|
51
51
|
return;
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
field.subfields.forEach(sf => fixSubfield(sf));
|
|
54
|
+
field.subfields.forEach(sf => fixSubfield(sf)); // eslint-disable-line array-callback-return
|
|
55
55
|
return;
|
|
56
56
|
|
|
57
57
|
function fixSubfield(sf) {
|
|
58
58
|
if (sf.code !== 'q') {
|
|
59
59
|
return;
|
|
60
60
|
}
|
|
61
|
-
sf.value = normalizeValue(sf.value);
|
|
61
|
+
sf.value = normalizeValue(sf.value);
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
function normalizeValue(val) {
|
|
@@ -23,7 +23,7 @@ export default function () {
|
|
|
23
23
|
|
|
24
24
|
function fix(record) {
|
|
25
25
|
const res = {message: [], fix: [], valid: true};
|
|
26
|
-
//message.fix = [];
|
|
26
|
+
//message.fix = [];
|
|
27
27
|
|
|
28
28
|
// Actual parsing of all fields
|
|
29
29
|
/*
|
|
@@ -37,7 +37,7 @@ export default function () {
|
|
|
37
37
|
//validateField(field, true, message);
|
|
38
38
|
});
|
|
39
39
|
|
|
40
|
-
// message.valid = !(message.message.length >= 1);
|
|
40
|
+
// message.valid = !(message.message.length >= 1);
|
|
41
41
|
return res;
|
|
42
42
|
}
|
|
43
43
|
|
|
@@ -55,7 +55,7 @@ export default function () {
|
|
|
55
55
|
validateField(field, res);
|
|
56
56
|
});
|
|
57
57
|
|
|
58
|
-
res.valid = !(res.message.length >= 1);
|
|
58
|
+
res.valid = !(res.message.length >= 1);
|
|
59
59
|
return res;
|
|
60
60
|
}
|
|
61
61
|
|
|
@@ -68,7 +68,7 @@ export default function () {
|
|
|
68
68
|
const normalizedField = fieldFixComposition(clone(field));
|
|
69
69
|
const mod = fieldToString(normalizedField);
|
|
70
70
|
if (orig !== mod) { // Fail as the input is "broken"/"crap"/sumthing
|
|
71
|
-
res.message.push(`'${orig}' requires normalization`);
|
|
71
|
+
res.message.push(`'${orig}' requires normalization`);
|
|
72
72
|
return;
|
|
73
73
|
}
|
|
74
74
|
return;
|
|
@@ -113,10 +113,10 @@ export function fieldFixComposition(field) {
|
|
|
113
113
|
//const originalValue = fieldToString(field);
|
|
114
114
|
//nvdebug(`fFC: '${originalValue}'`, debug);
|
|
115
115
|
field.subfields.forEach((subfield, index) => {
|
|
116
|
-
field.subfields[index].value = fixComposition(subfield.value);
|
|
116
|
+
field.subfields[index].value = fixComposition(subfield.value);
|
|
117
117
|
});
|
|
118
118
|
//const newValue = fieldToString(field);
|
|
119
|
-
//if (originalValue !== newValue) {
|
|
119
|
+
//if (originalValue !== newValue) {
|
|
120
120
|
// debug(`FIXCOMP: '${originalValue}' => '${newValue}'`);
|
|
121
121
|
//}
|
|
122
122
|
return field;
|
|
@@ -127,7 +127,7 @@ export function fieldRemoveDecomposedDiacritics(field) {
|
|
|
127
127
|
// Raison d'être/motivation: "Sirén" and diacriticless "Siren" might refer to a same surname, so this normalization
|
|
128
128
|
// allows us to compare authors and avoid duplicate fields.
|
|
129
129
|
field.subfields.forEach((sf) => {
|
|
130
|
-
sf.value = removeDecomposedDiacritics(sf.value);
|
|
130
|
+
sf.value = removeDecomposedDiacritics(sf.value);
|
|
131
131
|
});
|
|
132
132
|
|
|
133
133
|
function removeDecomposedDiacritics(value = '') {
|