@natlibfi/marc-record-validators-melinda 10.13.1 → 10.14.0-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.
- package/dist/ending-punctuation-conf.js +3 -6
- package/dist/ending-punctuation-conf.js.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/punctuation/rules/aut.js +1 -2
- package/dist/punctuation/rules/aut.js.map +1 -1
- package/dist/punctuation/rules/bib.js +1 -2
- package/dist/punctuation/rules/bib.js.map +1 -1
- package/dist/punctuation2.js +40 -14
- package/dist/punctuation2.js.map +1 -1
- package/dist/removeInferiorDataFields.js +166 -168
- package/dist/removeInferiorDataFields.js.map +1 -1
- package/dist/sortFields.js +383 -0
- package/dist/sortFields.js.map +1 -0
- package/dist/sortFields.spec.js +51 -0
- package/dist/sortFields.spec.js.map +1 -0
- package/dist/sortRelatorTerms.js +3 -25
- package/dist/sortRelatorTerms.js.map +1 -1
- package/dist/sortSubfields.js +14 -4
- package/dist/sortSubfields.js.map +1 -1
- package/dist/sortSubfields.spec.js +4 -3
- package/dist/sortSubfields.spec.js.map +1 -1
- package/dist/utils.js +4 -0
- package/dist/utils.js.map +1 -1
- package/package.json +7 -7
- package/src/index.js +3 -1
- package/src/punctuation2.js +14 -7
- package/src/removeInferiorDataFields.js +166 -169
- package/src/sortFields.js +393 -0
- package/src/sortFields.spec.js +52 -0
- package/src/sortRelatorTerms.js +3 -25
- package/src/sortSubfields.js +18 -4
- package/src/sortSubfields.spec.js +3 -3
- package/src/utils.js +5 -0
- package/test-fixtures/remove-inferior-datafields/f01/expectedResult.json +12 -0
- package/test-fixtures/remove-inferior-datafields/f01/record.json +19 -0
- package/test-fixtures/sort-fields/01/input.json +32 -0
- package/test-fixtures/sort-fields/01/metadata.json +5 -0
- package/test-fixtures/sort-fields/01/result.json +29 -0
- package/test-fixtures/sort-fields/02/input.json +49 -0
- package/test-fixtures/sort-fields/02/metadata.json +4 -0
- package/test-fixtures/sort-fields/02/result.json +50 -0
- package/test-fixtures/sort-fields/03/input.json +20 -0
- package/test-fixtures/sort-fields/03/metadata.json +5 -0
- package/test-fixtures/sort-fields/03/result.json +21 -0
- package/test-fixtures/sort-fields/04/input.json +13 -0
- package/test-fixtures/sort-fields/04/metadata.json +4 -0
- package/test-fixtures/sort-fields/04/result.json +13 -0
- package/test-fixtures/sort-fields/05/input.json +27 -0
- package/test-fixtures/sort-fields/05/metadata.json +4 -0
- package/test-fixtures/sort-fields/05/result.json +28 -0
- package/test-fixtures/sort-fields/06/input.json +36 -0
- package/test-fixtures/sort-fields/06/metadata.json +4 -0
- package/test-fixtures/sort-fields/06/result.json +37 -0
- package/test-fixtures/sort-fields/07/input.json +21 -0
- package/test-fixtures/sort-fields/07/metadata.json +4 -0
- package/test-fixtures/sort-fields/07/result.json +22 -0
- package/test-fixtures/sort-fields/08/input.json +29 -0
- package/test-fixtures/sort-fields/08/metadata.json +5 -0
- package/test-fixtures/sort-fields/08/result.json +29 -0
- package/test-fixtures/sort-fields/09/input.json +41 -0
- package/test-fixtures/sort-fields/09/metadata.json +5 -0
- package/test-fixtures/sort-fields/09/result.json +42 -0
- package/test-fixtures/sort-fields/10/input.json +54 -0
- package/test-fixtures/sort-fields/10/metadata.json +5 -0
- package/test-fixtures/sort-fields/10/result.json +53 -0
- package/test-fixtures/sort-subfields/f02/expectedResult.json +26 -0
- package/test-fixtures/sort-subfields/f02/metadata.json +7 -0
- package/test-fixtures/sort-subfields/f02/record.json +25 -0
|
@@ -50,45 +50,52 @@ function _default() {
|
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
function deriveInferiorChains(fields, record) {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
53
|
+
//nvdebug(`======= GOT ${fields.length} FIELDS TO CHAINIFY`);
|
|
54
|
+
const hash = {};
|
|
55
|
+
fields.forEach(f => fieldToChainToDeletables(f));
|
|
56
|
+
return hash;
|
|
57
|
+
|
|
58
|
+
//nvdebug(`WP1: GOT ${todoList.length} CHAINS`);
|
|
59
|
+
|
|
60
|
+
// here we map deletableStringObject[str] => field. The idea is to help debugging. We don't actually need the field object...
|
|
61
|
+
//return deriveChainDeletables(todoList);
|
|
62
|
+
|
|
63
|
+
function fieldToChainToDeletables(field) {
|
|
58
64
|
const chain = (0, _removeDuplicateDataFields.fieldToChain)(field, record);
|
|
59
|
-
if (chain.length
|
|
65
|
+
if (chain.length < 2) {
|
|
60
66
|
return;
|
|
61
67
|
}
|
|
62
68
|
const chainAsString = (0, _subfield6Utils.fieldsToNormalizedString)(chain, 0, true, true);
|
|
69
|
+
const arr = deriveChainDeletables([chainAsString]);
|
|
70
|
+
//nvdebug(`GOT ${arr.length} DELETABLES FOR ${chainAsString}`);
|
|
71
|
+
arr.forEach(val => {
|
|
72
|
+
if (!(val in hash)) {
|
|
73
|
+
// eslint-disable-line functional/no-conditional-statements
|
|
74
|
+
hash[val] = field; // eslint-disable-line functional/immutable-data
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
63
78
|
|
|
64
|
-
|
|
79
|
+
function deriveChainDeletables(todoList, deletables = []) {
|
|
80
|
+
const [chainAsString, ...stillToDo] = todoList;
|
|
81
|
+
if (chainAsString === undefined) {
|
|
82
|
+
return deletables;
|
|
83
|
+
}
|
|
65
84
|
|
|
66
85
|
// Fix MRA-476 (part 1): one $6 value can be worse than the other
|
|
67
|
-
|
|
68
|
-
while (tmp.match(/ ‡6 [0-9X][0-9][0-9]-(?:XX|[0-9]+)\/[^ ]+/u)) {
|
|
69
|
-
tmp = tmp.replace(/( ‡6 [0-9X][0-9][0-9]-(?:XX|[0-9]+))\/[^ ]+/u, '$1');
|
|
70
|
-
//nvdebug(`FFS: ${tmp}`);
|
|
71
|
-
deletableStringsObject[tmp] = field;
|
|
72
|
-
}
|
|
86
|
+
const withoutScriptIdentificationCode = chainAsString.replace(/( ‡6 [0-9X][0-9][0-9]-(?:XX|[0-9]+))\/[^ ]+/u, '$1'); // eslint-disable-line prefer-named-capture-group
|
|
73
87
|
|
|
74
88
|
// Remove keepless versions:
|
|
75
|
-
|
|
76
|
-
while (tmp.match(/ ‡9 [A-Z]+<KEEP>/)) {
|
|
77
|
-
tmp = tmp.replace(/ ‡9 [A-Z]+<KEEP>/, '');
|
|
78
|
-
deletableStringsObject[tmp] = field;
|
|
79
|
-
//nvdebug(`FFS: ${tmp}`);
|
|
80
|
-
}
|
|
89
|
+
const keepless = chainAsString.replace(/ ‡9 [A-Z]+<KEEP>/u, '');
|
|
81
90
|
|
|
82
91
|
// MRA-433: 490 ind1=1 vs ind1=0: remove latter (luckily no 2nd indicator etc)
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
92
|
+
const linked490Ind1 = chainAsString.replace(/^490 1/u, '490 0').replace(/\t880 1/ug, '\t880 0');
|
|
93
|
+
const arr = [withoutScriptIdentificationCode, keepless, linked490Ind1].filter(val => val !== chainAsString);
|
|
94
|
+
if (arr.length > 0) {
|
|
95
|
+
return deriveChainDeletables([...stillToDo, ...arr], [...deletables, ...arr]);
|
|
87
96
|
}
|
|
97
|
+
return deriveChainDeletables(stillToDo, deletables);
|
|
88
98
|
}
|
|
89
|
-
|
|
90
|
-
/* eslint-enable */
|
|
91
|
-
return deletableStringsObject;
|
|
92
99
|
}
|
|
93
100
|
function isRelevantChain6(field, record) {
|
|
94
101
|
//Can't be a chain:
|
|
@@ -105,13 +112,8 @@ function isRelevantChain6(field, record) {
|
|
|
105
112
|
return false;
|
|
106
113
|
}
|
|
107
114
|
|
|
108
|
-
//
|
|
109
|
-
|
|
110
|
-
field.tmpInferiorId = 666;
|
|
111
|
-
const result = chain[0].tmpInferiorId === 666 ? true : false;
|
|
112
|
-
delete field.tmpInferiorId;
|
|
113
|
-
/* eslint-enable */
|
|
114
|
-
return result;
|
|
115
|
+
// Check whether our field is the head of a chain:
|
|
116
|
+
return (0, _removeDuplicateDataFields.sameField)(field, chain[0]);
|
|
115
117
|
}
|
|
116
118
|
function removeInferiorChains(record, fix = true) {
|
|
117
119
|
const fields = record.fields.filter(f => isRelevantChain6(f, record));
|
|
@@ -123,12 +125,41 @@ function removeInferiorChains(record, fix = true) {
|
|
|
123
125
|
if (nChains === 0) {
|
|
124
126
|
return [];
|
|
125
127
|
}
|
|
126
|
-
(0, _utils.nvdebug)(`removeInferiorChains() has ${fields.length} fields-in-chain(s), and a list of ${nChains} deletable(s)`);
|
|
127
128
|
|
|
128
|
-
|
|
129
|
+
//nvdebug(`removeInferiorChains() has ${fields.length} fields-in-chain(s), and a list of ${nChains} deletable(s)`);
|
|
129
130
|
|
|
130
|
-
|
|
131
|
-
fields
|
|
131
|
+
return innerRemoveInferiorChains(fields);
|
|
132
|
+
function innerRemoveInferiorChains(fields, deletedStringsArray = []) {
|
|
133
|
+
const [currField, ...remainingFields] = fields;
|
|
134
|
+
if (currField === undefined) {
|
|
135
|
+
return deletedStringsArray;
|
|
136
|
+
}
|
|
137
|
+
const chain = (0, _removeDuplicateDataFields.fieldToChain)(currField, record);
|
|
138
|
+
if (chain.length === 0 || !(0, _removeDuplicateDataFields.sameField)(currField, chain[0])) {
|
|
139
|
+
return innerRemoveInferiorChains(remainingFields, deletedStringsArray);
|
|
140
|
+
}
|
|
141
|
+
const chainAsString = (0, _subfield6Utils.fieldsToNormalizedString)(chain, 0, true, true);
|
|
142
|
+
if (!(chainAsString in deletableChainsAsKeys)) {
|
|
143
|
+
return innerRemoveInferiorChains(remainingFields, deletedStringsArray);
|
|
144
|
+
}
|
|
145
|
+
const triggeringField = deletableChainsAsKeys[chainAsString];
|
|
146
|
+
const triggeringChain = (0, _removeDuplicateDataFields.fieldToChain)(triggeringField, record);
|
|
147
|
+
|
|
148
|
+
// If the inferior (deletable) chain is 1XX-based, convert the triggering better chain from 7XX to 1XX:
|
|
149
|
+
if (chainContains1XX(chain)) {
|
|
150
|
+
// eslint-disable-line functional/no-conditional-statements
|
|
151
|
+
triggeringChain.forEach(f => sevenToOne(f, triggeringChain));
|
|
152
|
+
}
|
|
153
|
+
//nvdebug(`iRIS6C: ${chainAsString}`);
|
|
154
|
+
const deletedString = (0, _utils.fieldsToString)(chain);
|
|
155
|
+
const message = `DEL: '${deletedString}' REASON: '${(0, _utils.fieldsToString)(triggeringChain)}'`;
|
|
156
|
+
if (fix) {
|
|
157
|
+
// eslint-disable-line functional/no-conditional-statements
|
|
158
|
+
//nvdebug(`INFERIOR $6 CHAIN REMOVAL: ${message}}`, debug);
|
|
159
|
+
chain.forEach(field => record.removeField(field));
|
|
160
|
+
}
|
|
161
|
+
return innerRemoveInferiorChains(remainingFields, [...deletedStringsArray, message]);
|
|
162
|
+
}
|
|
132
163
|
function chainContains1XX(chain) {
|
|
133
164
|
return chain.some(f => f.tag.substring(0, 1) === '1');
|
|
134
165
|
}
|
|
@@ -144,171 +175,138 @@ function removeInferiorChains(record, fix = true) {
|
|
|
144
175
|
// There should always be one pair, but I'm not sanity-checking this
|
|
145
176
|
pairs.forEach(pairedField => (0, _subfield6Utils.fieldSevenToOneOccurrenceNumber)(pairedField));
|
|
146
177
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
}
|
|
152
|
-
const chainAsString = (0, _subfield6Utils.fieldsToNormalizedString)(chain, 0, true, true);
|
|
153
|
-
if (chainAsString in deletableChainsAsKeys) {
|
|
154
|
-
const triggeringField = deletableChainsAsKeys[chainAsString];
|
|
155
|
-
const triggeringChain = (0, _removeDuplicateDataFields.fieldToChain)(triggeringField, record);
|
|
156
|
-
|
|
157
|
-
// If the inferior (deletable) chain is 1XX-based, convert the triggering better chain from 7XX to 1XX:
|
|
158
|
-
if (chainContains1XX(chain)) {
|
|
159
|
-
triggeringChain.forEach(f => sevenToOne(f, triggeringChain));
|
|
160
|
-
}
|
|
161
|
-
//nvdebug(`iRIS6C: ${chainAsString}`);
|
|
162
|
-
const deletedString = (0, _utils.fieldsToString)(chain);
|
|
163
|
-
const message = `DEL: '${deletedString}' REASON: '${(0, _utils.fieldsToString)(triggeringChain)}'`;
|
|
164
|
-
deletedStringsArray.push(message);
|
|
165
|
-
if (fix) {
|
|
166
|
-
(0, _utils.nvdebug)(`INFERIOR $6 CHAIN REMOVAL: ${message}}`, debug);
|
|
167
|
-
chain.forEach(currField => record.removeField(currField));
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
}
|
|
178
|
+
}
|
|
179
|
+
function getIdentifierlessAndKeeplessSubsets(fieldAsString) {
|
|
180
|
+
// The rules below are not perfect (in complex cases they don't catch all permutations), but good enough:
|
|
181
|
+
// Remove identifier(s) (MELKEHITYS-2383-ish):
|
|
171
182
|
|
|
172
|
-
|
|
173
|
-
|
|
183
|
+
const identifierlessString = fieldAsString.replace(/ ‡[01] [^‡]+($| ‡)/u, '$1'); // eslint-disable-line prefer-named-capture-group
|
|
184
|
+
const keeplessString = fieldAsString.replace(/ ‡9 [A-Z]+<KEEP>/u, '');
|
|
185
|
+
return [identifierlessString, keeplessString].filter(val => val !== fieldAsString);
|
|
174
186
|
}
|
|
175
|
-
function deriveIndividualDeletables490(
|
|
187
|
+
function deriveIndividualDeletables490(todoList, deletables = []) {
|
|
188
|
+
const [fieldAsString, ...stillToDo] = todoList;
|
|
189
|
+
if (fieldAsString === undefined) {
|
|
190
|
+
return deletables;
|
|
191
|
+
}
|
|
192
|
+
//nvdebug(`PROCESS ${fieldAsString}`);
|
|
176
193
|
if (!fieldAsString.match(/^490/u)) {
|
|
177
|
-
return
|
|
194
|
+
return deriveIndividualDeletables490(stillToDo, deletables);
|
|
178
195
|
}
|
|
179
196
|
|
|
180
|
-
/* eslint-disable */
|
|
181
|
-
let deletable490s = [];
|
|
182
|
-
|
|
183
197
|
// $6-less version (keep this first)
|
|
184
|
-
|
|
185
|
-
if (tmp !== fieldAsString) {
|
|
186
|
-
fieldAsString = tmp; // NB! Carry on with $6-less version!
|
|
187
|
-
deletable490s.push(tmp);
|
|
188
|
-
}
|
|
198
|
+
const sixless = fieldAsString.replace(/ ‡6 [^‡]+ ‡/u, ' ‡');
|
|
189
199
|
|
|
190
200
|
// Without final $v or $x:
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
// Add intermedia $x-less version
|
|
197
|
-
tmp = fieldAsString.replace(/, ‡x [^‡]+(, ‡x| ; ‡v)/u, '$1');
|
|
198
|
-
// Add final $v/$x-less version
|
|
199
|
-
if (tmp !== fieldAsString) {
|
|
200
|
-
deletable490s.push(tmp);
|
|
201
|
-
}
|
|
201
|
+
const withoutFinalVOrX = fieldAsString.replace(/ *[;,] ‡[vx] [^‡]+$/u, '');
|
|
202
|
+
// Add intermediate $x-less version
|
|
203
|
+
const xless = fieldAsString.replace(/, ‡x [^‡]+(, ‡x| ; ‡v)/u, '$1'); // eslint-disable-line prefer-named-capture-group
|
|
202
204
|
|
|
203
|
-
// Add $xv-less version
|
|
204
|
-
|
|
205
|
-
if (tmp !== fieldAsString) {
|
|
206
|
-
deletable490s.push(tmp);
|
|
207
|
-
}
|
|
205
|
+
// Add $xv-less version (handled by recursion?)
|
|
206
|
+
const xvless = fieldAsString.replace(/, ‡x [^‡]+ ‡v [^‡]+$/u, '');
|
|
208
207
|
|
|
209
208
|
// MRA-433-ish (non-chain): 490 ind1=1 vs ind1=0: remove latter
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
arr.
|
|
216
|
-
|
|
217
|
-
(0, _utils.nvdebug)(`${deletable490s.length} derivation(s) for ${fieldAsString}`);
|
|
218
|
-
if (deletable490s.length > 0) {
|
|
219
|
-
(0, _utils.nvdebug)(deletable490s.join('\n'));
|
|
209
|
+
const modifiedInd2 = fieldAsString.match(/^490 1/u) ? `490 0${fieldAsString.substring(5)}` : fieldAsString;
|
|
210
|
+
const arr = [sixless, withoutFinalVOrX, xless, xvless, modifiedInd2].filter(val => val !== fieldAsString);
|
|
211
|
+
|
|
212
|
+
/*
|
|
213
|
+
if (arr.length) { // eslint-disable-line functional/no-conditional-statements
|
|
214
|
+
nvdebug(`${arr.length} derivation(s) for ${fieldAsString}`);
|
|
215
|
+
nvdebug(arr.join('\n'));
|
|
220
216
|
}
|
|
221
|
-
|
|
222
|
-
return
|
|
217
|
+
*/
|
|
218
|
+
return arr;
|
|
223
219
|
}
|
|
224
220
|
function deriveIndividualDeletables(record) {
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
const finishedRecord = (0, _prepublicationUtils.encodingLevelIsBetterThanPrepublication)((0, _prepublicationUtils.getEncodingLevel)(record));
|
|
228
|
-
record.fields.forEach(field => fieldDeriveIndividualDeletables(field));
|
|
229
|
-
function fieldDeriveIndividualDeletables(field) {
|
|
230
|
-
const fieldAsString = (0, _utils.fieldToString)(field);
|
|
221
|
+
const todoList = record.fields.map(f => (0, _utils.fieldToString)(f));
|
|
222
|
+
//const finishedRecord = encodingLevelIsBetterThanPrepublication(getEncodingLevel(record));
|
|
231
223
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
224
|
+
const deletableStringsArray = processTodoList(todoList);
|
|
225
|
+
return (0, _utils.uniqArray)(deletableStringsArray);
|
|
226
|
+
function processTodoList(thingsToDo, deletables = []) {
|
|
227
|
+
const [currString, ...stillToDo] = thingsToDo;
|
|
228
|
+
if (currString === undefined) {
|
|
229
|
+
return deletables;
|
|
230
|
+
}
|
|
231
|
+
if (currString.match(/^[1678]00/u)) {
|
|
232
|
+
// Proof-of-concpet rule. Should be improved eventually...
|
|
233
|
+
if (currString.match(/, ‡e [^‡]+\.$/u)) {
|
|
234
|
+
const tmp = currString.replace(/, ‡e [^‡]+\.$/u, '.');
|
|
235
|
+
return processTodoList([tmp, ...stillToDo], [...deletables, tmp]);
|
|
238
236
|
}
|
|
239
237
|
}
|
|
240
|
-
if (
|
|
238
|
+
if (currString.match(/^505 .0.*-- ‡t/u)) {
|
|
241
239
|
// MRA-413-ish
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
//nvdebug(`505 DERIVATE: '${tmp}'`)
|
|
240
|
+
const tmp = currString.replace(/ -- ‡t /gu, ' -- ').
|
|
241
|
+
// remove non-initial $t subfields
|
|
242
|
+
replace(/ ‡[rg] /gu, ' ').
|
|
243
|
+
// remove $r and $g subfields
|
|
244
|
+
replace(/ ‡t /u, ' ‡a ').
|
|
245
|
+
// change first $t to $a
|
|
246
|
+
// ind2: '1' => '#':
|
|
247
|
+
replace(/^505 (.)0/u, '505 $1#'); // eslint-disable-line prefer-named-capture-group
|
|
248
|
+
if (tmp !== currString) {
|
|
249
|
+
return processTodoList([tmp, ...stillToDo], [...deletables, tmp]);
|
|
253
250
|
}
|
|
251
|
+
//nvdebug(`505 ORIGINAL: '${fieldAsString}'`)
|
|
252
|
+
//nvdebug(`505 DERIVATE: '${tmp}'`)
|
|
254
253
|
}
|
|
255
254
|
|
|
256
255
|
// MET-381: remove occurence number TAG-00, if TAG-NN existists
|
|
257
|
-
if (
|
|
258
|
-
tmp =
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
(0, _utils.nvdebug)(`MET-381: ADD TO DELETABLES: '${tmp}'`);
|
|
266
|
-
deletableStringsArray.push(tmp);
|
|
267
|
-
}
|
|
256
|
+
if (currString.match(/^880.* ‡6 [0-9][0-9][0-9]-(?:[1-9][0-9]|0[1-9])/u)) {
|
|
257
|
+
const tmp = currString.replace(/( ‡6 [0-9][0-9][0-9])-[0-9]+/u, '$1-00'); // eslint-disable-line prefer-named-capture-group
|
|
258
|
+
//nvdebug(`MET-381: ADD TO DELETABLES: '${tmp}'`);
|
|
259
|
+
//deletableStringsArray.push(tmp);
|
|
260
|
+
if (tmp.match(/ ‡6 [0-9][0-9][0-9]-00\/[^ ]+ /u)) {
|
|
261
|
+
const tmp2 = tmp.replace(/( ‡6 [0-9][0-9][0-9]-00)[^ ]+/u, '$1'); // eslint-disable-line prefer-named-capture-group
|
|
262
|
+
//nvdebug(`MET-381: ADD TO DELETABLES: '${tmp2}'`);
|
|
263
|
+
return processTodoList(stillToDo, [...deletables, tmp, tmp2]);
|
|
268
264
|
}
|
|
265
|
+
return processTodoList(stillToDo, [...deletables, tmp]);
|
|
266
|
+
}
|
|
267
|
+
const d490 = deriveIndividualDeletables490([currString]);
|
|
268
|
+
if (d490.length) {
|
|
269
|
+
return processTodoList([...stillToDo, ...d490], [...deletables, ...d490]);
|
|
269
270
|
}
|
|
270
|
-
|
|
271
|
-
d490.forEach(str => deletableStringsArray.push(str));
|
|
271
|
+
// d490.forEach(str => deletables.push(str)); // eslint-disable-line functional/immutable-data
|
|
272
272
|
|
|
273
|
-
//
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
tmp = tmp.replace(/ ‡9 [A-Z]+<KEEP>/u, '');
|
|
277
|
-
deletableStringsArray.push(tmp);
|
|
273
|
+
const subsets = getIdentifierlessAndKeeplessSubsets(currString); // eslint-disable-line no-param-reassign
|
|
274
|
+
if (subsets.length) {
|
|
275
|
+
return processTodoList([...stillToDo, ...subsets], [...deletables, ...subsets]);
|
|
278
276
|
}
|
|
277
|
+
return processTodoList(stillToDo, deletables);
|
|
279
278
|
}
|
|
280
|
-
/* eslint-enable */
|
|
281
|
-
return deletableStringsArray; // we should do uniq!
|
|
282
279
|
}
|
|
283
|
-
|
|
284
280
|
function fieldToNormalizedString(field) {
|
|
285
281
|
const normalizedField = (0, _normalizeFieldForComparison.cloneAndNormalizeFieldForComparison)(field);
|
|
286
282
|
return (0, _utils.fieldToString)(normalizedField);
|
|
287
283
|
}
|
|
288
284
|
function deriveIndividualNormalizedDeletables(record) {
|
|
289
|
-
|
|
290
|
-
let deletableNormalizedStringsArray = [];
|
|
285
|
+
// MET-461:
|
|
291
286
|
const recordIsFinished = (0, _prepublicationUtils.encodingLevelIsBetterThanPrepublication)((0, _prepublicationUtils.getEncodingLevel)(record));
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
tmp = tmp.replace(" ‡a ", " ‡i nimeke onixissa ‡a "); // NB! This is added in the normalized lower-cased form!
|
|
302
|
-
tmp = tmp.replace(/(?: \/)? ‡c[^‡]+$/u, ''); // Can $c be non-last?
|
|
303
|
-
deletableNormalizedStringsArray.push(tmp);
|
|
304
|
-
deletableNormalizedStringsArray.push(`${tmp} ‡5 MELINDA`); // MET-461 comment. NB! $5 is never normalized
|
|
287
|
+
if (!recordIsFinished) {
|
|
288
|
+
return [];
|
|
289
|
+
}
|
|
290
|
+
const relevantFields = record.fields.filter(f => ['245', '246'].includes(f.tag) && (0, _utils.fieldHasSubfield)(f, 'a'));
|
|
291
|
+
return deriveDeletable946s(relevantFields);
|
|
292
|
+
function deriveDeletable946s(fields, results = []) {
|
|
293
|
+
const [currField, ...remainingFields] = fields;
|
|
294
|
+
if (currField === undefined) {
|
|
295
|
+
return results;
|
|
305
296
|
}
|
|
297
|
+
const fieldAsNormalizedString = fieldToNormalizedString(currField);
|
|
298
|
+
const tmp = fieldAsNormalizedString.replace(/^(?:...) ../u, '946 ##').
|
|
299
|
+
// <= Change tag to 946 and indicators to '##'
|
|
300
|
+
replace(' ‡a ', ' ‡i nimeke onixissa ‡a ').
|
|
301
|
+
// Add $i before $a. NB! This is added in the normalized lower-cased form!
|
|
302
|
+
replace(/(?: \/)? ‡c[^‡]+$/u, ''); // Remove $c. (Can $c be non-last?)
|
|
303
|
+
const candArray = [tmp, `${tmp} ‡5 MELINDA`].filter(val => val !== fieldAsNormalizedString);
|
|
304
|
+
if (candArray.length) {
|
|
305
|
+
return deriveDeletable946s(remainingFields, [...results, ...candArray]);
|
|
306
|
+
}
|
|
307
|
+
return deriveDeletable946s(remainingFields, results);
|
|
306
308
|
}
|
|
307
|
-
|
|
308
|
-
/* eslint-enable */
|
|
309
|
-
return deletableNormalizedStringsArray; // we should do uniq!
|
|
310
309
|
}
|
|
311
|
-
|
|
312
310
|
function removeIndividualInferiorDatafields(record, fix = true) {
|
|
313
311
|
// No $6 nor $8 in field
|
|
314
312
|
const deletableFieldsAsStrings = deriveIndividualDeletables(record);
|
|
@@ -322,7 +320,7 @@ function removeIndividualInferiorDatafields(record, fix = true) {
|
|
|
322
320
|
if (fix) {
|
|
323
321
|
// eslint-disable-line functional/no-conditional-statements
|
|
324
322
|
hits.forEach(field => {
|
|
325
|
-
|
|
323
|
+
//nvdebug(`Remove inferior field: ${fieldToString(field)}`, debug);
|
|
326
324
|
record.removeField(field);
|
|
327
325
|
});
|
|
328
326
|
}
|
|
@@ -345,8 +343,8 @@ function removeInferiorDatafields(record, fix = true) {
|
|
|
345
343
|
const removables6 = removeInferiorChains(record, fix); // Lone subfield $6 chains
|
|
346
344
|
// HOW TO HANDLE $6+$8 combos? Skipping is relatively OK.
|
|
347
345
|
|
|
348
|
-
(0, _utils.nvdebug)(`REMOVABLES:\n ${removables.join('\n ')}
|
|
349
|
-
(0, _utils.nvdebug)(`REMOVABLES 6:\n ${removables6.join('\n ')}
|
|
346
|
+
(0, _utils.nvdebug)(`REMOVABLES:\n ${removables.join('\n ')}`, debug);
|
|
347
|
+
(0, _utils.nvdebug)(`REMOVABLES 6:\n ${removables6.join('\n ')}`, debug);
|
|
350
348
|
const removablesAll = removables.concat(removables6); //.concat(removables8);
|
|
351
349
|
|
|
352
350
|
return removablesAll;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"removeInferiorDataFields.js","names":["_debug","_interopRequireDefault","require","_removeDuplicateDataFields","_subfield6Utils","_utils","_subfield8Utils","_prepublicationUtils","_normalizeFieldForComparison","obj","__esModule","default","debug","createDebugLogger","_default","description","validate","fix","record","nvdebug","res","message","valid","removeInferiorDatafields","duplicates","length","deriveInferiorChains","fields","deletableStringsObject","forEach","field","fieldDeriveChainDeletables","chain","fieldToChain","chainAsString","fieldsToNormalizedString","tmp","match","replace","isRelevantChain6","fieldHasValidSubfield6","fieldHasValidSubfield8","some","f","subfields","filter","sf","code","tmpInferiorId","result","removeInferiorChains","deletableChainsAsKeys","nChains","Object","keys","deletedStringsArray","innerRemoveInferiorChain","chainContains1XX","tag","substring","sevenToOne","includes","pairs","fieldGetOccurrenceNumberPairs","pairedField","fieldSevenToOneOccurrenceNumber","sameField","triggeringField","triggeringChain","deletedString","fieldsToString","push","currField","removeField","deriveIndividualDeletables490","fieldAsString","deletable490s","arr","val","join","deriveIndividualDeletables","deletableStringsArray","finishedRecord","encodingLevelIsBetterThanPrepublication","getEncodingLevel","fieldDeriveIndividualDeletables","fieldToString","d490","str","fieldToNormalizedString","normalizedField","cloneAndNormalizeFieldForComparison","deriveIndividualNormalizedDeletables","deletableNormalizedStringsArray","recordIsFinished","fieldDeriveIndividualNormalizedDeletables","fieldAsNormalizedString","removeIndividualInferiorDatafields","deletableFieldsAsStrings","deletableFieldsAsNormalizedStrings","hits","isDeletableField","deletedFieldsAsStrings","map","removables","removables6","removablesAll","concat"],"sources":["../src/removeInferiorDataFields.js"],"sourcesContent":["import createDebugLogger from 'debug';\nimport {fieldToChain, sameField} from './removeDuplicateDataFields';\nimport {fieldGetOccurrenceNumberPairs, fieldHasValidSubfield6, fieldSevenToOneOccurrenceNumber, fieldsToNormalizedString} from './subfield6Utils';\nimport {fieldsToString, fieldToString, nvdebug} from './utils';\nimport {fieldHasValidSubfield8} from './subfield8Utils';\nimport {encodingLevelIsBetterThanPrepublication, getEncodingLevel} from './prepublicationUtils';\nimport {cloneAndNormalizeFieldForComparison} from './normalizeFieldForComparison';\n\n// Relocated from melinda-marc-record-merge-reducers (and renamed)\n\n// NB! This validator handles only full fields, and does not support subfield $8 removal.\n// Also, having multiple $8 subfields in same fields is not supported.\n// If this functionality is needed, see removeDuplicateDatafields.js for examples of subfield-only stuff.\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:removeSubsetDataFields');\n\nexport default function () {\n return {\n description: 'Remove subset data fields. Certain exceptions apply, mainly too complicated for chained fields',\n validate, fix\n };\n\n function fix(record) {\n nvdebug('Fix record: remove inferior (eg. subset) data fields', debug);\n const res = {message: [], fix: [], valid: true};\n removeInferiorDatafields(record, true);\n // This can not really fail...\n return res;\n }\n\n function validate(record) {\n // Check max, and check number of different indexes\n nvdebug('Validate record: remove inferior (eg. subset) data fields', debug);\n\n const duplicates = removeInferiorDatafields(record, false);\n\n const res = {message: duplicates};\n\n res.valid = res.message.length < 1; // eslint-disable-line functional/immutable-data\n return res;\n }\n}\n\n\nfunction deriveInferiorChains(fields, record) {\n /* eslint-disable */\n let deletableStringsObject = {};\n\n nvdebug(`WP1: GOT ${fields.length} field(s) for potential deletable chain derivation`);\n fields.forEach(field => fieldDeriveChainDeletables(field));\n\n function fieldDeriveChainDeletables(field) {\n const chain = fieldToChain(field, record);\n if (chain.length === 0) {\n return;\n }\n const chainAsString = fieldsToNormalizedString(chain, 0, true, true);\n\n //nvdebug(`666: ${chainAsString}`);\n\n // Fix MRA-476 (part 1): one $6 value can be worse than the other\n let tmp = chainAsString;\n while (tmp.match(/ ‡6 [0-9X][0-9][0-9]-(?:XX|[0-9]+)\\/[^ ]+/u)) {\n tmp = tmp.replace(/( ‡6 [0-9X][0-9][0-9]-(?:XX|[0-9]+))\\/[^ ]+/u, '$1');\n //nvdebug(`FFS: ${tmp}`);\n deletableStringsObject[tmp] = field;\n }\n\n // Remove keepless versions:\n tmp = chainAsString;\n while (tmp.match(/ ‡9 [A-Z]+<KEEP>/)) {\n tmp = tmp.replace(/ ‡9 [A-Z]+<KEEP>/, '');\n deletableStringsObject[tmp] = field;\n //nvdebug(`FFS: ${tmp}`);\n }\n\n // MRA-433: 490 ind1=1 vs ind1=0: remove latter (luckily no 2nd indicator etc)\n if (chainAsString.match(/^490 1 .*\\t880 1 ‡/) ) {\n // change ind1s to '0' to get the deletable chain:\n tmp = chainAsString.replace(/^490 1/u, '490 0').replace(/\\t880 1/ug, \"\\t880 0\");\n deletableStringsObject[tmp] = field;\n }\n\n }\n\n\n /* eslint-enable */\n return deletableStringsObject;\n}\n\nfunction isRelevantChain6(field, record) {\n //Can't be a chain:\n if (!fieldHasValidSubfield6(field) && !fieldHasValidSubfield8(field)) {\n return false;\n }\n // Too short to be a chain:\n const chain = fieldToChain(field, record);\n if (chain.length < 2) {\n return false;\n }\n // No field can contains no more than one subfield $6\n if (chain.some(f => f.subfields.filter(sf => sf.code === '6').length > 1)) {\n return false;\n }\n\n // Chainwise non-initial fields are not relevant as chains is handled through the initial/head field\n /* eslint-disable */\n field.tmpInferiorId = 666;\n const result = chain[0].tmpInferiorId === 666 ? true : false;\n delete field.tmpInferiorId;\n /* eslint-enable */\n return result;\n}\n\nexport function removeInferiorChains(record, fix = true) {\n const fields = record.fields.filter(f => isRelevantChain6(f, record));\n //nvdebug(`WP2.0: GOT ${fields.length} chain(s)`);\n\n const deletableChainsAsKeys = deriveInferiorChains(fields, record);\n const nChains = Object.keys(deletableChainsAsKeys).length;\n //nvdebug(`WP2: GOT ${nChains} chain(s)`);\n if (nChains === 0) {\n return [];\n }\n\n nvdebug(`removeInferiorChains() has ${fields.length} fields-in-chain(s), and a list of ${nChains} deletable(s)`);\n\n\n /* eslint-disable */\n\n let deletedStringsArray = [];\n fields.forEach(f => innerRemoveInferiorChain(f));\n\n function chainContains1XX(chain) {\n return chain.some(f => f.tag.substring(0, 1) === '1');\n }\n\n function sevenToOne(field, chain) { // Change 7XX field to 1XX field. Also handle the corresponding 880$6 7XX-NN subfields\n // NB! This function should be called only if the original 1XX gets deleted!\n if (!['700', '710', '711', '730'].includes(field.tag)) {\n return;\n }\n // Retag field 7XX as 1XX and fix corresponding occurrence numbers as well:\n const pairs = fieldGetOccurrenceNumberPairs(field, chain);\n field.tag = `1${field.tag.substring(1)}`; // eslint-disable-line functional/immutable-data\n // There should always be one pair, but I'm not sanity-checking this\n pairs.forEach(pairedField => fieldSevenToOneOccurrenceNumber(pairedField));\n }\n\n function innerRemoveInferiorChain(field) {\n const chain = fieldToChain(field, record);\n if (chain.length === 0 || !sameField(field, chain[0])) {\n return;\n }\n\n const chainAsString = fieldsToNormalizedString(chain, 0, true, true);\n if (chainAsString in deletableChainsAsKeys) {\n const triggeringField = deletableChainsAsKeys[chainAsString];\n const triggeringChain = fieldToChain(triggeringField, record);\n\n // If the inferior (deletable) chain is 1XX-based, convert the triggering better chain from 7XX to 1XX:\n if(chainContains1XX(chain)) {\n triggeringChain.forEach(f => sevenToOne(f, triggeringChain));\n }\n //nvdebug(`iRIS6C: ${chainAsString}`);\n const deletedString = fieldsToString(chain);\n const message = `DEL: '${deletedString}' REASON: '${fieldsToString(triggeringChain)}'`;\n deletedStringsArray.push(message);\n if (fix) {\n nvdebug(`INFERIOR $6 CHAIN REMOVAL: ${message}}`, debug);\n chain.forEach(currField => record.removeField(currField));\n }\n }\n }\n\n /* eslint-enable */\n return deletedStringsArray;\n}\n\nfunction deriveIndividualDeletables490(fieldAsString) {\n if (!fieldAsString.match(/^490/u)) {\n return [];\n }\n\n /* eslint-disable */\n let deletable490s = [];\n\n // $6-less version (keep this first)\n let tmp = fieldAsString.replace(/ ‡6 [^‡]+ ‡/u, ' ‡');\n if ( tmp !== fieldAsString) {\n fieldAsString = tmp; // NB! Carry on with $6-less version!\n deletable490s.push(tmp);\n }\n\n // Without final $v or $x:\n tmp = fieldAsString.replace(/ *[;,] ‡[vx] [^‡]+$/u, '');\n if ( tmp !== fieldAsString) {\n deletable490s.push(tmp);\n }\n\n // Add intermedia $x-less version\n tmp = fieldAsString.replace(/, ‡x [^‡]+(, ‡x| ; ‡v)/u, '$1');\n // Add final $v/$x-less version\n if ( tmp !== fieldAsString) {\n deletable490s.push(tmp);\n }\n\n // Add $xv-less version\n tmp = fieldAsString.replace(/, ‡x [^‡]+ ‡v [^‡]+$/u, '');\n if ( tmp !== fieldAsString) {\n deletable490s.push(tmp);\n }\n\n // MRA-433-ish (non-chain): 490 ind1=1 vs ind1=0: remove latter\n if (fieldAsString.match(/^490 1/) ) {\n // TODO: $x-less and $v-less versions...\n tmp = `490 0${fieldAsString.substring(5)}`;\n deletable490s.push(tmp);\n const arr = deriveIndividualDeletables490(tmp);\n arr.forEach(val => deletable490s.push(val));\n }\n\n nvdebug(`${deletable490s.length} derivation(s) for ${fieldAsString}`);\n if (deletable490s.length > 0) {\n nvdebug(deletable490s.join('\\n'));\n }\n /* eslint-enable */\n return deletable490s;\n}\n\nfunction deriveIndividualDeletables(record) {\n /* eslint-disable */\n let deletableStringsArray = [];\n\n const finishedRecord = encodingLevelIsBetterThanPrepublication(getEncodingLevel(record));\n\n record.fields.forEach(field => fieldDeriveIndividualDeletables(field));\n\n function fieldDeriveIndividualDeletables(field) {\n const fieldAsString = fieldToString(field);\n\n // Proof-of-concept rule:\n let tmp = fieldAsString;\n if (field.tag.match(/^[1678]00$/u)) {\n while (tmp.match(/, ‡e [^‡]+\\.$/)) {\n tmp = tmp.replace(/, ‡e [^‡]+\\.$/, '.');\n deletableStringsArray.push(tmp);\n }\n }\n\n if (field.tag === '505') { // MRA-413-ish\n if (fieldAsString.match(/^.0.*-- ‡t/u)) {\n tmp = fieldAsString;\n tmp = tmp.replace(/ -- ‡t /gu, ' -- ');\n tmp = tmp.replace(/ ‡[rg] /gu, ' ');\n tmp = tmp.replace(/ ‡t /u, ' ‡a '); // first $t, not\n tmp = tmp.replace(/^505 (.)0/u, '505 $1#');\n if (tmp !== fieldAsString) {\n deletableStringsArray.push(tmp);\n }\n //nvdebug(`505 ORIGINAL: '${fieldAsString}'`)\n //nvdebug(`505 DERIVATE: '${tmp}'`)\n }\n }\n\n // MET-381: remove occurence number TAG-00, if TAG-NN existists\n if (field.tag === '880') {\n tmp = fieldAsString;\n if (tmp.match(/ ‡6 [0-9][0-9][0-9]-(?:[1-9][0-9]|0[1-9])/)) {\n tmp = tmp.replace(/( ‡6 [0-9][0-9][0-9])-[0-9]+/, '$1-00');\n nvdebug(`MET-381: ADD TO DELETABLES: '${tmp}'`);\n deletableStringsArray.push(tmp);\n if (tmp.match(/ ‡6 [0-9][0-9][0-9]-00\\/[^ ]+ /)) {\n tmp = tmp.replace(/( ‡6 [0-9][0-9][0-9]-00)[^ ]+/, '$1');\n nvdebug(`MET-381: ADD TO DELETABLES: '${tmp}'`);\n deletableStringsArray.push(tmp);\n }\n }\n }\n\n const d490 = deriveIndividualDeletables490(fieldAsString);\n d490.forEach(str => deletableStringsArray.push(str));\n\n // Remove keepless versions:\n tmp = fieldAsString;\n while (tmp.match(/ ‡9 [A-Z]+<KEEP>/)) {\n tmp = tmp.replace(/ ‡9 [A-Z]+<KEEP>/u, '');\n deletableStringsArray.push(tmp);\n }\n\n }\n /* eslint-enable */\n return deletableStringsArray; // we should do uniq!\n\n}\n\nfunction fieldToNormalizedString(field) {\n const normalizedField = cloneAndNormalizeFieldForComparison(field);\n return fieldToString(normalizedField);\n}\n\nfunction deriveIndividualNormalizedDeletables(record) {\n /* eslint-disable */\n let deletableNormalizedStringsArray = [];\n\n const recordIsFinished = encodingLevelIsBetterThanPrepublication(getEncodingLevel(record));\n\n record.fields.forEach(field => fieldDeriveIndividualNormalizedDeletables(field));\n\n function fieldDeriveIndividualNormalizedDeletables(field) {\n const fieldAsNormalizedString = fieldToNormalizedString(field);\n let tmp = fieldAsNormalizedString;\n\n // MET-461:\n if (recordIsFinished && ['245', '246'].includes(field.tag) && fieldAsNormalizedString.match(/ ‡a /u)) {\n tmp = fieldAsNormalizedString;\n tmp = tmp.replace(/^(...) ../u, '946 ##'); // Ind\n tmp = tmp.replace(\" ‡a \", \" ‡i nimeke onixissa ‡a \"); // NB! This is added in the normalized lower-cased form!\n tmp = tmp.replace(/(?: \\/)? ‡c[^‡]+$/u, ''); // Can $c be non-last?\n deletableNormalizedStringsArray.push(tmp);\n deletableNormalizedStringsArray.push(`${tmp} ‡5 MELINDA`); // MET-461 comment. NB! $5 is never normalized\n }\n }\n\n /* eslint-enable */\n return deletableNormalizedStringsArray; // we should do uniq!\n\n}\n\nexport function removeIndividualInferiorDatafields(record, fix = true) { // No $6 nor $8 in field\n const deletableFieldsAsStrings = deriveIndividualDeletables(record);\n const deletableFieldsAsNormalizedStrings = deriveIndividualNormalizedDeletables(record);\n\n // nvdebug(`Deletables:\\n ${deletableFieldsAsStrings.join('\\n ')}`);\n // nvdebug(`Normalized deletables:\\n ${deletableFieldsAsNormalizedStrings.join('\\n ')}`);\n\n const hits = record.fields.filter(field => isDeletableField(field));\n\n const deletedFieldsAsStrings = hits.map(f => fieldToString(f));\n\n if (fix) { // eslint-disable-line functional/no-conditional-statements\n hits.forEach(field => {\n nvdebug(`Remove inferior field: ${fieldToString(field)}`);\n record.removeField(field);\n });\n }\n\n return deletedFieldsAsStrings;\n\n function isDeletableField(field) {\n const fieldAsString = fieldToString(field);\n if (deletableFieldsAsStrings.includes(fieldAsString)) {\n return true;\n }\n const fieldAsNormalizedString = fieldToNormalizedString(field);\n if (deletableFieldsAsNormalizedStrings.includes(fieldAsNormalizedString)) {\n return true;\n }\n\n return false;\n }\n}\n\n\nexport function removeInferiorDatafields(record, fix = true) {\n const removables = removeIndividualInferiorDatafields(record, fix); // Lone fields\n //const removables8 = removeDuplicateSubfield8Chains(record, fix); // Lone subfield $8 chains\n const removables6 = removeInferiorChains(record, fix); // Lone subfield $6 chains\n // HOW TO HANDLE $6+$8 combos? Skipping is relatively OK.\n\n nvdebug(`REMOVABLES:\\n ${removables.join('\\n ')}`);\n nvdebug(`REMOVABLES 6:\\n ${removables6.join('\\n ')}`);\n\n const removablesAll = removables.concat(removables6); //.concat(removables8);\n\n return removablesAll;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"removeInferiorDataFields.js","names":["_debug","_interopRequireDefault","require","_removeDuplicateDataFields","_subfield6Utils","_utils","_subfield8Utils","_prepublicationUtils","_normalizeFieldForComparison","obj","__esModule","default","debug","createDebugLogger","_default","description","validate","fix","record","nvdebug","res","message","valid","removeInferiorDatafields","duplicates","length","deriveInferiorChains","fields","hash","forEach","f","fieldToChainToDeletables","field","chain","fieldToChain","chainAsString","fieldsToNormalizedString","arr","deriveChainDeletables","val","todoList","deletables","stillToDo","undefined","withoutScriptIdentificationCode","replace","keepless","linked490Ind1","filter","isRelevantChain6","fieldHasValidSubfield6","fieldHasValidSubfield8","some","subfields","sf","code","sameField","removeInferiorChains","deletableChainsAsKeys","nChains","Object","keys","innerRemoveInferiorChains","deletedStringsArray","currField","remainingFields","triggeringField","triggeringChain","chainContains1XX","sevenToOne","deletedString","fieldsToString","removeField","tag","substring","includes","pairs","fieldGetOccurrenceNumberPairs","pairedField","fieldSevenToOneOccurrenceNumber","getIdentifierlessAndKeeplessSubsets","fieldAsString","identifierlessString","keeplessString","deriveIndividualDeletables490","match","sixless","withoutFinalVOrX","xless","xvless","modifiedInd2","deriveIndividualDeletables","map","fieldToString","deletableStringsArray","processTodoList","uniqArray","thingsToDo","currString","tmp","tmp2","d490","subsets","fieldToNormalizedString","normalizedField","cloneAndNormalizeFieldForComparison","deriveIndividualNormalizedDeletables","recordIsFinished","encodingLevelIsBetterThanPrepublication","getEncodingLevel","relevantFields","fieldHasSubfield","deriveDeletable946s","results","fieldAsNormalizedString","candArray","removeIndividualInferiorDatafields","deletableFieldsAsStrings","deletableFieldsAsNormalizedStrings","hits","isDeletableField","deletedFieldsAsStrings","removables","removables6","join","removablesAll","concat"],"sources":["../src/removeInferiorDataFields.js"],"sourcesContent":["import createDebugLogger from 'debug';\nimport {fieldToChain, sameField} from './removeDuplicateDataFields';\nimport {fieldGetOccurrenceNumberPairs, fieldHasValidSubfield6, fieldSevenToOneOccurrenceNumber, fieldsToNormalizedString} from './subfield6Utils';\nimport {fieldHasSubfield, fieldsToString, fieldToString, nvdebug, uniqArray} from './utils';\nimport {fieldHasValidSubfield8} from './subfield8Utils';\nimport {encodingLevelIsBetterThanPrepublication, getEncodingLevel} from './prepublicationUtils';\nimport {cloneAndNormalizeFieldForComparison} from './normalizeFieldForComparison';\n\n// Relocated from melinda-marc-record-merge-reducers (and renamed)\n\n// NB! This validator handles only full fields, and does not support subfield $8 removal.\n// Also, having multiple $8 subfields in same fields is not supported.\n// If this functionality is needed, see removeDuplicateDatafields.js for examples of subfield-only stuff.\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:removeSubsetDataFields');\n\nexport default function () {\n return {\n description: 'Remove subset data fields. Certain exceptions apply, mainly too complicated for chained fields',\n validate, fix\n };\n\n function fix(record) {\n nvdebug('Fix record: remove inferior (eg. subset) data fields', debug);\n const res = {message: [], fix: [], valid: true};\n removeInferiorDatafields(record, true);\n // This can not really fail...\n return res;\n }\n\n function validate(record) {\n // Check max, and check number of different indexes\n nvdebug('Validate record: remove inferior (eg. subset) data fields', debug);\n\n const duplicates = removeInferiorDatafields(record, false);\n\n const res = {message: duplicates};\n\n res.valid = res.message.length < 1; // eslint-disable-line functional/immutable-data\n return res;\n }\n}\n\n\nfunction deriveInferiorChains(fields, record) {\n //nvdebug(`======= GOT ${fields.length} FIELDS TO CHAINIFY`);\n const hash = {};\n\n fields.forEach(f => fieldToChainToDeletables(f));\n\n return hash;\n\n //nvdebug(`WP1: GOT ${todoList.length} CHAINS`);\n\n\n // here we map deletableStringObject[str] => field. The idea is to help debugging. We don't actually need the field object...\n //return deriveChainDeletables(todoList);\n\n function fieldToChainToDeletables(field) {\n const chain = fieldToChain(field, record);\n if (chain.length < 2) {\n return;\n }\n const chainAsString = fieldsToNormalizedString(chain, 0, true, true);\n const arr = deriveChainDeletables([chainAsString]);\n //nvdebug(`GOT ${arr.length} DELETABLES FOR ${chainAsString}`);\n arr.forEach(val => {\n if (!(val in hash)) { // eslint-disable-line functional/no-conditional-statements\n hash[val] = field; // eslint-disable-line functional/immutable-data\n }\n });\n }\n\n function deriveChainDeletables(todoList, deletables = []) {\n const [chainAsString, ...stillToDo] = todoList;\n if (chainAsString === undefined) {\n return deletables;\n }\n\n // Fix MRA-476 (part 1): one $6 value can be worse than the other\n const withoutScriptIdentificationCode = chainAsString.replace(/( ‡6 [0-9X][0-9][0-9]-(?:XX|[0-9]+))\\/[^ ]+/u, '$1'); // eslint-disable-line prefer-named-capture-group\n\n // Remove keepless versions:\n const keepless = chainAsString.replace(/ ‡9 [A-Z]+<KEEP>/u, '');\n\n // MRA-433: 490 ind1=1 vs ind1=0: remove latter (luckily no 2nd indicator etc)\n const linked490Ind1 = chainAsString.replace(/^490 1/u, '490 0').replace(/\\t880 1/ug, '\\t880 0');\n const arr = [withoutScriptIdentificationCode, keepless, linked490Ind1].filter(val => val !== chainAsString);\n if (arr.length > 0) {\n return deriveChainDeletables([...stillToDo, ...arr], [...deletables, ...arr]);\n }\n\n return deriveChainDeletables(stillToDo, deletables);\n }\n\n}\n\nfunction isRelevantChain6(field, record) {\n //Can't be a chain:\n if (!fieldHasValidSubfield6(field) && !fieldHasValidSubfield8(field)) {\n return false;\n }\n // Too short to be a chain:\n const chain = fieldToChain(field, record);\n if (chain.length < 2) {\n return false;\n }\n // No field can contains no more than one subfield $6\n if (chain.some(f => f.subfields.filter(sf => sf.code === '6').length > 1)) {\n return false;\n }\n\n // Check whether our field is the head of a chain:\n return sameField(field, chain[0]);\n}\n\nexport function removeInferiorChains(record, fix = true) {\n const fields = record.fields.filter(f => isRelevantChain6(f, record));\n //nvdebug(`WP2.0: GOT ${fields.length} chain(s)`);\n\n const deletableChainsAsKeys = deriveInferiorChains(fields, record);\n const nChains = Object.keys(deletableChainsAsKeys).length;\n //nvdebug(`WP2: GOT ${nChains} chain(s)`);\n if (nChains === 0) {\n return [];\n }\n\n //nvdebug(`removeInferiorChains() has ${fields.length} fields-in-chain(s), and a list of ${nChains} deletable(s)`);\n\n return innerRemoveInferiorChains(fields);\n\n function innerRemoveInferiorChains(fields, deletedStringsArray = []) {\n const [currField, ...remainingFields] = fields;\n\n if (currField === undefined) {\n return deletedStringsArray;\n }\n\n const chain = fieldToChain(currField, record);\n if (chain.length === 0 || !sameField(currField, chain[0])) {\n return innerRemoveInferiorChains(remainingFields, deletedStringsArray);\n }\n\n const chainAsString = fieldsToNormalizedString(chain, 0, true, true);\n if (!(chainAsString in deletableChainsAsKeys)) {\n return innerRemoveInferiorChains(remainingFields, deletedStringsArray);\n }\n\n const triggeringField = deletableChainsAsKeys[chainAsString];\n const triggeringChain = fieldToChain(triggeringField, record);\n\n // If the inferior (deletable) chain is 1XX-based, convert the triggering better chain from 7XX to 1XX:\n if (chainContains1XX(chain)) { // eslint-disable-line functional/no-conditional-statements\n triggeringChain.forEach(f => sevenToOne(f, triggeringChain));\n }\n //nvdebug(`iRIS6C: ${chainAsString}`);\n const deletedString = fieldsToString(chain);\n const message = `DEL: '${deletedString}' REASON: '${fieldsToString(triggeringChain)}'`;\n if (fix) { // eslint-disable-line functional/no-conditional-statements\n //nvdebug(`INFERIOR $6 CHAIN REMOVAL: ${message}}`, debug);\n chain.forEach(field => record.removeField(field));\n }\n return innerRemoveInferiorChains(remainingFields, [...deletedStringsArray, message]);\n }\n\n function chainContains1XX(chain) {\n return chain.some(f => f.tag.substring(0, 1) === '1');\n }\n\n function sevenToOne(field, chain) { // Change 7XX field to 1XX field. Also handle the corresponding 880$6 7XX-NN subfields\n // NB! This function should be called only if the original 1XX gets deleted!\n if (!['700', '710', '711', '730'].includes(field.tag)) {\n return;\n }\n // Retag field 7XX as 1XX and fix corresponding occurrence numbers as well:\n const pairs = fieldGetOccurrenceNumberPairs(field, chain);\n field.tag = `1${field.tag.substring(1)}`; // eslint-disable-line functional/immutable-data\n // There should always be one pair, but I'm not sanity-checking this\n pairs.forEach(pairedField => fieldSevenToOneOccurrenceNumber(pairedField));\n }\n\n}\n\n\nfunction getIdentifierlessAndKeeplessSubsets(fieldAsString) {\n // The rules below are not perfect (in complex cases they don't catch all permutations), but good enough:\n // Remove identifier(s) (MELKEHITYS-2383-ish):\n\n const identifierlessString = fieldAsString.replace(/ ‡[01] [^‡]+($| ‡)/u, '$1'); // eslint-disable-line prefer-named-capture-group\n const keeplessString = fieldAsString.replace(/ ‡9 [A-Z]+<KEEP>/u, '');\n\n return [identifierlessString, keeplessString].filter(val => val !== fieldAsString);\n}\n\nfunction deriveIndividualDeletables490(todoList, deletables = []) {\n const [fieldAsString, ...stillToDo] = todoList;\n if (fieldAsString === undefined) {\n return deletables;\n }\n //nvdebug(`PROCESS ${fieldAsString}`);\n if (!fieldAsString.match(/^490/u)) {\n return deriveIndividualDeletables490(stillToDo, deletables);\n }\n\n // $6-less version (keep this first)\n const sixless = fieldAsString.replace(/ ‡6 [^‡]+ ‡/u, ' ‡');\n\n // Without final $v or $x:\n const withoutFinalVOrX = fieldAsString.replace(/ *[;,] ‡[vx] [^‡]+$/u, '');\n // Add intermediate $x-less version\n const xless = fieldAsString.replace(/, ‡x [^‡]+(, ‡x| ; ‡v)/u, '$1'); // eslint-disable-line prefer-named-capture-group\n\n // Add $xv-less version (handled by recursion?)\n const xvless = fieldAsString.replace(/, ‡x [^‡]+ ‡v [^‡]+$/u, '');\n\n // MRA-433-ish (non-chain): 490 ind1=1 vs ind1=0: remove latter\n const modifiedInd2 = fieldAsString.match(/^490 1/u) ? `490 0${fieldAsString.substring(5)}` : fieldAsString;\n\n const arr = [sixless, withoutFinalVOrX, xless, xvless, modifiedInd2].filter(val => val !== fieldAsString);\n\n /*\n if (arr.length) { // eslint-disable-line functional/no-conditional-statements\n nvdebug(`${arr.length} derivation(s) for ${fieldAsString}`);\n nvdebug(arr.join('\\n'));\n }\n */\n return arr;\n}\n\nfunction deriveIndividualDeletables(record) {\n const todoList = record.fields.map(f => fieldToString(f));\n //const finishedRecord = encodingLevelIsBetterThanPrepublication(getEncodingLevel(record));\n\n const deletableStringsArray = processTodoList(todoList);\n\n return uniqArray(deletableStringsArray);\n\n function processTodoList(thingsToDo, deletables = []) {\n const [currString, ...stillToDo] = thingsToDo;\n\n if (currString === undefined) {\n return deletables;\n }\n\n if (currString.match(/^[1678]00/u)) {\n // Proof-of-concpet rule. Should be improved eventually...\n if (currString.match(/, ‡e [^‡]+\\.$/u)) {\n const tmp = currString.replace(/, ‡e [^‡]+\\.$/u, '.');\n return processTodoList([tmp, ...stillToDo], [...deletables, tmp]);\n }\n }\n\n if (currString.match(/^505 .0.*-- ‡t/u)) { // MRA-413-ish\n const tmp = currString.replace(/ -- ‡t /gu, ' -- '). // remove non-initial $t subfields\n replace(/ ‡[rg] /gu, ' '). // remove $r and $g subfields\n replace(/ ‡t /u, ' ‡a '). // change first $t to $a\n // ind2: '1' => '#':\n replace(/^505 (.)0/u, '505 $1#'); // eslint-disable-line prefer-named-capture-group\n if (tmp !== currString) {\n return processTodoList([tmp, ...stillToDo], [...deletables, tmp]);\n }\n //nvdebug(`505 ORIGINAL: '${fieldAsString}'`)\n //nvdebug(`505 DERIVATE: '${tmp}'`)\n }\n\n // MET-381: remove occurence number TAG-00, if TAG-NN existists\n if (currString.match(/^880.* ‡6 [0-9][0-9][0-9]-(?:[1-9][0-9]|0[1-9])/u)) {\n const tmp = currString.replace(/( ‡6 [0-9][0-9][0-9])-[0-9]+/u, '$1-00'); // eslint-disable-line prefer-named-capture-group\n //nvdebug(`MET-381: ADD TO DELETABLES: '${tmp}'`);\n //deletableStringsArray.push(tmp);\n if (tmp.match(/ ‡6 [0-9][0-9][0-9]-00\\/[^ ]+ /u)) {\n const tmp2 = tmp.replace(/( ‡6 [0-9][0-9][0-9]-00)[^ ]+/u, '$1'); // eslint-disable-line prefer-named-capture-group\n //nvdebug(`MET-381: ADD TO DELETABLES: '${tmp2}'`);\n return processTodoList(stillToDo, [...deletables, tmp, tmp2]);\n }\n return processTodoList(stillToDo, [...deletables, tmp]);\n }\n\n const d490 = deriveIndividualDeletables490([currString]);\n if (d490.length) {\n return processTodoList([...stillToDo, ...d490], [...deletables, ...d490]);\n }\n // d490.forEach(str => deletables.push(str)); // eslint-disable-line functional/immutable-data\n\n const subsets = getIdentifierlessAndKeeplessSubsets(currString); // eslint-disable-line no-param-reassign\n if (subsets.length) {\n return processTodoList([...stillToDo, ...subsets], [...deletables, ...subsets]);\n }\n\n return processTodoList(stillToDo, deletables);\n }\n\n}\n\nfunction fieldToNormalizedString(field) {\n const normalizedField = cloneAndNormalizeFieldForComparison(field);\n return fieldToString(normalizedField);\n}\n\nfunction deriveIndividualNormalizedDeletables(record) { // MET-461:\n const recordIsFinished = encodingLevelIsBetterThanPrepublication(getEncodingLevel(record));\n if (!recordIsFinished) {\n return [];\n }\n const relevantFields = record.fields.filter(f => ['245', '246'].includes(f.tag) && fieldHasSubfield(f, 'a'));\n\n return deriveDeletable946s(relevantFields);\n\n function deriveDeletable946s(fields, results = []) {\n const [currField, ...remainingFields] = fields;\n if (currField === undefined) {\n return results;\n }\n\n const fieldAsNormalizedString = fieldToNormalizedString(currField);\n const tmp = fieldAsNormalizedString.replace(/^(?:...) ../u, '946 ##'). // <= Change tag to 946 and indicators to '##'\n replace(' ‡a ', ' ‡i nimeke onixissa ‡a '). // Add $i before $a. NB! This is added in the normalized lower-cased form!\n replace(/(?: \\/)? ‡c[^‡]+$/u, ''); // Remove $c. (Can $c be non-last?)\n const candArray = [tmp, `${tmp} ‡5 MELINDA`].filter(val => val !== fieldAsNormalizedString);\n if (candArray.length) {\n return deriveDeletable946s(remainingFields, [...results, ...candArray]);\n }\n return deriveDeletable946s(remainingFields, results);\n }\n}\n\nexport function removeIndividualInferiorDatafields(record, fix = true) { // No $6 nor $8 in field\n const deletableFieldsAsStrings = deriveIndividualDeletables(record);\n const deletableFieldsAsNormalizedStrings = deriveIndividualNormalizedDeletables(record);\n\n // nvdebug(`Deletables:\\n ${deletableFieldsAsStrings.join('\\n ')}`);\n // nvdebug(`Normalized deletables:\\n ${deletableFieldsAsNormalizedStrings.join('\\n ')}`);\n\n const hits = record.fields.filter(field => isDeletableField(field));\n\n const deletedFieldsAsStrings = hits.map(f => fieldToString(f));\n\n if (fix) { // eslint-disable-line functional/no-conditional-statements\n hits.forEach(field => {\n //nvdebug(`Remove inferior field: ${fieldToString(field)}`, debug);\n record.removeField(field);\n });\n }\n\n return deletedFieldsAsStrings;\n\n function isDeletableField(field) {\n const fieldAsString = fieldToString(field);\n if (deletableFieldsAsStrings.includes(fieldAsString)) {\n return true;\n }\n const fieldAsNormalizedString = fieldToNormalizedString(field);\n if (deletableFieldsAsNormalizedStrings.includes(fieldAsNormalizedString)) {\n return true;\n }\n\n return false;\n }\n}\n\n\nexport function removeInferiorDatafields(record, fix = true) {\n const removables = removeIndividualInferiorDatafields(record, fix); // Lone fields\n //const removables8 = removeDuplicateSubfield8Chains(record, fix); // Lone subfield $8 chains\n const removables6 = removeInferiorChains(record, fix); // Lone subfield $6 chains\n // HOW TO HANDLE $6+$8 combos? Skipping is relatively OK.\n\n nvdebug(`REMOVABLES:\\n ${removables.join('\\n ')}`, debug);\n nvdebug(`REMOVABLES 6:\\n ${removables6.join('\\n ')}`, debug);\n\n const removablesAll = removables.concat(removables6); //.concat(removables8);\n\n return removablesAll;\n}\n"],"mappings":"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"}
|