@natlibfi/marc-record-validators-melinda 12.0.7 → 12.0.8

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.
Files changed (101) hide show
  1. package/dist/addMissingField041.js +6 -3
  2. package/dist/addMissingField041.js.map +2 -2
  3. package/dist/addMissingField336.js +7 -4
  4. package/dist/addMissingField336.js.map +2 -2
  5. package/dist/addMissingField337.js +6 -3
  6. package/dist/addMissingField337.js.map +2 -2
  7. package/dist/addMissingField338.js +8 -5
  8. package/dist/addMissingField338.js.map +2 -2
  9. package/dist/cyrillux-usemarcon-replacement.js +5 -2
  10. package/dist/cyrillux-usemarcon-replacement.js.map +2 -2
  11. package/dist/cyrillux.js +10 -7
  12. package/dist/cyrillux.js.map +2 -2
  13. package/dist/disambiguateSeriesStatements.js +2 -1
  14. package/dist/disambiguateSeriesStatements.js.map +2 -2
  15. package/dist/drop-terms.js +5 -4
  16. package/dist/drop-terms.js.map +2 -2
  17. package/dist/fix-33X.js +7 -4
  18. package/dist/fix-33X.js.map +2 -2
  19. package/dist/fix-country-codes.js +5 -0
  20. package/dist/fix-country-codes.js.map +2 -2
  21. package/dist/fix-language-codes.js +5 -1
  22. package/dist/fix-language-codes.js.map +2 -2
  23. package/dist/fix-sami-041.js +11 -10
  24. package/dist/fix-sami-041.js.map +2 -2
  25. package/dist/indicator-fixes.js +5 -1
  26. package/dist/indicator-fixes.js.map +2 -2
  27. package/dist/merge-fields/counterpartField.js +6 -6
  28. package/dist/merge-fields/counterpartField.js.map +2 -2
  29. package/dist/merge-fields/mergableIndicator.js +0 -3
  30. package/dist/merge-fields/mergableIndicator.js.map +2 -2
  31. package/dist/merge-fields/worldKnowledge.js.map +2 -2
  32. package/dist/mergeRelatorTermFields.js +9 -6
  33. package/dist/mergeRelatorTermFields.js.map +2 -2
  34. package/dist/normalize-dashes.js +7 -4
  35. package/dist/normalize-dashes.js.map +2 -2
  36. package/dist/normalize-identifiers.js.map +2 -2
  37. package/dist/normalize-utf8-diacritics.js.map +2 -2
  38. package/dist/normalizeFieldForComparison.js.map +1 -1
  39. package/dist/normalizeSubfieldValueForComparison.js.map +1 -1
  40. package/dist/punctuation2.js +5 -2
  41. package/dist/punctuation2.js.map +2 -2
  42. package/dist/reindexSubfield6OccurenceNumbers.js +11 -10
  43. package/dist/reindexSubfield6OccurenceNumbers.js.map +2 -2
  44. package/dist/removeDuplicateDataFields.js +3 -2
  45. package/dist/removeDuplicateDataFields.js.map +2 -2
  46. package/dist/removeInferiorDataFields.js.map +2 -2
  47. package/dist/resolveOrphanedSubfield6s.js +3 -2
  48. package/dist/resolveOrphanedSubfield6s.js.map +2 -2
  49. package/dist/sortSubfields.js +1 -1
  50. package/dist/sortSubfields.js.map +2 -2
  51. package/dist/stripPunctuation.js +4 -3
  52. package/dist/stripPunctuation.js.map +2 -2
  53. package/dist/subfield6Utils.js +4 -1
  54. package/dist/subfield6Utils.js.map +2 -2
  55. package/dist/subfield8Utils.js.map +2 -2
  56. package/dist/translate-terms.js +4 -3
  57. package/dist/translate-terms.js.map +2 -2
  58. package/dist/typeOfDate-008.js +3 -1
  59. package/dist/typeOfDate-008.js.map +2 -2
  60. package/dist/update-field-540.js.map +2 -2
  61. package/dist/urn.js +13 -12
  62. package/dist/urn.js.map +2 -2
  63. package/package.json +7 -7
  64. package/src/addMissingField041.js +8 -4
  65. package/src/addMissingField336.js +10 -5
  66. package/src/addMissingField337.js +9 -5
  67. package/src/addMissingField338.js +11 -6
  68. package/src/cyrillux-usemarcon-replacement.js +9 -5
  69. package/src/cyrillux.js +18 -12
  70. package/src/disambiguateSeriesStatements.js +4 -1
  71. package/src/drop-terms.js +8 -6
  72. package/src/fix-33X.js +10 -6
  73. package/src/fix-country-codes.js +7 -3
  74. package/src/fix-language-codes.js +8 -4
  75. package/src/fix-sami-041.js +13 -11
  76. package/src/indicator-fixes.js +10 -7
  77. package/src/merge-fields/counterpartField.js +10 -10
  78. package/src/merge-fields/mergableIndicator.js +3 -3
  79. package/src/merge-fields/worldKnowledge.js +11 -6
  80. package/src/mergeRelatorTermFields.js +12 -11
  81. package/src/normalize-dashes.js +11 -5
  82. package/src/normalize-identifiers.js +12 -19
  83. package/src/normalize-utf8-diacritics.js +6 -3
  84. package/src/normalizeFieldForComparison.js +2 -2
  85. package/src/normalizeSubfieldValueForComparison.js +2 -2
  86. package/src/punctuation2.js +34 -30
  87. package/src/reindexSubfield6OccurenceNumbers.js +13 -11
  88. package/src/removeDuplicateDataFields.js +29 -27
  89. package/src/removeInferiorDataFields.js +28 -24
  90. package/src/resolveOrphanedSubfield6s.js +6 -4
  91. package/src/sortSubfields.js +5 -5
  92. package/src/stripPunctuation.js +5 -3
  93. package/src/subfield6Utils.js +33 -35
  94. package/src/subfield8Utils.js +10 -7
  95. package/src/translate-terms.js +13 -9
  96. package/src/typeOfDate-008.js +4 -1
  97. package/src/update-field-540.js +7 -5
  98. package/src/urn.js +17 -13
  99. package/test-fixtures/drop-terms/02/metadata.json +1 -1
  100. package/test-fixtures/drop-terms/03/metadata.json +1 -1
  101. package/test-fixtures/drop-terms/04/metadata.json +1 -1
@@ -1,11 +1,16 @@
1
- //import createDebugLogger from 'debug';
1
+ import createDebugLogger from 'debug';
2
2
  import {fieldToString, getCatalogingLanguage, nvdebug} from './utils.js';
3
3
  import {getFormOfItem, map336CodeToTerm} from './field33XUtils.js';
4
4
 
5
+ const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:addMissingField336');
6
+ //const debugData = debug.extend('data');
7
+ const debugDev = debug.extend('dev');
8
+
5
9
  const description = 'Add missing 336 field(s)';
6
10
 
7
11
  // const multimediaRegexp = /multimedia/ui;
8
12
 
13
+ // eslint-disable-next-line max-lines-per-function
9
14
  export default function () {
10
15
 
11
16
  return {
@@ -13,9 +18,9 @@ export default function () {
13
18
  };
14
19
 
15
20
  function fix(record) {
16
- nvdebug(`FIX ${description}...`);
21
+ nvdebug(`FIX ${description}...`, debugDev);
17
22
  const newFields = getMissing336s(record);
18
- nvdebug(` GOT ${newFields.length}...`);
23
+ nvdebug(` GOT ${newFields.length}...`, debugDev);
19
24
  // FFS: we actually need newFields array here! Videogame, for example, might be
20
25
  // 336 ## ‡a kaksiulotteinen liikkuva kuva ‡b tdi ‡2 rdacontent
21
26
  // 336 ## ‡a tietokoneohjelma ‡b cop ‡2 rdacontent
@@ -28,7 +33,7 @@ export default function () {
28
33
  }
29
34
 
30
35
  function validate(record) {
31
- nvdebug(`VALIDATE ${description}...`);
36
+ nvdebug(`VALIDATE ${description}...`, debugDev);
32
37
  const newFields = getMissing336s(record);
33
38
  if (newFields.length === 0) {
34
39
  return {message: [], valid: true};
@@ -251,7 +256,7 @@ export default function () {
251
256
  }
252
257
 
253
258
  const bees = guessMissing336Bs(record); // bees = b-subfields
254
- nvdebug(` WE HAVE ${bees.length} BEES: ${bees.join(', ')}`);
259
+ nvdebug(` WE HAVE ${bees.length} BEES: ${bees.join(', ')}`, debugDev);
255
260
 
256
261
 
257
262
  return bees.map(b => codeToField(b, getCatalogingLanguage(record, 'fin')));
@@ -1,7 +1,11 @@
1
- //import createDebugLogger from 'debug';
1
+ import createDebugLogger from 'debug';
2
2
  import {fieldToString, getCatalogingLanguage, nvdebug} from './utils.js';
3
3
  import {getFormOfItem, map337CodeToTerm} from './field33XUtils.js';
4
4
 
5
+ const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:addMissingField337');
6
+ //const debugData = debug.extend('data');
7
+ const debugDev = debug.extend('dev');
8
+
5
9
  const description = 'Add missing 337 field(s)';
6
10
 
7
11
  // Based on https://github.com/NatLibFi/USEMARCON-Cyrillux/blob/master/008-23-337a.tbl . Extended!
@@ -27,7 +31,7 @@ export default function () {
27
31
  };
28
32
 
29
33
  function fix(record) {
30
- nvdebug(`FIX ${description}...`);
34
+ nvdebug(`FIX ${description}...`, debugDev);
31
35
  const newField = getMissing337(record);
32
36
  const res = {message: [], fix: [], valid: true};
33
37
  if (newField) {
@@ -39,7 +43,7 @@ export default function () {
39
43
  }
40
44
 
41
45
  function validate(record) {
42
- nvdebug(`VALIDATE ${description}....`);
46
+ nvdebug(`VALIDATE ${description}....`, debugDev);
43
47
  const newField = getMissing337(record);
44
48
  if (!newField) {
45
49
  return {message: [], valid: true};
@@ -101,7 +105,7 @@ export default function () {
101
105
  function getMissing337(record) {
102
106
  const [f337] = record.get('337');
103
107
  if (f337) {
104
- // nvdebug(fieldToString(f337));
108
+ // nvdebug(fieldToString(f337), debugDev);
105
109
  return undefined;
106
110
  }
107
111
 
@@ -122,7 +126,7 @@ export default function () {
122
126
  }
123
127
 
124
128
  function mapFormOfItemToField337B(formOfItem) {
125
- nvdebug(`mapping ${formOfItem} to 337$b`);
129
+ nvdebug(`mapping ${formOfItem} to 337$b`, debugDev);
126
130
 
127
131
  const [result] = mappings337B.filter(row => row.formOfItem === formOfItem);
128
132
  if (result) {
@@ -1,10 +1,15 @@
1
- //import createDebugLogger from 'debug';
1
+ import createDebugLogger from 'debug';
2
2
  import {fieldHasSubfield, fieldToString, getCatalogingLanguage, nvdebug} from './utils.js';
3
3
  import {getFormOfItem, map338CodeToTerm} from './field33XUtils.js';
4
4
 
5
+ const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:addMissingField338');
6
+ //const debugData = debug.extend('data');
7
+ const debugDev = debug.extend('dev');
8
+
5
9
  // Based mostly on USEMARCON-RDA. However, many things have been rethought, modernized etc.
6
10
  const description = 'Add missing 338 field(s)';
7
11
 
12
+ // eslint-disable-next-line max-lines-per-function
8
13
  export default function () {
9
14
 
10
15
  return {
@@ -12,7 +17,7 @@ export default function () {
12
17
  };
13
18
 
14
19
  function fix(record) {
15
- nvdebug(`FIX ${description}...`);
20
+ nvdebug(`FIX ${description}...`, debugDev);
16
21
  const newField = getMissing338(record);
17
22
  const res = {message: [], fix: [], valid: true};
18
23
 
@@ -25,7 +30,7 @@ export default function () {
25
30
  }
26
31
 
27
32
  function validate(record) {
28
- nvdebug(`VALIDATE ${description}...`);
33
+ nvdebug(`VALIDATE ${description}...`, debugDev);
29
34
  const newField = getMissing338(record);
30
35
  if (!newField) {
31
36
  return {message: [], valid: true};
@@ -57,7 +62,7 @@ export default function () {
57
62
  if (!extent) {
58
63
  return undefined;
59
64
  }
60
- nvdebug(`AUDIO EXTENT: '${extent}`);
65
+ nvdebug(`AUDIO EXTENT: '${extent}`, debugDev);
61
66
  if (extent.match(/^(?:audio discs?|[^ ]*ljudskiva|[^ ]*ljudskivor|LP-levy|LP-levyä|LP-skiva|LP-skivor|[^ ]*äänilevy)$/iu)) {
62
67
  return 'sd';
63
68
  }
@@ -173,7 +178,7 @@ export default function () {
173
178
  }
174
179
 
175
180
  function extentToCarrierType(record) {
176
- nvdebug(`EXTENT2CARRIERTYPE`);
181
+ nvdebug(`EXTENT2CARRIERTYPE`, debugDev);
177
182
  return extentToAudioCarrierType(record) ||
178
183
  extentToComputerCarrierType(record) ||
179
184
  extentToMicroformCarrierType(record) ||
@@ -288,7 +293,7 @@ export default function () {
288
293
  }
289
294
 
290
295
  function audioToField338(record) {
291
- nvdebug('AUDIO-TO-338');
296
+ nvdebug('AUDIO-TO-338', debugDev);
292
297
  const typeOfRecord = record.getTypeOfRecord(record);
293
298
  if (typeOfRecord !== 'i' && typeOfRecord !== 'j') {
294
299
  return undefined;
@@ -1,3 +1,5 @@
1
+ /* eslint-disable max-lines */
2
+
1
3
  /*
2
4
  * cyrillux-usemarcon-replacement.js -- implement and improve https://github.com/NatLibFi/USEMARCON-Cyrillux/tree/master
3
5
  *
@@ -6,6 +8,7 @@
6
8
  */
7
9
 
8
10
  import clone from 'clone';
11
+ import createDebugLogger from 'debug';
9
12
  import {MarcRecord} from '@natlibfi/marc-record';
10
13
  import {default as fix33X} from './fix-33X.js';
11
14
  import {default as add041} from './addMissingField041.js';
@@ -19,11 +22,11 @@ import {default as fixIndicators} from './indicator-fixes.js';
19
22
  import {default as fixPunctuation} from './punctuation2.js';
20
23
  import {default as fixQualifyingInformation} from './normalize-qualifying-information.js';
21
24
  import {sortAdjacentSubfields} from './sortSubfields.js';
22
-
23
- // import createDebugLogger from 'debug';
24
25
  import {fieldHasSubfield, nvdebug, recordRemoveValuelessSubfields, recordToString, removeSubfield} from './utils.js';
25
26
 
26
- // const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/punctuation2');
27
+ const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/cyrillux-usermarcon-replacement');
28
+ //const debugData = debug.extend('data');
29
+ const debugDev = debug.extend('dev');
27
30
 
28
31
  const description = 'Replacement for Cyrillux usemarcon rules';
29
32
 
@@ -32,13 +35,14 @@ const description = 'Replacement for Cyrillux usemarcon rules';
32
35
  const dropTags = ['001', '003', '010', '012', '014', '015', '016', '017', '019', '025', '029', '032', '035', '036', '037', '038', '042', '044', '049', '051', '061', '068', '071', '074', '079', '090', '091', '092', '094', '095', '096', '097', '099', '249', '261', '262', '350', '400', '411', '541', '561', '562', '574', '575', '577', '578', '583', '584', '589', '590', '591', '592', '593', '594', '595', '596', '597', '598', '599', '653', '698', '741', '742', '744', '751', '761', '790', '841', '842', '843', '844', '845', '850', '852', '853', '854', '855', '858', '859', '863', '864', '865', '866', '867', '868', '876', '877', '878', '882', '886', '887', '888', '890', '899'];
33
36
 
34
37
 
38
+ // eslint-disable-next-line max-lines-per-function
35
39
  export default function () {
36
40
  return {
37
41
  description, fix, validate
38
42
  };
39
43
 
40
44
  function fix(record) {
41
- nvdebug(`${description}: fix`);
45
+ nvdebug(`${description}: fix`, debugDev);
42
46
  realFix(record);
43
47
  const res = {message: [], fix: [], valid: true};
44
48
  return res;
@@ -156,7 +160,7 @@ export default function () {
156
160
 
157
161
  // Validation is currently done in subparts
158
162
  function validate(record) {
159
- nvdebug(`${description}: validate`);
163
+ nvdebug(`${description}: validate`, debugDev);
160
164
  const originalString = recordToString(record);
161
165
  const clonedRecord = new MarcRecord(record, {subfieldValues: false});
162
166
  realFix(clonedRecord);
package/src/cyrillux.js CHANGED
@@ -9,11 +9,17 @@ import {default as sortFields} from './sortFields.js';
9
9
  import {default as reindexSubfield6OccurenceNumbers} from './reindexSubfield6OccurenceNumbers.js';
10
10
  import {fieldStripPunctuation} from './punctuation2.js';
11
11
  import {getLanguageCode} from './addMissingField041.js';
12
+ import createDebugLogger from 'debug';
13
+
14
+ const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/cyrillux');
15
+ //const debugData = debug.extend('data');
16
+ const debugDev = debug.extend('dev');
12
17
 
13
18
  const iso9Trans = 'ISO9 <TRANS>';
14
19
  const cyrillicTrans = 'CYRILLIC <TRANS>';
15
20
  const sfs4900Trans = 'SFS4900 <TRANS>';
16
21
 
22
+ // eslint-disable-next-line max-lines-per-function
17
23
  export default function (config = {}) {
18
24
  // console.log(`CONFIG=${JSON.stringify(config)}`); // eslint-disable-line no-console
19
25
 
@@ -135,7 +141,7 @@ export default function (config = {}) {
135
141
  // Discussion: We should probably also skip others like 05X-08X, 648, 650, 651, and 655, but this needs thinking...
136
142
  // Also I'd like to convert do CYRILLIC->ISO-9 in field 300 (and others?) without 880 mappings... (<- not implemented)
137
143
 
138
- // nvdebug(`fieldCanBeTransliterated('${fieldToString(field)}') in...`);
144
+ // nvdebug(`fieldCanBeTransliterated('${fieldToString(field)}') in...`, debugDev);
139
145
  if (!tagCanBeTransliterated(field.tag)) {
140
146
  return false;
141
147
  }
@@ -175,10 +181,10 @@ export default function (config = {}) {
175
181
  }
176
182
  const conversionResult = sfs4900.convertToLatin(subfield.value, inputLang);
177
183
 
178
- console.log(JSON.stringify(conversionResult));
184
+ nvdebug(`${JSON.stringify(conversionResult)}`, debugDev);
179
185
  const result = conversionResult.result;
180
- console.log(JSON.stringify(result));
181
- //console.log(`VAL: ${subfield.value} => ${value} using ${lang}`); // eslint-disable-line no-console
186
+ nvdebug(`${JSON.stringify(result)}`, debugDev);
187
+ //nvdebug(`VAL: ${subfield.value} => ${value} using ${lang}`, debugDev);
182
188
  return {code: subfield.code, value: result};
183
189
  }
184
190
 
@@ -256,7 +262,7 @@ export default function (config = {}) {
256
262
  if (!config.retainCyrillic) {
257
263
  return undefined;
258
264
  }
259
- nvdebug(`Derive CYR 880 from ${fieldToString(field)}`);
265
+ nvdebug(`Derive CYR 880 from ${fieldToString(field)}`, debugDev);
260
266
  const newSubfield6 = deriveSubfield6(field.tag, field.subfields, occurrenceNumber);
261
267
  const newSubfield9 = fieldHasSubfield(field, '9', cyrillicTrans) ? [] : [{code: '9', value: cyrillicTrans}];
262
268
  const subfields = [
@@ -266,7 +272,7 @@ export default function (config = {}) {
266
272
  ];
267
273
 
268
274
  const newField = {tag: '880', ind1: field.ind1, ind2: field.ind2, subfields};
269
- nvdebug(` New CYR 880 ${fieldToString(newField)}`);
275
+ nvdebug(` New CYR 880 ${fieldToString(newField)}`, debugDev);
270
276
  return newField;
271
277
  }
272
278
 
@@ -317,8 +323,8 @@ export default function (config = {}) {
317
323
 
318
324
  // Paired field: $9 CYRILLIC <TRANS> is the only legal <TRANS>
319
325
  const [pairedField] = existingPairedFields;
320
- nvdebug(`LOOKING FOR SFS4900 PAIR: ${fieldToString(field)}`);
321
- nvdebug(` HAVING PAIRED FIELD: ${fieldToString(pairedField)}`);
326
+ nvdebug(`LOOKING FOR SFS4900 PAIR: ${fieldToString(field)}`, debugDev);
327
+ nvdebug(` HAVING PAIRED FIELD: ${fieldToString(pairedField)}`, debugDev);
322
328
  if (!fieldContainsCyrillicCharacters(pairedField)) {
323
329
  return false;
324
330
  }
@@ -332,7 +338,7 @@ export default function (config = {}) {
332
338
  const languageCode = getLanguageCode(record);
333
339
  const field2 = fieldToString(createFieldForSfs4900Comparison(mapFieldToSfs4900(pairedField, occurrenceNumberAsString, languageCode), field.tag));
334
340
  const field1 = fieldToString(createFieldForSfs4900Comparison(field, field.tag));
335
- nvdebug(`COMPARE CONTENTS:\n '${field1}' vs\n '${field2}': ${field1 === field2 ? 'OK' : 'FAIL'}`);
341
+ nvdebug(`COMPARE CONTENTS:\n '${field1}' vs\n '${field2}': ${field1 === field2 ? 'OK' : 'FAIL'}`, debugDev);
336
342
  return field1 === field2;
337
343
  }
338
344
 
@@ -377,17 +383,17 @@ export default function (config = {}) {
377
383
  return [originalField];
378
384
  }
379
385
 
380
- // nvdebug(`PROCESSING: ${fieldToString(originalField)}`);
386
+ // nvdebug(`PROCESSING: ${fieldToString(originalField)}`, debugDev);
381
387
 
382
388
  const newOccurrenceNumberAsInt = getNewOccurrenceNumber(originalField, record, maxCreatedOccurrenceNumber);
383
389
  const newOccurrenceNumberAsString = intToOccurrenceNumberString(newOccurrenceNumberAsInt);
384
390
  const languageCode = getLanguageCode(record);
385
391
 
386
- // nvdebug(`NEW OCCURRENCE NUMBER: '${newOccurrenceNumberAsString}'`);
392
+ // nvdebug(`NEW OCCURRENCE NUMBER: '${newOccurrenceNumberAsString}'`, debugDev);
387
393
 
388
394
  const existingPairedFields = fieldGetOccurrenceNumberPairs(originalField, record.get('880'));
389
395
 
390
- // nvdebug(`NUMBER OF PAIRED 880 FIELDS: ${existingPairedFields.length}`);
396
+ // nvdebug(`NUMBER OF PAIRED 880 FIELDS: ${existingPairedFields.length}`, debugDev);
391
397
 
392
398
  const newMainField = mapFieldToIso9(originalField, newOccurrenceNumberAsString); // ISO-9
393
399
  const newCyrillicField = retainCyrillic(existingPairedFields) ? mapFieldToCyrillicField880(originalField, newOccurrenceNumberAsString) : undefined; // CYRILLIC
@@ -9,6 +9,8 @@ import {fieldFixPunctuation} from './punctuation2.js';
9
9
  //const {default: createNatlibfiSruClient} = natlibfiSruClient;
10
10
 
11
11
  const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:disambiguateSeriesStatements');
12
+ //const debugData = debug.extend('data');
13
+ const debugDev = debug.extend('dev');
12
14
 
13
15
  const ELECTRONIC = 1;
14
16
  const PRINTED = 2;
@@ -16,6 +18,7 @@ const NEITHER_OR_UNKNOWN = 0;
16
18
  const SRU_API_URL = 'https://sru.api.melinda.kansalliskirjasto.fi/bib';
17
19
 
18
20
  // Author(s): Nicholas Volk
21
+ // eslint-disable-next-line max-lines-per-function
19
22
  export default function () {
20
23
  const sruClient = createSruClient(SRU_API_URL);
21
24
 
@@ -79,7 +82,7 @@ export default function () {
79
82
  }
80
83
 
81
84
  const deletableStrings = deletableXs.map(sf => subfieldToString(sf));
82
- nvdebug(`Field has removable ISSNS: '${deletableStrings.join(', ')}`, debug);
85
+ nvdebug(`Field has removable ISSNS: '${deletableStrings.join(', ')}`, debugDev);
83
86
 
84
87
  // fixer:
85
88
  if (reallyFix) {
package/src/drop-terms.js CHANGED
@@ -6,7 +6,8 @@ import {fieldToString, nvdebug} from './utils.js';
6
6
  import {getLexiconAndLanguage, getTermData, isLabel, isValidSubfield0} from './translate-terms.js';
7
7
 
8
8
  const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:drop-terms');
9
-
9
+ //const debugData = debug.extend('data');
10
+ const debugDev = debug.extend('dev');
10
11
 
11
12
  const defaultConfig = {
12
13
  'constraints': [
@@ -25,6 +26,7 @@ const defaultConfig = {
25
26
  'remove 0-less': true
26
27
  };
27
28
 
29
+ // eslint-disable-next-line max-lines-per-function
28
30
  export default function (config = defaultConfig) {
29
31
 
30
32
  return {
@@ -112,7 +114,7 @@ export default function (config = defaultConfig) {
112
114
  }
113
115
 
114
116
  async function isRemovableField(field) {
115
- // nvdebug(`FOO===== ${fieldToString(field)}`);
117
+ // nvdebug(`FOO===== ${fieldToString(field)}`, debugDev);
116
118
 
117
119
 
118
120
  // $0-less field:
@@ -132,15 +134,15 @@ export default function (config = defaultConfig) {
132
134
 
133
135
  // $a is the pref label. All is fine!
134
136
  if (isLabel(data.prefLabel, subfieldA.value, lexData.lang)) {
135
- debug(`altLabel found: ${subfieldA.value}`);
137
+ nvdebug(`altLabel found: ${subfieldA.value}`, debugDev);
136
138
  return false;
137
139
  }
138
140
  if (isLabel(data.altLabel, subfieldA.value, lexData.lang)) {
139
- debug(`altLabel found: ${subfieldA.value}`);
141
+ nvdebug(`altLabel found: ${subfieldA.value}`, debugDev);
140
142
  // Oddly enough this could remove altLabel but keep totally invalid labels...
141
143
  return config['remove altLabel'];
142
144
  }
143
- debug(`a-2-0 mismatch: ${fieldToString(field)}`);
145
+ nvdebug(`a-2-0 mismatch: ${fieldToString(field)}`, debugDev);
144
146
  }
145
147
  }
146
148
 
@@ -148,7 +150,7 @@ export default function (config = defaultConfig) {
148
150
  if (config['keep invalid label']) {
149
151
  // We keep the label $a. However, we can get rid of $0 if we want to (semantic reasons)
150
152
  if (!config['keep invalid url']) {
151
- nvdebug(`=============== 0-removal`);
153
+ nvdebug(`=============== 0-removal`, debugDev);
152
154
  field.subfields = field.subfields.filter(sf => sf.code !== '0');
153
155
  }
154
156
  return false;
package/src/fix-33X.js CHANGED
@@ -1,10 +1,13 @@
1
- //import createDebugLogger from 'debug';
1
+ import createDebugLogger from 'debug';
2
2
  import clone from 'clone';
3
3
  import {fieldToString, getCatalogingLanguage, nvdebug} from './utils.js';
4
4
  import {map336CodeToTerm, map337CodeToTerm, map338CodeToTerm} from './field33XUtils.js';
5
5
 
6
- const description = 'Fix non-RDA 33X field(s)';
6
+ const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:fix-33X');
7
+ //const debugData = debug.extend('data');
8
+ const debugDev = debug.extend('dev');
7
9
 
10
+ const description = 'Fix non-RDA 33X field(s)';
8
11
 
9
12
  const map336 = {
10
13
  'Bild (kartografisk ; att vidra)': 'crt',
@@ -366,6 +369,7 @@ const map338 = {
366
369
 
367
370
  // const multimediaRegexp = /multimedia/ui;
368
371
 
372
+ // eslint-disable-next-line max-lines-per-function
369
373
  export default function () {
370
374
 
371
375
  return {
@@ -373,11 +377,11 @@ export default function () {
373
377
  };
374
378
 
375
379
  function fix(record) {
376
- nvdebug(`FIX ${description}...`);
380
+ nvdebug(`FIX ${description}...`, debugDev);
377
381
  const catLang = getCatalogingLanguage(record) || 'fin';
378
382
  const fields = getRelevantFields(record);
379
383
  fields.forEach(f => fixField(f, catLang));
380
- nvdebug(` GOT ${fields.length}...`);
384
+ nvdebug(` GOT ${fields.length}...`, debugDev);
381
385
  // FFS: we actually need newFields array here! Videogame, for example, might be
382
386
  // 336 ## ‡a kaksiulotteinen liikkuva kuva ‡b tdi ‡2 rdacontent
383
387
  // 336 ## ‡a tietokoneohjelma ‡b cop ‡2 rdacontent
@@ -387,7 +391,7 @@ export default function () {
387
391
  }
388
392
 
389
393
  function validate(record) {
390
- nvdebug(`VALIDATE ${description}...`); // NOT READY YET
394
+ nvdebug(`VALIDATE ${description}...`, debugDev); // NOT READY YET
391
395
  const catLang = getCatalogingLanguage(record) || 'fin';
392
396
  const fields = getRelevantFields(record);
393
397
  if (fields.length === 0) {
@@ -414,7 +418,7 @@ export default function () {
414
418
 
415
419
 
416
420
  function mapTermToCode(term, tag) {
417
- nvdebug(`TERM/${tag}: '${term}'`);
421
+ nvdebug(`TERM/${tag}: '${term}'`, debugDev);
418
422
  if (tag === '336' && term in map336) {
419
423
  return map336[term];
420
424
  }
@@ -4,8 +4,12 @@
4
4
  //
5
5
  // Author(s): Nicholas Volk
6
6
 
7
- //import createDebugLogger from 'debug';
8
- //import {fieldToString, nvdebug} from './utils.js';
7
+ import createDebugLogger from 'debug';
8
+ import {nvdebug} from './utils.js';
9
+
10
+ const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:fix-country-codes');
11
+ //const debugData = debug.extend('data');
12
+ const debugDev = debug.extend('dev');
9
13
 
10
14
 
11
15
  export default function () {
@@ -16,7 +20,7 @@ export default function () {
16
20
  };
17
21
 
18
22
  function fix(record) {
19
- //nvdebug(`FIX ME`);
23
+ nvdebug(`FIX ME:`, debugDev);
20
24
  const res = {message: [], fix: [], valid: true};
21
25
 
22
26
  const [field008] = record.get('008');
@@ -1,20 +1,24 @@
1
1
  import clone from 'clone';
2
- import {fieldToString} from './utils.js';
2
+ import {fieldToString, nvdebug} from './utils.js';
3
+ import createDebugLogger from 'debug';
4
+
3
5
  // Fix language codes in 008/35-37 and 041 (does not sync them)
4
6
  //
5
7
  // Author(s): Nicholas Volk
6
8
 
7
- //import createDebugLogger from 'debug';
8
- //import {fieldToString, nvdebug} from './utils.js';
9
+ const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:fix-language-codes');
10
+ //const debugData = debug.extend('data');
11
+ const debugDev = debug.extend('dev');
9
12
 
10
13
  const description = 'Fix language codes';
11
14
 
15
+ // eslint-disable-next-line max-lines-per-function
12
16
  export default function () {
13
17
 
14
18
  return {description, validate, fix};
15
19
 
16
20
  function fix(record) {
17
- //nvdebug(`FIX ME`);
21
+ nvdebug(`FIX ME`, debugDev);
18
22
  const res = {message: [], fix: [], valid: true};
19
23
 
20
24
  const [field008] = record.get('008');
@@ -3,12 +3,14 @@
3
3
  import createDebugLogger from 'debug';
4
4
  import clone from 'clone';
5
5
 
6
- import {fieldToString} from './utils.js';
6
+ import {fieldToString, nvdebug} from './utils.js';
7
7
 
8
8
  const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:fix-sami-041');
9
+ //const debugData = debug.extend('data');
10
+ const debugDev = debug.extend('dev');
9
11
 
10
12
 
11
-
13
+ // eslint-disable-next-line max-lines-per-function
12
14
  export default function () {
13
15
  /* 'sma': eteläsaame, 'sme': pohjoissaame, 'smj': luulajansaame, 'smn': inarinsaame, 'sms': koltansaame */
14
16
  const samiLanguages = ['sma', 'sme', 'smj', 'smn', 'sms'];
@@ -21,7 +23,7 @@ export default function () {
21
23
 
22
24
  function getRelevantSubfieldCodes(record) { // Maybe this should be an exportable utility function...
23
25
  if (record && record.leader && record.leader[6]) {
24
- debug(` LDR/06 is '${record.leader[6]}'`);
26
+ nvdebug(` LDR/06 is '${record.leader[6]}'`, debugDev);
25
27
  // We should test this properly...
26
28
  if (['i', 'j'].includes(record.leader[6])) { // Check type of record: sound recordings use 'd'
27
29
  return ['d'];
@@ -34,13 +36,13 @@ export default function () {
34
36
 
35
37
 
36
38
  function fix(record, validateMode = false) {
37
- debug(`Start ${validateMode ? 'validator' : 'fixer'}`);
39
+ nvdebug(`Start ${validateMode ? 'validator' : 'fixer'}`, debugDev);
38
40
  const relevantSubfieldCodes = getRelevantSubfieldCodes(record);
39
- debug(` Relevant subfield codes are '${relevantSubfieldCodes.join("', '")}'`);
41
+ nvdebug(` Relevant subfield codes are '${relevantSubfieldCodes.join("', '")}'`, debugDev);
40
42
  const relevantFields = record.fields.filter(f => isRelevantField(f, relevantSubfieldCodes)).map(f => validateMode ? clone(f) : f); // NV! relevant fields are cloned in validation mode!
41
43
  // Nothing to do:
42
44
  if (relevantFields.length === 0) {
43
- debug(` No relevant f041 fields found`);
45
+ nvdebug(` No relevant f041 fields found`, debugDev);
44
46
  if (validateMode) {
45
47
  return {message: [], valid: true};
46
48
  }
@@ -63,22 +65,22 @@ export default function () {
63
65
  const [f008] = record.get('008').map(f => validateMode ? clone(f) : f);
64
66
 
65
67
  if (!f008) {
66
- debug(' WARNING: no f008 found');
68
+ nvdebug(' WARNING: no f008 found'), debugDev;
67
69
  return [];
68
70
  }
69
71
  const currLang = f008.value.substr(35, 3);
70
72
  if (!samiLanguages.includes(currLang)) { // NB! If original 008/35-37 was not a sami language, we don't change anything!
71
- debug(` Existing 008/35-37 '${currLang}' is not a sami language. No need to update 008/35-37`);
73
+ nvdebug(` Existing 008/35-37 '${currLang}' is not a sami language. No need to update 008/35-37`, debugDev);
72
74
  return [];
73
75
  }
74
76
  const origValue = f008.value;
75
77
  const firstRelevantSubfield = relevantFields[0].subfields.find(sf => relevantSubfieldCodes.includes(sf.code));
76
78
  if (firstRelevantSubfield.value !== 'smi') {
77
- debug(` First relevant subfield is '\$${firstRelevantSubfield.code} ${firstRelevantSubfield.value}'. No need to update 008/35-37`);
79
+ nvdebug(` First relevant subfield is '\$${firstRelevantSubfield.code} ${firstRelevantSubfield.value}'. No need to update 008/35-37`, debugDev);
78
80
  return [];
79
81
  }
80
82
  f008.value = `${f008.value.substr(0, 35)}smi${f008.value.substr(38)}`;
81
- debug(` Update 008/35-37: '${currLang}' => 'smi'`);
83
+ nvdebug(` Update 008/35-37: '${currLang}' => 'smi'`, debugDev);
82
84
  return createReport([origValue], [f008.value]);
83
85
  }
84
86
 
@@ -99,7 +101,7 @@ export default function () {
99
101
  code: currSubfield.code,
100
102
  value: 'smi'
101
103
  };
102
- debug(` f041: Add '\$${currSubfield.code} smi' before '${currSubfield.value}'`);
104
+ nvdebug(` f041: Add '\$${currSubfield.code} smi' before '${currSubfield.value}'`, debugDev);
103
105
 
104
106
  return processSubfields(otherSubfields, [...outgoingSubfields, smiSubfield, currSubfield]);
105
107
  }
@@ -1,10 +1,13 @@
1
1
  // Relocated from melinda-marc-record-merge-reducers (and renamed)
2
- //import createDebugLogger from 'debug';
3
- //const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:normalizeIdentifiers');
4
2
 
5
- import {fieldToString} from './utils.js';
3
+ import createDebugLogger from 'debug';
4
+ import {fieldToString, nvdebug} from './utils.js';
6
5
 
7
6
 
7
+ const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:indicator-fixes');
8
+ const debugData = debug.extend('data');
9
+ //const debugDev = debug.extend('dev');
10
+
8
11
  export default function () {
9
12
 
10
13
  return {
@@ -31,7 +34,7 @@ export default function () {
31
34
 
32
35
 
33
36
  function validateRecord(record, res) {
34
- //nvdebug(record);
37
+ nvdebug(record, debugData);
35
38
  const clonedFields = JSON.parse(JSON.stringify(record.fields));
36
39
  recordNormalizeIndicators(record);
37
40
 
@@ -41,11 +44,11 @@ export default function () {
41
44
  const origFieldAsString = fieldToString(clonedFields[index]);
42
45
  //const clonedFieldAsString = fieldToString(field);
43
46
  if (clonedFields[index].ind1 !== field.ind1) {
44
- //nvdebug(`FIX IND1: '${clonedFields[index].ind1}' => '${field.ind1}': ${clonedFieldAsString}`);
47
+ //nvdebug(`FIX IND1: '${clonedFields[index].ind1}' => '${field.ind1}': ${clonedFieldAsString}`, debugDev);
45
48
  res.message.push(`Expected IND1 for '${origFieldAsString}' is '${field.ind1}'`);
46
49
  }
47
50
  if (clonedFields[index].ind2 !== field.ind2) {
48
- //nvdebug(`FIX IND2: '${clonedFields[index].ind2}' => '${field.ind2}': ${clonedFieldAsString}`);
51
+ //nvdebug(`FIX IND2: '${clonedFields[index].ind2}' => '${field.ind2}': ${clonedFieldAsString}`, debugDev);
49
52
  res.message.push(`Expected IND2 for '${origFieldAsString}' is '${field.ind2}'`);
50
53
  }
51
54
  }
@@ -79,7 +82,7 @@ function valueBeginsWithDeterminer(value, cands) {
79
82
  function determineNonFilingIndicatorValue(field, languages = undefined) {
80
83
  const subfieldA = field.subfields.find(sf => sf.code === 'a');
81
84
  if (!subfieldA) {
82
- // nvdebug(' Subfield $a miss!');
85
+ // nvdebug(' Subfield $a miss!', debugDev);
83
86
  return;
84
87
  }
85
88