@natlibfi/marc-record-validators-melinda 11.3.1 → 11.3.2-alpha.2

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 (80) hide show
  1. package/dist/index.js +7 -0
  2. package/dist/index.js.map +1 -1
  3. package/dist/melindaCustomMergeFields.json +5120 -0
  4. package/dist/merge-fields/config.json +83 -0
  5. package/dist/merge-fields/controlSubfields.js +278 -0
  6. package/dist/merge-fields/controlSubfields.js.map +1 -0
  7. package/dist/merge-fields/counterpartField.js +674 -0
  8. package/dist/merge-fields/counterpartField.js.map +1 -0
  9. package/dist/merge-fields/index.js +76 -0
  10. package/dist/merge-fields/index.js.map +1 -0
  11. package/dist/merge-fields/mergableIndicator.js +95 -0
  12. package/dist/merge-fields/mergableIndicator.js.map +1 -0
  13. package/dist/merge-fields/mergableTag.js +33 -0
  14. package/dist/merge-fields/mergableTag.js.map +1 -0
  15. package/dist/merge-fields/mergeConstraints.js +1225 -0
  16. package/dist/merge-fields/mergeConstraints.js.map +1 -0
  17. package/dist/merge-fields/mergeField.js +190 -0
  18. package/dist/merge-fields/mergeField.js.map +1 -0
  19. package/dist/merge-fields/mergeIndicator.js +171 -0
  20. package/dist/merge-fields/mergeIndicator.js.map +1 -0
  21. package/dist/merge-fields/mergeOrAddPostprocess.js +57 -0
  22. package/dist/merge-fields/mergeOrAddPostprocess.js.map +1 -0
  23. package/dist/merge-fields/mergeOrAddSubfield.js +203 -0
  24. package/dist/merge-fields/mergeOrAddSubfield.js.map +1 -0
  25. package/dist/merge-fields/mergeSubfield.js +277 -0
  26. package/dist/merge-fields/mergeSubfield.js.map +1 -0
  27. package/dist/merge-fields/removeDuplicateSubfields.js +48 -0
  28. package/dist/merge-fields/removeDuplicateSubfields.js.map +1 -0
  29. package/dist/merge-fields/worldKnowledge.js +98 -0
  30. package/dist/merge-fields/worldKnowledge.js.map +1 -0
  31. package/dist/merge-fields.spec.js +51 -0
  32. package/dist/merge-fields.spec.js.map +1 -0
  33. package/dist/subfield6Utils.js +16 -1
  34. package/dist/subfield6Utils.js.map +1 -1
  35. package/dist/utils.js +108 -0
  36. package/dist/utils.js.map +1 -1
  37. package/package.json +6 -6
  38. package/src/index.js +3 -1
  39. package/src/melindaCustomMergeFields.json +5120 -0
  40. package/src/merge-fields/config.json +83 -0
  41. package/src/merge-fields/controlSubfields.js +307 -0
  42. package/src/merge-fields/counterpartField.js +736 -0
  43. package/src/merge-fields/index.js +69 -0
  44. package/src/merge-fields/mergableIndicator.js +90 -0
  45. package/src/merge-fields/mergableTag.js +89 -0
  46. package/src/merge-fields/mergeConstraints.js +309 -0
  47. package/src/merge-fields/mergeField.js +187 -0
  48. package/src/merge-fields/mergeIndicator.js +185 -0
  49. package/src/merge-fields/mergeOrAddPostprocess.js +56 -0
  50. package/src/merge-fields/mergeOrAddSubfield.js +218 -0
  51. package/src/merge-fields/mergeSubfield.js +306 -0
  52. package/src/merge-fields/removeDuplicateSubfields.js +50 -0
  53. package/src/merge-fields/worldKnowledge.js +104 -0
  54. package/src/merge-fields.spec.js +52 -0
  55. package/src/subfield6Utils.js +14 -1
  56. package/src/utils.js +119 -0
  57. package/test-fixtures/merge-fields/f01/expectedResult.json +11 -0
  58. package/test-fixtures/merge-fields/f01/metadata.json +5 -0
  59. package/test-fixtures/merge-fields/f01/record.json +13 -0
  60. package/test-fixtures/merge-fields/f02/expectedResult.json +14 -0
  61. package/test-fixtures/merge-fields/f02/metadata.json +6 -0
  62. package/test-fixtures/merge-fields/f02/record.json +16 -0
  63. package/test-fixtures/merge-fields/f03/expectedResult.json +17 -0
  64. package/test-fixtures/merge-fields/f03/metadata.json +7 -0
  65. package/test-fixtures/merge-fields/f03/record.json +23 -0
  66. package/test-fixtures/merge-fields/f04/expectedResult.json +14 -0
  67. package/test-fixtures/merge-fields/f04/metadata.json +5 -0
  68. package/test-fixtures/merge-fields/f04/record.json +19 -0
  69. package/test-fixtures/merge-fields/v01/expectedResult.json +6 -0
  70. package/test-fixtures/merge-fields/v01/metadata.json +5 -0
  71. package/test-fixtures/merge-fields/v01/record.json +13 -0
  72. package/test-fixtures/merge-fields/v02/expectedResult.json +4 -0
  73. package/test-fixtures/merge-fields/v02/metadata.json +5 -0
  74. package/test-fixtures/merge-fields/v02/record.json +13 -0
  75. package/test-fixtures/merge-fields/v03/expectedResult.json +6 -0
  76. package/test-fixtures/merge-fields/v03/metadata.json +6 -0
  77. package/test-fixtures/merge-fields/v03/record.json +16 -0
  78. package/test-fixtures/merge-fields/v04/expectedResult.json +4 -0
  79. package/test-fixtures/merge-fields/v04/metadata.json +6 -0
  80. package/test-fixtures/merge-fields/v04/record.json +16 -0
@@ -0,0 +1,1225 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getMergeConstraintsForTag = getMergeConstraintsForTag;
7
+ var _debug = _interopRequireDefault(require("debug"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ const debug = (0, _debug.default)('@natlibfi/melinda-marc-record-merge-reducers:mergeConstraints');
10
+ //const debugData = debug.extend('data');
11
+ const debugDev = debug.extend('dev');
12
+
13
+ // Specs: https://workgroups.helsinki.fi/x/K1ohCw (though we occasionally differ from them)...
14
+
15
+ // "key" is an unique key that must match (be absent or exist+be identical) in both.
16
+ // "paired" refers to a field that must either exist in both or be absent in both (negative XOR). Typically it's not defined.
17
+ // NB: key+paired with identical values is an attempt to prevent copy for (ET) fields, and to force separate fields on (T) fields.
18
+ // NB! If base has eg. no 264, two+ 264 fields can be copied from the source.
19
+
20
+ // NB! not all X00 fields have, say, $x subfield. However, we can still share them...
21
+ // $h is non-1XX?, $i is 7XX only, $w is 8XX only...
22
+ const keyX00 = 'abcjloqrtuwx'; // Shared: $abcdefg...
23
+ const keyX10 = 'abcdfghlnoprstuwx';
24
+ const keyX11 = 'acdefghlnpqstuwx';
25
+ const keyX30 = 'adfghklmnoprstvwxyz';
26
+ const mergeConstraints = [{
27
+ 'tag': '010',
28
+ 'required': 'a',
29
+ 'key': 'a'
30
+ }, {
31
+ 'tag': '013',
32
+ 'required': 'a',
33
+ 'key': 'a'
34
+ },
35
+ // We have 2 instances in Melinda...
36
+ {
37
+ 'tag': '015',
38
+ 'required': 'a',
39
+ 'key': 'a'
40
+ }, {
41
+ 'tag': '016',
42
+ 'required': 'a',
43
+ 'key': 'a2'
44
+ }, {
45
+ 'tag': '017',
46
+ 'required': 'a',
47
+ 'key': 'a'
48
+ }, {
49
+ 'tag': '018',
50
+ 'required': 'a',
51
+ 'key': 'a'
52
+ }, {
53
+ 'tag': '020',
54
+ 'required': '',
55
+ 'paired': 'a',
56
+ 'key': 'a'
57
+ },
58
+ // NB! how to handle $z-only cases? 'required-fallback'='z'?
59
+ {
60
+ 'tag': '022',
61
+ 'required': '',
62
+ 'paired': 'a',
63
+ 'key': 'alz'
64
+ }, {
65
+ 'tag': '024',
66
+ 'required': '',
67
+ 'paired': 'a',
68
+ 'key': 'ad'
69
+ }, {
70
+ 'tag': '025',
71
+ 'required': 'a',
72
+ 'key': 'a'
73
+ }, {
74
+ 'tag': '026',
75
+ 'required': 'a',
76
+ 'key': 'a'
77
+ }, {
78
+ 'tag': '027',
79
+ 'required': 'a',
80
+ 'key': 'a'
81
+ },
82
+ // on tuolla pari $z:ää
83
+ {
84
+ 'tag': '028',
85
+ 'required': 'a',
86
+ 'key': 'ab'
87
+ }, {
88
+ 'tag': '030',
89
+ 'required': 'a',
90
+ 'key': 'a'
91
+ }, {
92
+ 'tag': '031',
93
+ 'required': '',
94
+ 'key': 'abcegmnopr2'
95
+ },
96
+ // mites tämmöisen käytännössä avaimettoman klaarais? TODO: tests
97
+ {
98
+ 'tag': '032',
99
+ 'required': 'a',
100
+ 'key': 'ab'
101
+ }, {
102
+ 'tag': '033',
103
+ 'required': 'a',
104
+ 'key': 'abcp0123'
105
+ },
106
+ // 0,1% are without $a. Ignore them for now.
107
+ {
108
+ 'tag': '034',
109
+ 'required': 'ab',
110
+ 'key': 'abcdefghjkmnprstxyz0123'
111
+ }, {
112
+ 'tag': '035',
113
+ 'required': '',
114
+ 'key': 'az'
115
+ }, {
116
+ 'tag': '036',
117
+ 'required': 'a',
118
+ 'key': 'a'
119
+ }, {
120
+ 'tag': '037',
121
+ 'required': 'b',
122
+ 'key': 'ab'
123
+ }, {
124
+ 'tag': '039',
125
+ 'required': 'a'
126
+ }, {
127
+ 'tag': '040',
128
+ 'required': '',
129
+ 'key': ''
130
+ }, {
131
+ 'tag': '041',
132
+ 'required': '',
133
+ 'paired': '2',
134
+ 'key': ''
135
+ },
136
+ // Don't put $2 in 'key'! hasCommonNominator() would get into trouble with it...
137
+ {
138
+ 'tag': '042',
139
+ 'required': 'a',
140
+ 'key': ''
141
+ },
142
+ // NB: preprocessor hacks applied
143
+ {
144
+ 'tag': '043',
145
+ 'required': 'a',
146
+ 'key': 'abc'
147
+ }, {
148
+ 'tag': '044',
149
+ 'required': '',
150
+ 'key': 'abc',
151
+ 'paired': 'abc'
152
+ }, {
153
+ 'tag': '045',
154
+ 'required': '',
155
+ 'key': 'abc',
156
+ 'paired': 'abc'
157
+ },
158
+ // (ET) // 045 is problematic either-$a or $b or $c...
159
+ {
160
+ 'tag': '046',
161
+ 'required': 'a',
162
+ 'key': 'abcdejklmnop',
163
+ 'paired': 'abcdejklmnop'
164
+ }, {
165
+ 'tag': '047',
166
+ 'required': 'a',
167
+ 'key': 'a2'
168
+ }, {
169
+ 'tag': '048',
170
+ 'required': '',
171
+ 'paired': 'ab',
172
+ 'key': 'ba'
173
+ }, {
174
+ 'tag': '049',
175
+ 'required': '',
176
+ 'key': 'abcd'
177
+ }, {
178
+ 'tag': '050',
179
+ 'required': 'a',
180
+ 'key': 'ab13'
181
+ }, {
182
+ 'tag': '051',
183
+ 'required': 'a',
184
+ 'key': 'abc'
185
+ },
186
+ // 2021-08-27: only one field in the whole Melinda
187
+ {
188
+ 'tag': '052',
189
+ 'required': 'a',
190
+ 'key': 'abd'
191
+ }, {
192
+ 'tag': '055',
193
+ 'required': 'a',
194
+ 'key': 'ab'
195
+ }, {
196
+ 'tag': '060',
197
+ 'required': 'a',
198
+ 'key': 'ab'
199
+ }, {
200
+ 'tag': '061',
201
+ 'required': 'a',
202
+ 'paired': 'b',
203
+ 'key': 'abc'
204
+ }, {
205
+ 'tag': '066',
206
+ 'required': 'c'
207
+ }, {
208
+ 'tag': '070',
209
+ 'required': 'a',
210
+ 'key': 'ab'
211
+ }, {
212
+ 'tag': '071',
213
+ 'required': 'a',
214
+ 'paired': 'abc',
215
+ 'key': 'abc'
216
+ },
217
+ // N=3
218
+ {
219
+ 'tag': '072',
220
+ 'required': 'a',
221
+ 'key': 'ax'
222
+ }, {
223
+ 'tag': '074',
224
+ 'required': '',
225
+ 'paired': 'a',
226
+ 'key': 'az'
227
+ }, {
228
+ 'tag': '080',
229
+ 'required': 'a',
230
+ 'paired': 'bx',
231
+ 'key': 'abx'
232
+ }, {
233
+ 'tag': '082',
234
+ 'required': 'a',
235
+ 'paired': 'b',
236
+ 'key': 'abmq2'
237
+ }, {
238
+ 'tag': '083',
239
+ 'required': 'a',
240
+ 'paired': 'b',
241
+ 'key': 'abmqy'
242
+ }, {
243
+ 'tag': '084',
244
+ 'required': 'a',
245
+ 'paired': 'b2',
246
+ 'key': 'abq2'
247
+ }, {
248
+ 'tag': '085',
249
+ 'required': '',
250
+ 'paired': 'abcfrstuvwyz',
251
+ 'key': 'abcfrstuvwxyz'
252
+ }, {
253
+ 'tag': '086',
254
+ 'required': '',
255
+ 'paired': 'a',
256
+ 'key': 'a'
257
+ }, {
258
+ 'tag': '088',
259
+ 'required': '',
260
+ 'paired': 'a',
261
+ 'key': 'a'
262
+ },
263
+ // NB! 100, 110 and 111 may have title parts that are handled elsewhere
264
+ {
265
+ 'tag': '100',
266
+ 'required': 'a',
267
+ 'paired': 't',
268
+ 'key': keyX00
269
+ }, {
270
+ 'tag': '110',
271
+ 'required': 'a',
272
+ 'paired': 'bt',
273
+ 'key': keyX10
274
+ }, {
275
+ 'tag': '111',
276
+ 'required': 'a',
277
+ 'paired': 't',
278
+ 'key': keyX11
279
+ },
280
+ // NB! 130 has no name part, key is used for title part
281
+ {
282
+ 'tag': '130',
283
+ 'required': 'a',
284
+ 'key': keyX30
285
+ }, {
286
+ 'tag': '210',
287
+ 'required': 'a',
288
+ 'key': 'ab'
289
+ }, {
290
+ 'tag': '222',
291
+ 'required': 'a',
292
+ 'key': 'ab'
293
+ }, {
294
+ 'tag': '240',
295
+ 'required': 'a',
296
+ 'key': 'adfghklmnoprs'
297
+ }, {
298
+ 'tag': '242',
299
+ 'required': 'a',
300
+ 'key': 'abchnpy'
301
+ }, {
302
+ 'tag': '243',
303
+ 'required': 'a',
304
+ 'key': 'adfghklmnoprs'
305
+ }, {
306
+ 'tag': '245',
307
+ 'required': 'a',
308
+ 'key': 'abcghnps',
309
+ 'paired': 'abnps'
310
+ }, {
311
+ 'tag': '246',
312
+ 'required': 'a',
313
+ 'key': 'abfnp'
314
+ }, {
315
+ 'tag': '247',
316
+ 'required': 'a',
317
+ 'key': 'abfnpx'
318
+ }, {
319
+ 'tag': '250',
320
+ 'required': 'a',
321
+ 'key': 'ab'
322
+ }, {
323
+ 'tag': '251',
324
+ 'required': 'a',
325
+ 'key': 'a'
326
+ }, {
327
+ 'tag': '254',
328
+ 'required': 'a',
329
+ 'key': 'a'
330
+ }, {
331
+ 'tag': '255',
332
+ 'required': 'a',
333
+ 'key': 'abcdefg',
334
+ 'paired': 'abcdefg'
335
+ }, {
336
+ 'tag': '256',
337
+ 'required': 'a',
338
+ 'key': 'a'
339
+ }, {
340
+ 'tag': '257',
341
+ 'required': 'a',
342
+ 'key': 'a'
343
+ }, {
344
+ 'tag': '258',
345
+ 'required': 'a',
346
+ 'key': 'a'
347
+ },
348
+ // Melinda: N=1
349
+ //{'tag': '260', 'required': '', 'paired': 'abcefg', 'key': 'abcefg'},
350
+ {
351
+ 'tag': '260',
352
+ 'required': '',
353
+ 'key': 'abcefg'
354
+ }, {
355
+ 'tag': '263',
356
+ 'required': 'a',
357
+ 'key': 'a'
358
+ },
359
+ //{'tag': '264', 'required': '', 'paired': 'abc', 'key': 'abc'}, // NB "S.l." normalizations?" not implemented
360
+ {
361
+ 'tag': '264',
362
+ 'required': '',
363
+ 'key': 'abc'
364
+ },
365
+ // NB "S.l." normalizations?" not implemented
366
+ // SKIP TAG 270 ON PURPOSE! Melinda's N=43.
367
+ {
368
+ 'tag': '300',
369
+ 'required': 'a',
370
+ 'key': 'abcefg'
371
+ }, {
372
+ 'tag': '306',
373
+ 'required': 'a',
374
+ 'key': 'a'
375
+ },
376
+ // SKIP TAG 307 ON PURPOSE! N=0
377
+ {
378
+ 'tag': '310',
379
+ 'required': 'a',
380
+ 'key': 'ab'
381
+ }, {
382
+ 'tag': '321',
383
+ 'required': 'a',
384
+ 'key': 'ab'
385
+ }, {
386
+ 'tag': '335',
387
+ 'required': 'a',
388
+ 'key': 'ab'
389
+ },
390
+ // Melinda N=1 (a test field). M might increase?
391
+ {
392
+ 'tag': '336',
393
+ 'required': 'b2',
394
+ 'key': 'ab2'
395
+ },
396
+ // MET-88: don't merge different $a subfields
397
+ {
398
+ 'tag': '337',
399
+ 'required': 'b2',
400
+ 'key': 'ab2'
401
+ },
402
+ // MET-88: don't merge different $a subfields
403
+ {
404
+ 'tag': '338',
405
+ 'required': 'b2',
406
+ 'key': 'ab2'
407
+ },
408
+ // / MET-88: don't merge different $a subfields
409
+ {
410
+ 'tag': '340',
411
+ 'required': '',
412
+ 'paired': 'abcdefghijkmnop',
413
+ 'key': 'abcdefghijkmnop'
414
+ }, {
415
+ 'tag': '341',
416
+ 'required': '',
417
+ 'paired': 'abcde',
418
+ 'key': 'abcde'
419
+ },
420
+ // NEW! Starting to appear!
421
+ {
422
+ 'tag': '342',
423
+ 'required': '',
424
+ 'paired': 'abcdefghijklmnopqrstuvw',
425
+ 'key': 'abcdefghijklmnopqrstuvw'
426
+ },
427
+ // SKIP 342. NOT SEEN!
428
+ {
429
+ 'tag': '343',
430
+ 'required': '',
431
+ 'paired': 'abcdefghi',
432
+ 'key': 'abcdefghi'
433
+ },
434
+ // SKIP 343.
435
+ {
436
+ 'tag': '344',
437
+ 'required': '',
438
+ 'paired': 'abcdefgh',
439
+ 'key': 'abcdefgh'
440
+ }, {
441
+ 'tag': '345',
442
+ 'required': '',
443
+ 'paired': 'abcd',
444
+ 'key': 'abcd'
445
+ }, {
446
+ 'tag': '346',
447
+ 'required': '',
448
+ 'paired': 'ab',
449
+ 'key': 'ab'
450
+ }, {
451
+ 'tag': '347',
452
+ 'required': '',
453
+ 'paired': 'abcdef',
454
+ 'key': 'abcdef'
455
+ }, {
456
+ 'tag': '348',
457
+ 'required': '',
458
+ 'paired': 'ab',
459
+ 'key': 'ab'
460
+ }, {
461
+ 'tag': '348',
462
+ 'required': '',
463
+ 'paired': 'abc',
464
+ 'key': 'abc'
465
+ }, {
466
+ 'tag': '351',
467
+ 'required': '',
468
+ 'paired': 'abc',
469
+ 'key': 'abc'
470
+ }, {
471
+ 'tag': '352',
472
+ 'required': '',
473
+ 'paired': 'abcdefgiq',
474
+ 'key': 'abcdefgiq'
475
+ }, {
476
+ 'tag': '355',
477
+ 'required': '',
478
+ 'paired': 'abcdefghj',
479
+ 'key': 'abcdefghj'
480
+ }, {
481
+ 'tag': '357',
482
+ 'required': 'a',
483
+ 'key': 'abcg'
484
+ }, {
485
+ 'tag': '362',
486
+ 'required': 'a',
487
+ 'key': 'az'
488
+ }, {
489
+ 'tag': '363',
490
+ 'required': '',
491
+ 'paired': 'abcdefghijklmuv',
492
+ 'key': 'abcdefghijklmuv'
493
+ }, {
494
+ 'tag': '365',
495
+ 'required': 'b',
496
+ 'paired': 'abcdefghijkm',
497
+ 'key': 'abcdefghijkm'
498
+ },
499
+ // N=0
500
+ {
501
+ 'tag': '366',
502
+ 'required': '',
503
+ 'paired': 'abcdefgjkm',
504
+ 'key': 'abcdefgjkm'
505
+ }, {
506
+ 'tag': '370',
507
+ 'required': '',
508
+ 'paired': 'cfgistuv',
509
+ 'key': 'cfgistuv'
510
+ }, {
511
+ 'tag': '377',
512
+ 'required': '',
513
+ 'paired': 'al',
514
+ 'key': 'al'
515
+ }, {
516
+ 'tag': '380',
517
+ 'required': 'a',
518
+ 'key': 'a'
519
+ }, {
520
+ 'tag': '381',
521
+ 'required': 'auv',
522
+ 'key': 'auv'
523
+ }, {
524
+ 'tag': '382',
525
+ 'required': ''
526
+ }, {
527
+ 'tag': '383',
528
+ 'required': 'abcde',
529
+ 'key': 'abcde'
530
+ }, {
531
+ 'tag': '384',
532
+ 'required': 'a',
533
+ 'key': 'a'
534
+ }, {
535
+ 'tag': '385',
536
+ 'required': 'a',
537
+ 'paired': 'abmn',
538
+ 'key': 'abmn'
539
+ }, {
540
+ 'tag': '386',
541
+ 'required': 'a',
542
+ 'paired': 'abmn',
543
+ 'key': 'abmn'
544
+ }, {
545
+ 'tag': '388',
546
+ 'required': 'a',
547
+ 'key': 'a'
548
+ }, {
549
+ 'tag': '490',
550
+ 'required': 'a',
551
+ 'key': 'axvl'
552
+ }, {
553
+ 'tag': '500',
554
+ 'required': 'a',
555
+ 'key': 'a'
556
+ }, {
557
+ 'tag': '501',
558
+ 'required': 'a',
559
+ 'key': 'a'
560
+ }, {
561
+ 'tag': '502',
562
+ 'required': 'a',
563
+ 'key': 'abcdgo'
564
+ }, {
565
+ 'tag': '504',
566
+ 'required': 'a',
567
+ 'paired': 'ab',
568
+ 'key': 'ab'
569
+ }, {
570
+ 'tag': '505',
571
+ 'required': '',
572
+ 'paired': 'agrtu',
573
+ 'key': 'agrtu'
574
+ }, {
575
+ 'tag': '506',
576
+ 'required': 'a',
577
+ 'paired': '',
578
+ 'key': 'abcdefgqu'
579
+ }, {
580
+ 'tag': '507',
581
+ 'required': 'a',
582
+ 'paired': 'ab',
583
+ 'key': 'ab'
584
+ }, {
585
+ 'tag': '508',
586
+ 'required': 'a',
587
+ 'key': 'a'
588
+ }, {
589
+ 'tag': '509',
590
+ 'required': 'a',
591
+ 'key': 'acd'
592
+ }, {
593
+ 'tag': '510',
594
+ 'required': 'a',
595
+ 'key': 'abcx'
596
+ }, {
597
+ 'tag': '511',
598
+ 'required': 'a',
599
+ 'key': 'a'
600
+ }, {
601
+ 'tag': '513',
602
+ 'required': '',
603
+ 'paired': 'ab',
604
+ 'key': 'ab'
605
+ }, {
606
+ 'tag': '514',
607
+ 'required': '',
608
+ 'paired': 'abcdefghijkmuz',
609
+ 'key': 'abcdefghijkmuz'
610
+ }, {
611
+ 'tag': '515',
612
+ 'required': 'a',
613
+ 'key': 'a'
614
+ }, {
615
+ 'tag': '518',
616
+ 'required': '',
617
+ 'paired': 'adop',
618
+ 'key': 'adop'
619
+ }, {
620
+ 'tag': '520',
621
+ 'required': 'a',
622
+ 'paired': 'abc',
623
+ 'key': 'abc'
624
+ }, {
625
+ 'tag': '521',
626
+ 'required': 'a',
627
+ 'paired': 'ab',
628
+ 'key': 'ab'
629
+ }, {
630
+ 'tag': '522',
631
+ 'required': 'a',
632
+ 'key': 'a'
633
+ }, {
634
+ 'tag': '524',
635
+ 'required': 'a',
636
+ 'key': 'a'
637
+ }, {
638
+ 'tag': '525',
639
+ 'required': 'a',
640
+ 'key': 'a'
641
+ }, {
642
+ 'tag': '526',
643
+ 'required': 'a',
644
+ 'paired': 'abcdi',
645
+ 'key': 'abcdi'
646
+ }, {
647
+ 'tag': '530',
648
+ 'required': 'a',
649
+ 'paired': 'abcd',
650
+ 'key': 'abcd'
651
+ }, {
652
+ 'tag': '532',
653
+ 'required': 'a',
654
+ 'key': 'a'
655
+ }, {
656
+ 'tag': '533',
657
+ 'required': 'a',
658
+ 'paired': 'abcdefmn7',
659
+ 'key': 'abcdefmn7'
660
+ }, {
661
+ 'tag': '534',
662
+ 'required': '',
663
+ 'paired': 'abcempt',
664
+ 'key': 'abcempt'
665
+ }, {
666
+ 'tag': '535',
667
+ 'required': '',
668
+ 'paired': 'abcdg',
669
+ 'key': 'abcdg'
670
+ }, {
671
+ 'tag': '536',
672
+ 'required': '',
673
+ 'paired': 'abcdefgh',
674
+ 'key': 'abcdefgh'
675
+ }, {
676
+ 'tag': '538',
677
+ 'required': 'a',
678
+ 'paired': 'aiu',
679
+ 'key': 'aiu'
680
+ }, {
681
+ 'tag': '540',
682
+ 'required': '',
683
+ 'paired': 'abcdfgqu',
684
+ 'key': 'abcdfgqu'
685
+ }, {
686
+ 'tag': '541',
687
+ 'required': '',
688
+ 'paired': 'abcdefhno',
689
+ 'key': 'abcdefhno'
690
+ }, {
691
+ 'tag': '542',
692
+ 'required': '',
693
+ 'paired': 'abcdfghijklmopqrsu',
694
+ 'key': 'abcdfghijklmopqrsu'
695
+ }, {
696
+ 'tag': '544',
697
+ 'required': '',
698
+ 'paired': 'abcden',
699
+ 'key': 'abcden'
700
+ }, {
701
+ 'tag': '545',
702
+ 'required': '',
703
+ 'paired': 'abu',
704
+ 'key': 'abu'
705
+ }, {
706
+ 'tag': '546',
707
+ 'required': '',
708
+ 'paired': 'ab',
709
+ 'key': 'ab'
710
+ }, {
711
+ 'tag': '547',
712
+ 'required': 'a',
713
+ 'key': 'a'
714
+ }, {
715
+ 'tag': '550',
716
+ 'required': 'a',
717
+ 'key': 'a'
718
+ }, {
719
+ 'tag': '552',
720
+ 'required': '',
721
+ 'paired': 'abcdefghijklmnopuz',
722
+ 'key': 'abcdefghijklmnopuz'
723
+ }, {
724
+ 'tag': '555',
725
+ 'required': 'a',
726
+ 'paired': 'abcdu',
727
+ 'key': 'abcdu'
728
+ }, {
729
+ 'tag': '556',
730
+ 'required': 'a',
731
+ 'key': 'az'
732
+ }, {
733
+ 'tag': '561',
734
+ 'required': 'a',
735
+ 'key': 'au'
736
+ }, {
737
+ 'tag': '562',
738
+ 'required': '',
739
+ 'paired': 'abcde',
740
+ 'key': 'abcde'
741
+ }, {
742
+ 'tag': '563',
743
+ 'required': 'a',
744
+ 'key': 'au'
745
+ }, {
746
+ 'tag': '565',
747
+ 'required': '',
748
+ 'paired': 'abc',
749
+ 'key': 'abc'
750
+ }, {
751
+ 'tag': '567',
752
+ 'required': '',
753
+ 'paired': 'ab',
754
+ 'key': 'ab'
755
+ }, {
756
+ 'tag': '580',
757
+ 'required': 'a',
758
+ 'key': 'a'
759
+ }, {
760
+ 'tag': '581',
761
+ 'required': 'a',
762
+ 'key': 'a'
763
+ }, {
764
+ 'tag': '583',
765
+ 'required': '',
766
+ 'paired': 'abcdefhijklnou',
767
+ 'key': 'abcdefhijklnou'
768
+ }, {
769
+ 'tag': '584',
770
+ 'required': '',
771
+ 'paired': 'ab',
772
+ 'key': 'ab'
773
+ }, {
774
+ 'tag': '585',
775
+ 'required': 'a',
776
+ 'key': 'a'
777
+ }, {
778
+ 'tag': '586',
779
+ 'required': 'a',
780
+ 'key': 'a'
781
+ }, {
782
+ 'tag': '588',
783
+ 'required': 'a',
784
+ 'key': 'a'
785
+ }, {
786
+ 'tag': '590',
787
+ 'required': ''
788
+ }, {
789
+ 'tag': '591',
790
+ 'required': ''
791
+ }, {
792
+ 'tag': '592',
793
+ 'required': ''
794
+ }, {
795
+ 'tag': '593',
796
+ 'required': ''
797
+ }, {
798
+ 'tag': '594',
799
+ 'required': ''
800
+ }, {
801
+ 'tag': '595',
802
+ 'required': ''
803
+ }, {
804
+ 'tag': '596',
805
+ 'required': ''
806
+ }, {
807
+ 'tag': '597',
808
+ 'required': ''
809
+ }, {
810
+ 'tag': '598',
811
+ 'required': ''
812
+ }, {
813
+ 'tag': '599',
814
+ 'required': ''
815
+ }, {
816
+ 'tag': '600',
817
+ 'required': 'a',
818
+ 'paired': 'tvxyz',
819
+ 'key': keyX00
820
+ }, {
821
+ 'tag': '610',
822
+ 'required': 'a',
823
+ 'paired': 'btvxyz',
824
+ 'key': keyX10
825
+ }, {
826
+ 'tag': '611',
827
+ 'required': 'a',
828
+ 'paired': 'tvxyz',
829
+ 'key': keyX11
830
+ }, {
831
+ 'tag': '630',
832
+ 'required': 'a',
833
+ 'paired': 'atvxyz',
834
+ 'key': keyX30
835
+ },
836
+ // NB! 700, 710 and 711 may have title parts that are handled elsewhere
837
+ {
838
+ 'tag': '647',
839
+ 'required': 'a',
840
+ 'paired': 'avxyz',
841
+ 'key': 'acdgvxyz02'
842
+ }, {
843
+ 'tag': '648',
844
+ 'required': 'a',
845
+ 'paired': 'avxyz',
846
+ 'key': 'avxyz02'
847
+ }, {
848
+ 'tag': '650',
849
+ 'required': 'a',
850
+ 'paired': 'abcdegvxyz',
851
+ 'key': 'abcdegvxyz20'
852
+ }, {
853
+ 'tag': '651',
854
+ 'required': 'a',
855
+ 'paired': 'aegvxyz',
856
+ 'key': 'aegvxyz20'
857
+ }, {
858
+ 'tag': '653',
859
+ 'required': 'a',
860
+ 'paired': 'a',
861
+ 'key': 'a'
862
+ },
863
+ // this is interesting as a can be repeated
864
+ {
865
+ 'tag': '654',
866
+ 'required': '',
867
+ 'paired': 'abcevxyz'
868
+ }, {
869
+ 'tag': '655',
870
+ 'required': 'a',
871
+ 'paired': 'abcvxyz',
872
+ 'key': 'avxyz20'
873
+ }, {
874
+ 'tag': '656',
875
+ 'required': 'a',
876
+ 'paired': 'akvxyz'
877
+ },
878
+ // N=0
879
+ {
880
+ 'tag': '657',
881
+ 'required': 'a',
882
+ 'paired': 'avxyz'
883
+ },
884
+ // N=0
885
+ {
886
+ 'tag': '658',
887
+ 'required': 'a',
888
+ 'paired': 'abcd'
889
+ },
890
+ // N=0
891
+ {
892
+ 'tag': '662',
893
+ 'required': '',
894
+ 'paired': 'abcdefgh'
895
+ },
896
+ // N=0
897
+ {
898
+ 'tag': '688',
899
+ 'required': 'a'
900
+ },
901
+ // N=0
902
+ {
903
+ 'tag': '700',
904
+ 'required': 'a',
905
+ 'paired': 't',
906
+ 'key': keyX00
907
+ },
908
+ // h/i/m/o/r/s/x are missing from 100
909
+ {
910
+ 'tag': '710',
911
+ 'required': 'a',
912
+ 'paired': 'bt',
913
+ 'key': keyX10
914
+ },
915
+ // h/j/m/o/r/s/x are missing from 110
916
+ {
917
+ 'tag': '711',
918
+ 'required': 'a',
919
+ 'paired': 'cdeflns',
920
+ 'key': keyX11
921
+ },
922
+ // h/i/s/x are missing from 711
923
+ {
924
+ 'tag': '720',
925
+ 'required': 'a',
926
+ 'key': 'a'
927
+ },
928
+ // NB! 730 has no name part, key is used for title part
929
+ {
930
+ 'tag': '730',
931
+ 'required': 'a',
932
+ 'key': keyX30
933
+ },
934
+ // NB: 130->730 magic subfields might not agree...
935
+ {
936
+ 'tag': '740',
937
+ 'required': 'a',
938
+ 'key': 'ahnp'
939
+ }, {
940
+ 'tag': '751',
941
+ 'required': 'a',
942
+ 'key': 'a'
943
+ },
944
+ // N=11, kaikissa pelkkä $a
945
+ {
946
+ 'tag': '752',
947
+ 'required': '',
948
+ 'key': 'abcdefgh'
949
+ },
950
+ // N=12234
951
+ {
952
+ 'tag': '753',
953
+ 'required': '',
954
+ 'key': 'abc'
955
+ }, {
956
+ 'tag': '754',
957
+ 'required': '',
958
+ 'key': 'acdxz'
959
+ },
960
+ // N=3
961
+ {
962
+ 'tag': '758',
963
+ 'required': 'a',
964
+ 'key': 'ai'
965
+ },
966
+ // N=1
967
+
968
+ {
969
+ 'tag': '760',
970
+ 'required': 'tw',
971
+ key: 'twxy'
972
+ }, {
973
+ 'tag': '762',
974
+ 'required': 't',
975
+ key: 'abcdhmstxy'
976
+ }, {
977
+ 'tag': '765',
978
+ 'required': 't',
979
+ key: 'abcdhmrstuwxyz'
980
+ }, {
981
+ 'tag': '767',
982
+ 'required': 't',
983
+ key: 'abcdhmrstuwxyz'
984
+ }, {
985
+ 'tag': '770',
986
+ 'required': 't',
987
+ 'paired': 'ruxyz',
988
+ key: 'abcdhmrstuwxyz'
989
+ }, {
990
+ 'tag': '772',
991
+ 'required': 't',
992
+ key: 'abcdhmrstuwxyz'
993
+ }, {
994
+ 'tag': '773',
995
+ 'required': 'w',
996
+ key: 'wgq'
997
+ },
998
+ // Kirjavälitys should not have any component parts. However, this need to be re-thought...
999
+ // Currently we (appently) drop fields that don't contain 773$w...
1000
+ {
1001
+ 'tag': '774',
1002
+ 'required': '',
1003
+ 'paired': 'nruxyz',
1004
+ 'key': 'npqrstrxyz'
1005
+ }, {
1006
+ 'tag': '775',
1007
+ 'required': '',
1008
+ 'paired': 'ruxyz',
1009
+ 'key': 'abcdefhmstuxyz'
1010
+ }, {
1011
+ 'tag': '776',
1012
+ 'required': '',
1013
+ 'paired': 'ruxyz',
1014
+ 'key': 'abcdhmsuwxyz'
1015
+ }, {
1016
+ 'tag': '777',
1017
+ 'required': '',
1018
+ 'paired': 'ruxyz',
1019
+ 'key': 'abcdhmstuxyz'
1020
+ }, {
1021
+ 'tag': '780',
1022
+ 'required': '',
1023
+ 'paired': 'ruxyz',
1024
+ 'key': 'abcdhmstuxyz'
1025
+ }, {
1026
+ 'tag': '785',
1027
+ 'required': '',
1028
+ 'paired': 'uxyz',
1029
+ 'key': 'abcdhmstuxyz'
1030
+ }, {
1031
+ 'tag': '786',
1032
+ 'required': '',
1033
+ 'paired': 'abcrstuxyz',
1034
+ 'key': 'abcdhijmprstuxyz4'
1035
+ }, {
1036
+ 'tag': '787',
1037
+ 'required': '',
1038
+ 'paired': 'abcdhmstuxyz4'
1039
+ }, {
1040
+ 'tag': '788',
1041
+ 'required': '',
1042
+ 'paired': 'stx',
1043
+ 'key': 'abdestx'
1044
+ }, {
1045
+ 'tag': '800',
1046
+ 'required': 'a',
1047
+ 'paired': 't',
1048
+ 'key': keyX00
1049
+ }, {
1050
+ 'tag': '810',
1051
+ 'required': 'a',
1052
+ 'paired': 'bt',
1053
+ 'key': keyX10
1054
+ }, {
1055
+ 'tag': '811',
1056
+ 'required': 'a',
1057
+ 'paired': 't',
1058
+ 'key': keyX11
1059
+ }, {
1060
+ 'tag': '830',
1061
+ 'required': 'a',
1062
+ 'key': keyX30
1063
+ }, {
1064
+ 'tag': '840',
1065
+ 'required': 'a'
1066
+ }, {
1067
+ 'tag': '841',
1068
+ 'required': 'a'
1069
+ }, {
1070
+ 'tag': '842',
1071
+ 'required': 'a'
1072
+ }, {
1073
+ 'tag': '843',
1074
+ 'required': 'a'
1075
+ }, {
1076
+ 'tag': '844',
1077
+ 'required': 'a'
1078
+ }, {
1079
+ 'tag': '845',
1080
+ 'required': 'a'
1081
+ }, {
1082
+ 'tag': '850',
1083
+ 'required': 'a',
1084
+ 'key': 'a'
1085
+ }, {
1086
+ 'tag': '852',
1087
+ 'required': 'a'
1088
+ },
1089
+ // HMM... we might want to reconsider this...
1090
+ {
1091
+ 'tag': '853',
1092
+ 'required': 'a'
1093
+ }, {
1094
+ 'tag': '854',
1095
+ 'required': 'a'
1096
+ }, {
1097
+ 'tag': '855',
1098
+ 'required': 'a'
1099
+ }, {
1100
+ 'tag': '856',
1101
+ 'required': 'u',
1102
+ 'paired': 'u',
1103
+ 'key': 'opuw23'
1104
+ },
1105
+ // 856 is built around $u...
1106
+ {
1107
+ 'tag': '863',
1108
+ 'required': 'a'
1109
+ }, {
1110
+ 'tag': '864',
1111
+ 'required': 'a'
1112
+ }, {
1113
+ 'tag': '865',
1114
+ 'required': 'a'
1115
+ }, {
1116
+ 'tag': '866',
1117
+ 'required': 'a'
1118
+ }, {
1119
+ 'tag': '867',
1120
+ 'required': 'a'
1121
+ }, {
1122
+ 'tag': '868',
1123
+ 'required': 'a'
1124
+ }, {
1125
+ 'tag': '876',
1126
+ 'required': 'a'
1127
+ }, {
1128
+ 'tag': '877',
1129
+ 'required': 'a'
1130
+ }, {
1131
+ 'tag': '878',
1132
+ 'required': 'a'
1133
+ }, {
1134
+ 'tag': '880',
1135
+ 'required': '',
1136
+ 'paired': 'a',
1137
+ 'key': 'abcdefghijklmnopqrstuvwxyz'
1138
+ }, {
1139
+ 'tag': '881',
1140
+ 'required': ''
1141
+ }, {
1142
+ 'tag': '882',
1143
+ 'required': ''
1144
+ }, {
1145
+ 'tag': '883',
1146
+ 'required': ''
1147
+ }, {
1148
+ 'tag': '884',
1149
+ 'required': '',
1150
+ 'paired': 'agkq'
1151
+ }, {
1152
+ 'tag': '885',
1153
+ 'required': ''
1154
+ }, {
1155
+ 'tag': '886',
1156
+ 'required': ''
1157
+ }, {
1158
+ 'tag': '887',
1159
+ 'required': ''
1160
+ }, {
1161
+ 'tag': '900',
1162
+ 'required': ''
1163
+ }, {
1164
+ 'tag': '901',
1165
+ 'required': ''
1166
+ }, {
1167
+ 'tag': '910',
1168
+ 'required': ''
1169
+ }, {
1170
+ 'tag': '935',
1171
+ 'required': 'a',
1172
+ 'key': 'az'
1173
+ },
1174
+ // Fono information at least
1175
+ {
1176
+ 'tag': '940',
1177
+ 'required': ''
1178
+ }, {
1179
+ 'tag': '946',
1180
+ 'required': 'a',
1181
+ 'key': 'abfnp'
1182
+ },
1183
+ // Copied from 246. However, final version might contain some elements from field 245 as well
1184
+ {
1185
+ 'tag': '960',
1186
+ 'required': ''
1187
+ }, {
1188
+ 'tag': '973',
1189
+ 'required': 'w',
1190
+ 'key': 'w'
1191
+ },
1192
+ // Viola multi-hosts
1193
+ {
1194
+ 'tag': '995',
1195
+ 'required': ''
1196
+ }, {
1197
+ 'tag': 'CAT',
1198
+ 'required': ''
1199
+ }, {
1200
+ 'tag': 'LOW',
1201
+ 'required': ''
1202
+ }, {
1203
+ 'tag': 'SID',
1204
+ 'required': ''
1205
+ }];
1206
+ function constraintToValue(tagsConstraints, constraintName) {
1207
+ if (constraintName in tagsConstraints) {
1208
+ return tagsConstraints[constraintName];
1209
+ }
1210
+ return null; // NB! "" might mean "apply to everything" (eg. 040.key) while null means that it is not applied.
1211
+ }
1212
+ function getMergeConstraintsForTag(tag, constraintName) {
1213
+ const tagsConstraintsArray = mergeConstraints.filter(entry => tag === entry.tag);
1214
+ if (tagsConstraintsArray.length === 0) {
1215
+ debugDev(`WARNING\tNo key found for ${tag}. Returning NULL!`);
1216
+ return null;
1217
+ }
1218
+ // NB! should we support multiple contains for a field? Eg. 505$a vs 505($tg)+
1219
+ if (tagsConstraintsArray.length > 1) {
1220
+ // eslint-disable-line functional/no-conditional-statements
1221
+ debugDev(`WARNING\tMultiple values for '${constraintName}' (N=${tagsConstraintsArray.length}) found in ${tag}. Using first values.`);
1222
+ }
1223
+ return constraintToValue(tagsConstraintsArray[0], constraintName);
1224
+ }
1225
+ //# sourceMappingURL=mergeConstraints.js.map