@natlibfi/melinda-rest-api-commons 2.3.2-alpha.3 → 2.3.2-alpha.4

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.
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.REPLACE_PREFIXES = exports.BIB_PREVALIDATION_FIX_SETTINGS = exports.BIB_PREIMPORT_FIX_SETTINGS = exports.BIB_POSTMERGE_FIX_SETTINGS = exports.BIB_HANDLE_TEMP_URNS_SETTINGS = exports.BIB_FORMAT_SETTINGS = exports.BIB_F035_TO_SID = exports.AUTNAME_PREIMPORT_FIX_SETTINGS = void 0;
6
+ exports.REPLACE_PREFIXES = exports.BIB_STRIP_F884S_SETTINGS = exports.BIB_PREVALIDATION_FIX_SETTINGS = exports.BIB_PREIMPORT_FIX_SETTINGS = exports.BIB_POSTMERGE_FIX_SETTINGS = exports.BIB_HANDLE_TEMP_URNS_SETTINGS = exports.BIB_FORMAT_SETTINGS = exports.BIB_F035_TO_SID = exports.AUTNAME_PREIMPORT_FIX_SETTINGS = void 0;
7
7
  exports.fixRecord = fixRecord;
8
8
 
9
9
  var _marcRecord = require("@natlibfi/marc-record");
@@ -20,7 +20,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
20
20
  *
21
21
  * Shared modules for microservices of Melinda rest api batch import system
22
22
  *
23
- * Copyright (C) 2020 University Of Helsinki (The National Library Of Finland)
23
+ * Copyright (C) 2020-2022 University Of Helsinki (The National Library Of Finland)
24
24
  *
25
25
  * This file is part of melinda-rest-api-commons
26
26
  *
@@ -60,6 +60,7 @@ function fixRecord(record, settings = {}) {
60
60
  replacePrefixes(options);
61
61
  });
62
62
  handleTempUrns(settings.handleTempUrns);
63
+ stripF884s(settings.stripF884s);
63
64
  return newRecord.toObject(); // Replace prefix in all specified subfields
64
65
 
65
66
  function replacePrefixes(options) {
@@ -146,6 +147,104 @@ function fixRecord(record, settings = {}) {
146
147
  return undefined;
147
148
  }).filter(value => value !== undefined);
148
149
  }
150
+ }
151
+
152
+ function stripF884s(options) {
153
+ debugData(`Options for stripF884s: ${JSON.stringify(options)}`);
154
+
155
+ if (options !== true) {
156
+ return;
157
+ } // Handle only f884 with $5 MELINDA - let's no remove random f884s
158
+
159
+
160
+ const isMelindaf884 = f => f.tag === '884' && f.subfields.some(({
161
+ code,
162
+ value
163
+ }) => code === '5' && value === 'MELINDA');
164
+
165
+ const f884Melindas = newRecord.fields.filter(isMelindaf884);
166
+ debugData(`Melinda's f884s (${f884Melindas.length}) \n ${JSON.stringify(f884Melindas)}`);
167
+
168
+ if (f884Melindas.length < 2) {
169
+ debug(`Not enough Melinda's f884.s to filter (${f884Melindas.length})`);
170
+ return;
171
+ } // Sort fields by date subfield $g, so we'll keep the oldest one
172
+
173
+
174
+ const sortedFields = sortFieldsBySubfieldValue(f884Melindas, 'g');
175
+ debugData(`Melinda's f884s sorted by 'g' - oldest first: (${sortedFields.length}) \n ${JSON.stringify(sortedFields)}`); // Drop fields that are similar without date subfield $g
176
+
177
+ const uniqFields = uniqWithOutSubfield(sortedFields, 'g');
178
+ debugData(`Melindas f884s uniqued without sf $g (${uniqFields.length}) \n ${JSON.stringify(uniqFields)}`); // Replace original Melinda-f884s with remaining Melinda-f884s
179
+ // NOTE: this sorts MELINDA-f884s after possible other f884s
180
+
181
+ newRecord.removeFields(f884Melindas);
182
+ newRecord.insertFields(uniqFields);
183
+ return; // Keep just first instance of each similar field, compare without subfield with subfieldCode
184
+
185
+ function uniqWithOutSubfield(fields, subfieldCode) {
186
+ return fields.reduce((uniq, field) => {
187
+ if (!uniq.some(f => _marcRecord.MarcRecord.isEqual(removeSubfield(f, subfieldCode), removeSubfield(field, subfieldCode)))) {
188
+ // eslint-disable-line functional/no-conditional-statement
189
+ uniq.push(field); // eslint-disable-line functional/immutable-data
190
+ }
191
+
192
+ return uniq;
193
+ }, []);
194
+ } // sort fields by value of each fields first subfield with subfielCode
195
+
196
+
197
+ function sortFieldsBySubfieldValue(fields, subfieldCode) {
198
+ return [...fields].sort((a, b) => {
199
+ const a1value = getFirstSubfieldValue(a, subfieldCode);
200
+ const b1value = getFirstSubfieldValue(b, subfieldCode);
201
+
202
+ if (a1value && !b1value) {
203
+ return -1;
204
+ }
205
+
206
+ if (!a1value && b1value) {
207
+ return 1;
208
+ }
209
+
210
+ if (a1value > b1value) {
211
+ return 1;
212
+ }
213
+
214
+ if (b1value > a1value) {
215
+ return -1;
216
+ }
217
+
218
+ return 0;
219
+ }); // get value for the for instance of subfield with subfieldCode
220
+
221
+ function getFirstSubfieldValue(field, subfieldCode) {
222
+ const subs = field.subfields ? field.subfields.filter(subf => subf.code === subfieldCode) : [];
223
+ return subs.length > 0 ? subs[0].value : '';
224
+ }
225
+ }
226
+ }
227
+
228
+ function removeSubfield(field, code) {
229
+ // Handle non-numeric fields, and fields with a numeric tag of 010 and greater
230
+ // Aleph's FMT as a controlfield might be a problem
231
+ if (!isNaN(field.tag) && parseInt(field.tag, 10) >= 10) {
232
+ const filteredSubfields = field.subfields.filter(sf => sf.code !== code); // Remove whole field if there are no subfields left
233
+
234
+ if (filteredSubfields.length < 1) {
235
+ return false;
236
+ }
237
+
238
+ return {
239
+ tag: field.tag,
240
+ ind1: field.ind1,
241
+ ind2: field.ind2,
242
+ subfields: filteredSubfields
243
+ };
244
+ } // return controlFields as is
245
+
246
+
247
+ return field;
149
248
  } // eslint-disable-next-line max-statements
150
249
 
151
250
 
@@ -208,20 +307,16 @@ function fixRecord(record, settings = {}) {
208
307
  // we propably should develop the urn/legaldeposit -validator to use also here
209
308
 
210
309
 
211
- function createLDSubfields() {
212
- return [{
310
+ function validateLD(f856sUrn) {
311
+ debug(`Validating the existence of legal deposit subfields`);
312
+ const LD_SUBFIELDS = [{
213
313
  code: 'z',
214
314
  value: 'Käytettävissä vapaakappalekirjastoissa'
215
315
  }, {
216
316
  code: '5',
217
317
  value: 'FI-Vapaa'
218
318
  }];
219
- }
220
-
221
- function validateLD(f856sUrn) {
222
- debug(`Validating the existence of legal deposit subfields`);
223
- const ldSubfields = createLDSubfields();
224
- const f856sUrnWithLdSubfields = f856sUrn.filter(field => fieldHasLDSubfields(field, ldSubfields));
319
+ const f856sUrnWithLdSubfields = f856sUrn.filter(field => fieldHasLDSubfields(field, LD_SUBFIELDS));
225
320
 
226
321
  if (f856sUrnWithLdSubfields.length > 0) {
227
322
  debug(`Record has ${f856sUrnWithLdSubfields.length} URN fields with all necessary legal deposit subfields`);
@@ -303,7 +398,8 @@ const BIB_PREVALIDATION_FIX_SETTINGS = {
303
398
  };
304
399
  exports.BIB_PREVALIDATION_FIX_SETTINGS = BIB_PREVALIDATION_FIX_SETTINGS;
305
400
  const BIB_POSTMERGE_FIX_SETTINGS = {
306
- handleTempUrns: true
401
+ handleTempUrns: true,
402
+ stripF884s: true
307
403
  };
308
404
  exports.BIB_POSTMERGE_FIX_SETTINGS = BIB_POSTMERGE_FIX_SETTINGS;
309
405
  const BIB_PREIMPORT_FIX_SETTINGS = {
@@ -318,4 +414,8 @@ const BIB_HANDLE_TEMP_URNS_SETTINGS = {
318
414
  handleTempUrns: true
319
415
  };
320
416
  exports.BIB_HANDLE_TEMP_URNS_SETTINGS = BIB_HANDLE_TEMP_URNS_SETTINGS;
417
+ const BIB_STRIP_F884S_SETTINGS = {
418
+ stripF884s: true
419
+ };
420
+ exports.BIB_STRIP_F884S_SETTINGS = BIB_STRIP_F884S_SETTINGS;
321
421
  //# sourceMappingURL=fix.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fix.js","names":["fixRecord","record","settings","logger","createLogger","debug","createDebugLogger","debugData","extend","verbose","JSON","stringify","newRecord","MarcRecord","clone","subfieldValues","generateMissingSIDsOptions","generateMissingSIDs","undefined","replacePrefixesOptions","replacePrefixes","forEach","options","handleTempUrns","toObject","oldPrefix","newPrefix","prefixReplaceCodes","pattern","replacement","getDatafields","field","subfields","filter","code","includes","subfield","value","replace","f035Filters","fSIDFilters","length","f035s","f035ToSidInfo","get","fSIDs","sidsToSidInfo","sidsToBeAdded","genNewSids","f035SidInfo","some","fSIDInfo","SID","sidField","insertField","map","sidInfo","tag","ind1","ind2","SIDs","flatMap","sub","wantedSub","regexp","test","findIndex","slice","indexOf","hasURN","f","hasTempSubfield","hasNoTempSubfield","f856sUrn","fields","f856sUrnsWithTempSubfields","f856sUrnsWithNoTempSubfields","existingLegalDepositURN","validateLD","removeFields","fixedFields","removeTempSubfield","insertFields","createLDSubfields","ldSubfields","f856sUrnWithLdSubfields","fieldHasLDSubfields","every","ldsf","sf","isNaN","parseInt","filteredSubfields","BIB_F035_TO_SID","REPLACE_PREFIXES","BIB_FORMAT_SETTINGS","BIB_PREVALIDATION_FIX_SETTINGS","BIB_POSTMERGE_FIX_SETTINGS","BIB_PREIMPORT_FIX_SETTINGS","AUTNAME_PREIMPORT_FIX_SETTINGS","BIB_HANDLE_TEMP_URNS_SETTINGS"],"sources":["../../src/helpers/fix.js"],"sourcesContent":["/**\n*\n* @licstart The following is the entire license notice for the JavaScript code in this file.\n*\n* Shared modules for microservices of Melinda rest api batch import system\n*\n* Copyright (C) 2020 University Of Helsinki (The National Library Of Finland)\n*\n* This file is part of melinda-rest-api-commons\n*\n* melinda-rest-api-commons program is free software: you can redistribute it and/or modify\n* it under the terms of the GNU Affero General Public License as\n* published by the Free Software Foundation, either version 3 of the\n* License, or (at your option) any later version.\n*\n* melinda-rest-api-commons is distributed in the hope that it will be useful,\n* but WITHOUT ANY WARRANTY; without even the implied warranty of\n* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n* GNU Affero General Public License for more details.\n*\n* You should have received a copy of the GNU Affero General Public License\n* along with this program. If not, see <http://www.gnu.org/licenses/>.\n*\n* @licend The above is the entire license notice\n* for the JavaScript code in this file.\n*\n*/\n\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport {createLogger} from '@natlibfi/melinda-backend-commons';\nimport createDebugLogger from 'debug';\n\nexport function fixRecord(record, settings = {}) {\n const logger = createLogger();\n const debug = createDebugLogger('@natlibfi/melinda-rest-api-commons:fixRecord');\n const debugData = debug.extend('data');\n\n logger.verbose(`We will apply formatting to the record according to settings: ${JSON.stringify(settings)}`);\n const newRecord = MarcRecord.clone(record, {subfieldValues: false});\n debugData(`settings: ${JSON.stringify(settings)}`);\n\n const generateMissingSIDsOptions = settings.generateMissingSIDs || undefined;\n generateMissingSIDs(generateMissingSIDsOptions);\n\n const replacePrefixesOptions = settings.replacePrefixes || [];\n debugData(`replacePrefixesOptions: ${JSON.stringify(replacePrefixesOptions)}`);\n\n replacePrefixesOptions.forEach(options => {\n replacePrefixes(options);\n });\n\n handleTempUrns(settings.handleTempUrns);\n\n return newRecord.toObject();\n\n // Replace prefix in all specified subfields\n function replacePrefixes(options) {\n const {oldPrefix, newPrefix, prefixReplaceCodes} = options;\n debug(`Replacing ${oldPrefix} with ${newPrefix} in subfields ${prefixReplaceCodes}`);\n const pattern = `(${oldPrefix})`;\n const replacement = `(${newPrefix})`;\n newRecord.getDatafields()\n .forEach(field => {\n field.subfields\n .filter(({code}) => prefixReplaceCodes.includes(code))\n .forEach(subfield => {\n subfield.value = subfield.value.replace(pattern, replacement); // eslint-disable-line functional/immutable-data\n });\n });\n }\n\n\n function generateMissingSIDs(options) {\n debugData(`generateMissingSIDs options: ${JSON.stringify(options)}`);\n\n const f035Filters = options && options.f035Filters ? options.f035Filters : [];\n const fSIDFilters = options && options.fSIDFilters ? options.fSIDFilters : [];\n\n if (f035Filters.length !== fSIDFilters.length || f035Filters.length < 1 || fSIDFilters.length < 1) {\n debug(`No sane options for generating missing SIDs`);\n return;\n }\n\n const f035s = f035ToSidInfo(newRecord.get(/^035$/u));\n const fSIDs = sidsToSidInfo(newRecord.get(/^SID$/u));\n\n const sidsToBeAdded = genNewSids(fSIDs.length === 0\n ? f035s\n // test that SIDs are not there yet\n : f035s.filter(f035SidInfo => fSIDs.some(fSIDInfo => f035SidInfo.SID !== fSIDInfo.SID && f035SidInfo.value !== fSIDInfo.value)));\n\n // Add new SIDs\n return sidsToBeAdded.forEach(sidField => newRecord.insertField(sidField));\n\n function genNewSids(sidsToBeAdded) {\n return sidsToBeAdded.map(sidInfo => ({tag: 'SID', ind1: ' ', ind2: ' ', subfields: [{code: 'c', value: sidInfo.value}, {code: 'b', value: sidInfo.SID}]}));\n }\n\n function sidsToSidInfo(SIDs) {\n return SIDs.flatMap(({subfields}) => {\n const [SID] = subfields.filter(sub => sub.code === 'b' && fSIDFilters.includes(sub.value)).map(sub => sub.value);\n const [value] = subfields.filter(sub => sub.code === 'c' && sub.value !== undefined).map(sub => sub.value);\n\n if (SID && value) {\n return {\n SID,\n value\n };\n }\n\n return undefined;\n }).filter(value => value !== undefined);\n }\n\n function f035ToSidInfo(f035s) {\n return f035s.flatMap(({subfields}) => {\n const [wantedSub] = subfields.filter(sub => sub.code === 'a' && f035Filters.some(regexp => regexp.test(sub.value)));\n\n if (wantedSub) {\n return {\n SID: fSIDFilters[f035Filters.findIndex(regexp => regexp.test(wantedSub.value))],\n value: wantedSub.value.slice(wantedSub.value.indexOf(')') + 1)\n };\n }\n\n return undefined;\n }).filter(value => value !== undefined);\n }\n }\n\n\n // eslint-disable-next-line max-statements\n function handleTempUrns(options) {\n debugData(`Options for handleTempUrns: ${JSON.stringify(options)}`);\n\n if (options !== true) {\n return;\n }\n\n // If we have an non-temp URN, we can delete tempURNs, otherwise we should delete the temp subfield from URN\n\n const hasURN = f => f.tag === '856' && f.subfields.some(({code, value}) => code === 'u' && (/urn.fi/u).test(value));\n\n const hasTempSubfield = f => f.subfields.some(({code, value}) => code === '9' && (/^MELINDA<TEMP>$/u).test(value));\n const hasNoTempSubfield = f => !f.subfields.some(({code, value}) => code === '9' && (/^MELINDA<TEMP>$/u).test(value));\n\n const f856sUrn = newRecord.fields.filter(hasURN);\n const f856sUrnsWithTempSubfields = f856sUrn.filter(hasTempSubfield);\n const f856sUrnsWithNoTempSubfields = f856sUrn.filter(hasNoTempSubfield);\n\n debugData(`URN f856s: ${JSON.stringify(f856sUrn)}`);\n debugData(`URN f856s with temp subfield: ${JSON.stringify(f856sUrnsWithTempSubfields)}`);\n\n // None of the URNs has temp subfields, we don't need to do anything\n if (f856sUrnsWithTempSubfields.length < 1) {\n debug(`No Urns with temp subfield`);\n return;\n }\n\n // Do we have an existing URN with legal deposit subfields, if we have, we can remove the temp URN field(s)\n const existingLegalDepositURN = validateLD(f856sUrnsWithNoTempSubfields);\n debug(`existingLegalDepositURN: ${existingLegalDepositURN}`);\n\n if (existingLegalDepositURN) {\n debug(`We have an existing LD URN, we can delete temp fields (${f856sUrnsWithTempSubfields.length})`);\n newRecord.removeFields(f856sUrnsWithTempSubfields);\n return;\n }\n\n // We do not have an existing legalDepositURN, we should use the tempURN and remove the temp subfields from it\n if (!existingLegalDepositURN && f856sUrnsWithTempSubfields.length > 0) {\n //debug(`All Urns (${f856sUrn.length}) have a temp subfield`);\n debugData(`Original temp URNs: (${JSON.stringify(f856sUrnsWithTempSubfields)})`);\n const fixedFields = f856sUrnsWithTempSubfields.map(removeTempSubfield).filter(field => field);\n debug(`We removed temp subfields: (${JSON.stringify(fixedFields)})`);\n newRecord.removeFields(f856sUrnsWithTempSubfields);\n newRecord.insertFields(fixedFields);\n return;\n }\n\n // Should we check that the non-temp URN has 2nd ind '0' - meaning that the URN handles the actual resource itself?\n }\n\n // ---- LD-functions below are same as in https://github.com/NatLibFi/marc-record-validators-melinda/blob/feature-updates-to-urn/src/urn.js\n // we propably should develop the urn/legaldeposit -validator to use also here\n\n function createLDSubfields() {\n return [\n {\n code: 'z',\n value: 'Käytettävissä vapaakappalekirjastoissa'\n },\n {\n code: '5',\n value: 'FI-Vapaa'\n }\n ];\n }\n\n function validateLD(f856sUrn) {\n debug(`Validating the existence of legal deposit subfields`);\n const ldSubfields = createLDSubfields();\n const f856sUrnWithLdSubfields = f856sUrn.filter(field => fieldHasLDSubfields(field, ldSubfields));\n if (f856sUrnWithLdSubfields.length > 0) {\n debug(`Record has ${f856sUrnWithLdSubfields.length} URN fields with all necessary legal deposit subfields`);\n debugData(`f856sUrnWithLdSubfields: ${JSON.stringify(f856sUrnWithLdSubfields)}`);\n return true;\n }\n return false;\n }\n\n function fieldHasLDSubfields(field, ldSubfields) {\n if (ldSubfields.every(ldsf => field.subfields.some(sf => sf.code === ldsf.code && sf.value === ldsf.value))) {\n return true;\n }\n }\n\n // ---\n\n function removeTempSubfield(field) {\n\n // Handle non-numeric fields, and fields with a numeric tag of 010 and greater\n // Aleph's FMT as a controlfield might be a problem\n if (!isNaN(field.tag) && parseInt(field.tag, 10) >= 10) {\n\n const filteredSubfields = field.subfields.filter(sf => sf.code !== '9' && !(/^MELINDA<TEMP>$/u).test(sf.value));\n\n // Remove whole field if there are no subfields left\n if (filteredSubfields.length < 1) {\n return false;\n }\n\n return {\n tag: field.tag,\n ind1: field.ind1,\n ind2: field.ind2,\n subfields: filteredSubfields\n };\n }\n // return controlFields as is\n return field;\n }\n}\n\n// This could be formatted so that 035-prefix and SID contents would be better connected than by just an array index\nexport const BIB_F035_TO_SID = {\n f035Filters: [/^\\(FI-BTJ\\)/u, /^\\(FI-TATI\\)/u],\n fSIDFilters: ['FI-BTJ', 'tati']\n};\n\n// There is somewhere other implementations of this same standardPrefixes to alephInternalPrefixes normalization\nexport const REPLACE_PREFIXES = [\n {\n oldPrefix: 'FI-MELINDA',\n newPrefix: 'FIN01',\n prefixReplaceCodes: ['w']\n },\n {\n oldPrefix: 'FI-ASTERI-S',\n newPrefix: 'FIN10',\n prefixReplaceCodes: ['0']\n },\n {\n oldPrefix: 'FI-ASTERI-N',\n newPrefix: 'FIN11',\n prefixReplaceCodes: ['0']\n },\n {\n oldPrefix: 'FI-ASTERI-A',\n newPrefix: 'FIN12',\n prefixReplaceCodes: ['0']\n },\n {\n oldPrefix: 'FI-ASTERI-W',\n newPrefix: 'FIN13',\n prefixReplaceCodes: ['0']\n }\n];\n\n// If placed in config.js testing needs envs\n// BIB_FORMAT_SETTINGS is outdated, use other settings instead\nexport const BIB_FORMAT_SETTINGS = {\n replacePrefixes: REPLACE_PREFIXES,\n generateMissingSIDs: BIB_F035_TO_SID\n};\n\nexport const BIB_PREVALIDATION_FIX_SETTINGS = {\n generateMissingSIDs: BIB_F035_TO_SID\n};\n\nexport const BIB_POSTMERGE_FIX_SETTINGS = {\n handleTempUrns: true\n};\n\nexport const BIB_PREIMPORT_FIX_SETTINGS = {\n replacePrefixes: REPLACE_PREFIXES\n};\n\nexport const AUTNAME_PREIMPORT_FIX_SETTINGS = {\n replacePrefixes: REPLACE_PREFIXES\n};\n\nexport const BIB_HANDLE_TEMP_URNS_SETTINGS = {\n handleTempUrns: true\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"fix.js","names":["fixRecord","record","settings","logger","createLogger","debug","createDebugLogger","debugData","extend","verbose","JSON","stringify","newRecord","MarcRecord","clone","subfieldValues","generateMissingSIDsOptions","generateMissingSIDs","undefined","replacePrefixesOptions","replacePrefixes","forEach","options","handleTempUrns","stripF884s","toObject","oldPrefix","newPrefix","prefixReplaceCodes","pattern","replacement","getDatafields","field","subfields","filter","code","includes","subfield","value","replace","f035Filters","fSIDFilters","length","f035s","f035ToSidInfo","get","fSIDs","sidsToSidInfo","sidsToBeAdded","genNewSids","f035SidInfo","some","fSIDInfo","SID","sidField","insertField","map","sidInfo","tag","ind1","ind2","SIDs","flatMap","sub","wantedSub","regexp","test","findIndex","slice","indexOf","isMelindaf884","f","f884Melindas","fields","sortedFields","sortFieldsBySubfieldValue","uniqFields","uniqWithOutSubfield","removeFields","insertFields","subfieldCode","reduce","uniq","isEqual","removeSubfield","push","sort","a","b","a1value","getFirstSubfieldValue","b1value","subs","subf","isNaN","parseInt","filteredSubfields","sf","hasURN","hasTempSubfield","hasNoTempSubfield","f856sUrn","f856sUrnsWithTempSubfields","f856sUrnsWithNoTempSubfields","existingLegalDepositURN","validateLD","fixedFields","removeTempSubfield","LD_SUBFIELDS","f856sUrnWithLdSubfields","fieldHasLDSubfields","ldSubfields","every","ldsf","BIB_F035_TO_SID","REPLACE_PREFIXES","BIB_FORMAT_SETTINGS","BIB_PREVALIDATION_FIX_SETTINGS","BIB_POSTMERGE_FIX_SETTINGS","BIB_PREIMPORT_FIX_SETTINGS","AUTNAME_PREIMPORT_FIX_SETTINGS","BIB_HANDLE_TEMP_URNS_SETTINGS","BIB_STRIP_F884S_SETTINGS"],"sources":["../../src/helpers/fix.js"],"sourcesContent":["/**\n*\n* @licstart The following is the entire license notice for the JavaScript code in this file.\n*\n* Shared modules for microservices of Melinda rest api batch import system\n*\n* Copyright (C) 2020-2022 University Of Helsinki (The National Library Of Finland)\n*\n* This file is part of melinda-rest-api-commons\n*\n* melinda-rest-api-commons program is free software: you can redistribute it and/or modify\n* it under the terms of the GNU Affero General Public License as\n* published by the Free Software Foundation, either version 3 of the\n* License, or (at your option) any later version.\n*\n* melinda-rest-api-commons is distributed in the hope that it will be useful,\n* but WITHOUT ANY WARRANTY; without even the implied warranty of\n* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n* GNU Affero General Public License for more details.\n*\n* You should have received a copy of the GNU Affero General Public License\n* along with this program. If not, see <http://www.gnu.org/licenses/>.\n*\n* @licend The above is the entire license notice\n* for the JavaScript code in this file.\n*\n*/\n\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport {createLogger} from '@natlibfi/melinda-backend-commons';\nimport createDebugLogger from 'debug';\n\nexport function fixRecord(record, settings = {}) {\n const logger = createLogger();\n const debug = createDebugLogger('@natlibfi/melinda-rest-api-commons:fixRecord');\n const debugData = debug.extend('data');\n\n logger.verbose(`We will apply formatting to the record according to settings: ${JSON.stringify(settings)}`);\n const newRecord = MarcRecord.clone(record, {subfieldValues: false});\n debugData(`settings: ${JSON.stringify(settings)}`);\n\n const generateMissingSIDsOptions = settings.generateMissingSIDs || undefined;\n generateMissingSIDs(generateMissingSIDsOptions);\n\n const replacePrefixesOptions = settings.replacePrefixes || [];\n debugData(`replacePrefixesOptions: ${JSON.stringify(replacePrefixesOptions)}`);\n\n replacePrefixesOptions.forEach(options => {\n replacePrefixes(options);\n });\n\n handleTempUrns(settings.handleTempUrns);\n stripF884s(settings.stripF884s);\n\n return newRecord.toObject();\n\n // Replace prefix in all specified subfields\n function replacePrefixes(options) {\n const {oldPrefix, newPrefix, prefixReplaceCodes} = options;\n debug(`Replacing ${oldPrefix} with ${newPrefix} in subfields ${prefixReplaceCodes}`);\n const pattern = `(${oldPrefix})`;\n const replacement = `(${newPrefix})`;\n newRecord.getDatafields()\n .forEach(field => {\n field.subfields\n .filter(({code}) => prefixReplaceCodes.includes(code))\n .forEach(subfield => {\n subfield.value = subfield.value.replace(pattern, replacement); // eslint-disable-line functional/immutable-data\n });\n });\n }\n\n\n function generateMissingSIDs(options) {\n debugData(`generateMissingSIDs options: ${JSON.stringify(options)}`);\n\n const f035Filters = options && options.f035Filters ? options.f035Filters : [];\n const fSIDFilters = options && options.fSIDFilters ? options.fSIDFilters : [];\n\n if (f035Filters.length !== fSIDFilters.length || f035Filters.length < 1 || fSIDFilters.length < 1) {\n debug(`No sane options for generating missing SIDs`);\n return;\n }\n\n const f035s = f035ToSidInfo(newRecord.get(/^035$/u));\n const fSIDs = sidsToSidInfo(newRecord.get(/^SID$/u));\n\n const sidsToBeAdded = genNewSids(fSIDs.length === 0\n ? f035s\n // test that SIDs are not there yet\n : f035s.filter(f035SidInfo => fSIDs.some(fSIDInfo => f035SidInfo.SID !== fSIDInfo.SID && f035SidInfo.value !== fSIDInfo.value)));\n\n // Add new SIDs\n return sidsToBeAdded.forEach(sidField => newRecord.insertField(sidField));\n\n function genNewSids(sidsToBeAdded) {\n return sidsToBeAdded.map(sidInfo => ({tag: 'SID', ind1: ' ', ind2: ' ', subfields: [{code: 'c', value: sidInfo.value}, {code: 'b', value: sidInfo.SID}]}));\n }\n\n function sidsToSidInfo(SIDs) {\n return SIDs.flatMap(({subfields}) => {\n const [SID] = subfields.filter(sub => sub.code === 'b' && fSIDFilters.includes(sub.value)).map(sub => sub.value);\n const [value] = subfields.filter(sub => sub.code === 'c' && sub.value !== undefined).map(sub => sub.value);\n\n if (SID && value) {\n return {\n SID,\n value\n };\n }\n\n return undefined;\n }).filter(value => value !== undefined);\n }\n\n function f035ToSidInfo(f035s) {\n return f035s.flatMap(({subfields}) => {\n const [wantedSub] = subfields.filter(sub => sub.code === 'a' && f035Filters.some(regexp => regexp.test(sub.value)));\n\n if (wantedSub) {\n return {\n SID: fSIDFilters[f035Filters.findIndex(regexp => regexp.test(wantedSub.value))],\n value: wantedSub.value.slice(wantedSub.value.indexOf(')') + 1)\n };\n }\n\n return undefined;\n }).filter(value => value !== undefined);\n }\n }\n\n function stripF884s(options) {\n debugData(`Options for stripF884s: ${JSON.stringify(options)}`);\n\n if (options !== true) {\n return;\n }\n\n // Handle only f884 with $5 MELINDA - let's no remove random f884s\n const isMelindaf884 = f => f.tag === '884' && f.subfields.some(({code, value}) => code === '5' && value === 'MELINDA');\n\n const f884Melindas = newRecord.fields.filter(isMelindaf884);\n debugData(`Melinda's f884s (${f884Melindas.length}) \\n ${JSON.stringify(f884Melindas)}`);\n\n if (f884Melindas.length < 2) {\n debug(`Not enough Melinda's f884.s to filter (${f884Melindas.length})`);\n return;\n }\n\n // Sort fields by date subfield $g, so we'll keep the oldest one\n const sortedFields = sortFieldsBySubfieldValue(f884Melindas, 'g');\n debugData(`Melinda's f884s sorted by 'g' - oldest first: (${sortedFields.length}) \\n ${JSON.stringify(sortedFields)}`);\n\n // Drop fields that are similar without date subfield $g\n const uniqFields = uniqWithOutSubfield(sortedFields, 'g');\n debugData(`Melindas f884s uniqued without sf $g (${uniqFields.length}) \\n ${JSON.stringify(uniqFields)}`);\n\n // Replace original Melinda-f884s with remaining Melinda-f884s\n // NOTE: this sorts MELINDA-f884s after possible other f884s\n newRecord.removeFields(f884Melindas);\n newRecord.insertFields(uniqFields);\n return;\n\n // Keep just first instance of each similar field, compare without subfield with subfieldCode\n function uniqWithOutSubfield(fields, subfieldCode) {\n return fields.reduce((uniq, field) => {\n if (!uniq.some(f => MarcRecord.isEqual(removeSubfield(f, subfieldCode), removeSubfield(field, subfieldCode)))) { // eslint-disable-line functional/no-conditional-statement\n uniq.push(field); // eslint-disable-line functional/immutable-data\n }\n\n return uniq;\n }, []);\n }\n\n // sort fields by value of each fields first subfield with subfielCode\n function sortFieldsBySubfieldValue(fields, subfieldCode) {\n return [...fields].sort((a, b) => {\n const a1value = getFirstSubfieldValue(a, subfieldCode);\n const b1value = getFirstSubfieldValue(b, subfieldCode);\n if (a1value && !b1value) {\n return -1;\n }\n if (!a1value && b1value) {\n return 1;\n }\n if (a1value > b1value) {\n return 1;\n }\n if (b1value > a1value) {\n return -1;\n }\n return 0;\n });\n\n // get value for the for instance of subfield with subfieldCode\n function getFirstSubfieldValue(field, subfieldCode) {\n const subs = field.subfields ? field.subfields.filter(subf => subf.code === subfieldCode) : [];\n return subs.length > 0 ? subs[0].value : '';\n }\n }\n\n }\n\n function removeSubfield(field, code) {\n\n // Handle non-numeric fields, and fields with a numeric tag of 010 and greater\n // Aleph's FMT as a controlfield might be a problem\n if (!isNaN(field.tag) && parseInt(field.tag, 10) >= 10) {\n\n const filteredSubfields = field.subfields.filter(sf => sf.code !== code);\n\n // Remove whole field if there are no subfields left\n if (filteredSubfields.length < 1) {\n return false;\n }\n\n return {\n tag: field.tag,\n ind1: field.ind1,\n ind2: field.ind2,\n subfields: filteredSubfields\n };\n }\n // return controlFields as is\n return field;\n }\n\n\n // eslint-disable-next-line max-statements\n function handleTempUrns(options) {\n debugData(`Options for handleTempUrns: ${JSON.stringify(options)}`);\n\n if (options !== true) {\n return;\n }\n\n // If we have an non-temp URN, we can delete tempURNs, otherwise we should delete the temp subfield from URN\n\n const hasURN = f => f.tag === '856' && f.subfields.some(({code, value}) => code === 'u' && (/urn.fi/u).test(value));\n\n const hasTempSubfield = f => f.subfields.some(({code, value}) => code === '9' && (/^MELINDA<TEMP>$/u).test(value));\n const hasNoTempSubfield = f => !f.subfields.some(({code, value}) => code === '9' && (/^MELINDA<TEMP>$/u).test(value));\n\n const f856sUrn = newRecord.fields.filter(hasURN);\n const f856sUrnsWithTempSubfields = f856sUrn.filter(hasTempSubfield);\n const f856sUrnsWithNoTempSubfields = f856sUrn.filter(hasNoTempSubfield);\n\n debugData(`URN f856s: ${JSON.stringify(f856sUrn)}`);\n debugData(`URN f856s with temp subfield: ${JSON.stringify(f856sUrnsWithTempSubfields)}`);\n\n // None of the URNs has temp subfields, we don't need to do anything\n if (f856sUrnsWithTempSubfields.length < 1) {\n debug(`No Urns with temp subfield`);\n return;\n }\n\n // Do we have an existing URN with legal deposit subfields, if we have, we can remove the temp URN field(s)\n const existingLegalDepositURN = validateLD(f856sUrnsWithNoTempSubfields);\n debug(`existingLegalDepositURN: ${existingLegalDepositURN}`);\n\n if (existingLegalDepositURN) {\n debug(`We have an existing LD URN, we can delete temp fields (${f856sUrnsWithTempSubfields.length})`);\n newRecord.removeFields(f856sUrnsWithTempSubfields);\n return;\n }\n\n // We do not have an existing legalDepositURN, we should use the tempURN and remove the temp subfields from it\n if (!existingLegalDepositURN && f856sUrnsWithTempSubfields.length > 0) {\n //debug(`All Urns (${f856sUrn.length}) have a temp subfield`);\n debugData(`Original temp URNs: (${JSON.stringify(f856sUrnsWithTempSubfields)})`);\n const fixedFields = f856sUrnsWithTempSubfields.map(removeTempSubfield).filter(field => field);\n debug(`We removed temp subfields: (${JSON.stringify(fixedFields)})`);\n newRecord.removeFields(f856sUrnsWithTempSubfields);\n newRecord.insertFields(fixedFields);\n return;\n }\n\n // Should we check that the non-temp URN has 2nd ind '0' - meaning that the URN handles the actual resource itself?\n }\n\n // ---- LD-functions below are same as in https://github.com/NatLibFi/marc-record-validators-melinda/blob/feature-updates-to-urn/src/urn.js\n // we propably should develop the urn/legaldeposit -validator to use also here\n\n function validateLD(f856sUrn) {\n debug(`Validating the existence of legal deposit subfields`);\n\n const LD_SUBFIELDS = [\n {code: 'z', value: 'Käytettävissä vapaakappalekirjastoissa'},\n {code: '5', value: 'FI-Vapaa'}\n ];\n\n const f856sUrnWithLdSubfields = f856sUrn.filter(field => fieldHasLDSubfields(field, LD_SUBFIELDS));\n if (f856sUrnWithLdSubfields.length > 0) {\n debug(`Record has ${f856sUrnWithLdSubfields.length} URN fields with all necessary legal deposit subfields`);\n debugData(`f856sUrnWithLdSubfields: ${JSON.stringify(f856sUrnWithLdSubfields)}`);\n return true;\n }\n return false;\n }\n\n function fieldHasLDSubfields(field, ldSubfields) {\n if (ldSubfields.every(ldsf => field.subfields.some(sf => sf.code === ldsf.code && sf.value === ldsf.value))) {\n return true;\n }\n }\n\n // ---\n\n function removeTempSubfield(field) {\n\n // Handle non-numeric fields, and fields with a numeric tag of 010 and greater\n // Aleph's FMT as a controlfield might be a problem\n if (!isNaN(field.tag) && parseInt(field.tag, 10) >= 10) {\n\n const filteredSubfields = field.subfields.filter(sf => sf.code !== '9' && !(/^MELINDA<TEMP>$/u).test(sf.value));\n\n // Remove whole field if there are no subfields left\n if (filteredSubfields.length < 1) {\n return false;\n }\n\n return {\n tag: field.tag,\n ind1: field.ind1,\n ind2: field.ind2,\n subfields: filteredSubfields\n };\n }\n // return controlFields as is\n return field;\n }\n}\n\n// This could be formatted so that 035-prefix and SID contents would be better connected than by just an array index\nexport const BIB_F035_TO_SID = {\n f035Filters: [/^\\(FI-BTJ\\)/u, /^\\(FI-TATI\\)/u],\n fSIDFilters: ['FI-BTJ', 'tati']\n};\n\n// There is somewhere other implementations of this same standardPrefixes to alephInternalPrefixes normalization\nexport const REPLACE_PREFIXES = [\n {\n oldPrefix: 'FI-MELINDA',\n newPrefix: 'FIN01',\n prefixReplaceCodes: ['w']\n },\n {\n oldPrefix: 'FI-ASTERI-S',\n newPrefix: 'FIN10',\n prefixReplaceCodes: ['0']\n },\n {\n oldPrefix: 'FI-ASTERI-N',\n newPrefix: 'FIN11',\n prefixReplaceCodes: ['0']\n },\n {\n oldPrefix: 'FI-ASTERI-A',\n newPrefix: 'FIN12',\n prefixReplaceCodes: ['0']\n },\n {\n oldPrefix: 'FI-ASTERI-W',\n newPrefix: 'FIN13',\n prefixReplaceCodes: ['0']\n }\n];\n\n// If placed in config.js testing needs envs\n// BIB_FORMAT_SETTINGS is outdated, use other settings instead\nexport const BIB_FORMAT_SETTINGS = {\n replacePrefixes: REPLACE_PREFIXES,\n generateMissingSIDs: BIB_F035_TO_SID\n};\n\nexport const BIB_PREVALIDATION_FIX_SETTINGS = {\n generateMissingSIDs: BIB_F035_TO_SID\n};\n\nexport const BIB_POSTMERGE_FIX_SETTINGS = {\n handleTempUrns: true,\n stripF884s: true\n};\n\nexport const BIB_PREIMPORT_FIX_SETTINGS = {\n replacePrefixes: REPLACE_PREFIXES\n};\n\nexport const AUTNAME_PREIMPORT_FIX_SETTINGS = {\n replacePrefixes: REPLACE_PREFIXES\n};\n\nexport const BIB_HANDLE_TEMP_URNS_SETTINGS = {\n handleTempUrns: true\n};\n\nexport const BIB_STRIP_F884S_SETTINGS = {\n stripF884s: true\n};\n"],"mappings":"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"}
@@ -41,7 +41,7 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
41
41
  */
42
42
  //import {createDebugLogger} from 'debug';
43
43
  describe('services/fix', () => {
44
- const FIXTURES_PATH = [__dirname, '..', '..', 'test-fixtures', 'format'];
44
+ const FIXTURES_PATH = [__dirname, '..', '..', 'test-fixtures', 'fix'];
45
45
  const {
46
46
  getFixture
47
47
  } = (0, _fixura.default)({
@@ -166,7 +166,7 @@ describe('services/fix', () => {
166
166
  (0, _chai.expect)(result).to.eql(expected);
167
167
  });
168
168
  });
169
- describe('bib-postvalidation-fix -settings', () => {
169
+ describe('bib-preimport-fix -settings', () => {
170
170
  it('Should handle link subfields, but not add missing SIDs, when running with BIB_PREIMPORT_FIX_SETTINGS', () => {
171
171
  const record = new _marcRecord.MarcRecord(getFixture({
172
172
  components: ['in', 'f035tatiAndFin11-for-postvalidation.json']
@@ -220,5 +220,47 @@ describe('services/fix', () => {
220
220
  (0, _chai.expect)(result).to.eql(expected);
221
221
  });
222
222
  });
223
+ describe('Strip f884s', () => {
224
+ it('Should strip newer f884', () => {
225
+ const record = new _marcRecord.MarcRecord(getFixture({
226
+ components: ['in', 'f884s-1.json']
227
+ }));
228
+ const result = (0, _fix.fixRecord)(record.toObject(), _fix.BIB_STRIP_F884S_SETTINGS);
229
+ const expected = getFixture({
230
+ components: ['out', 'f884s-1.json']
231
+ });
232
+ (0, _chai.expect)(result).to.eql(expected);
233
+ });
234
+ it('Should be able to handle a f884 without subfield $g - but it should keep the oldest with existing $g', () => {
235
+ const record = new _marcRecord.MarcRecord(getFixture({
236
+ components: ['in', 'f884s-2.json']
237
+ }));
238
+ const result = (0, _fix.fixRecord)(record.toObject(), _fix.BIB_STRIP_F884S_SETTINGS);
239
+ const expected = getFixture({
240
+ components: ['out', 'f884s-2.json']
241
+ });
242
+ (0, _chai.expect)(result).to.eql(expected);
243
+ });
244
+ it('Should keep f884s with differing $a', () => {
245
+ const record = new _marcRecord.MarcRecord(getFixture({
246
+ components: ['in', 'f884s-3.json']
247
+ }));
248
+ const result = (0, _fix.fixRecord)(record.toObject(), _fix.BIB_STRIP_F884S_SETTINGS);
249
+ const expected = getFixture({
250
+ components: ['out', 'f884s-3.json']
251
+ });
252
+ (0, _chai.expect)(result).to.eql(expected);
253
+ });
254
+ it('Should keep f884s without $5 MELINDA even if the are duplicates', () => {
255
+ const record = new _marcRecord.MarcRecord(getFixture({
256
+ components: ['in', 'f884s-4.json']
257
+ }));
258
+ const result = (0, _fix.fixRecord)(record.toObject(), _fix.BIB_STRIP_F884S_SETTINGS);
259
+ const expected = getFixture({
260
+ components: ['out', 'f884s-4.json']
261
+ });
262
+ (0, _chai.expect)(result).to.eql(expected);
263
+ });
264
+ });
223
265
  });
224
266
  //# sourceMappingURL=fix.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fix.spec.js","names":["describe","FIXTURES_PATH","__dirname","getFixture","fixtureFactory","root","reader","READERS","JSON","it","record","MarcRecord","components","result","fixRecord","toObject","undefined","expected","expect","to","eql","BIB_FORMAT_SETTINGS","generateMissingSIDs","BIB_F035_TO_SID","BIB_PREVALIDATION_FIX_SETTINGS","BIB_PREIMPORT_FIX_SETTINGS","BIB_HANDLE_TEMP_URNS_SETTINGS"],"sources":["../../src/helpers/fix.spec.js"],"sourcesContent":["/**\n*\n* @licstart The following is the entire license notice for the JavaScript code in this file.\n*\n* Shared modules for microservices of Melinda rest api batch import system\n*\n* Copyright (C) 2020 University Of Helsinki (The National Library Of Finland)\n*\n* This file is part of melinda-rest-api-commons\n*\n* melinda-rest-api-commons program is free software: you can redistribute it and/or modify\n* it under the terms of the GNU Affero General Public License as\n* published by the Free Software Foundation, either version 3 of the\n* License, or (at your option) any later version.\n*\n* melinda-rest-api-commons is distributed in the hope that it will be useful,\n* but WITHOUT ANY WARRANTY; without even the implied warranty of\n* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n* GNU Affero General Public License for more details.\n*\n* You should have received a copy of the GNU Affero General Public License\n* along with this program. If not, see <http://www.gnu.org/licenses/>.\n*\n* @licend The above is the entire license notice\n* for the JavaScript code in this file.\n*\n*/\n\nimport {expect} from 'chai';\nimport fixtureFactory, {READERS} from '@natlibfi/fixura';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport {fixRecord, BIB_FORMAT_SETTINGS, BIB_F035_TO_SID, BIB_PREVALIDATION_FIX_SETTINGS, BIB_PREIMPORT_FIX_SETTINGS, BIB_HANDLE_TEMP_URNS_SETTINGS} from './fix';\n//import {createDebugLogger} from 'debug';\n\ndescribe('services/fix', () => {\n const FIXTURES_PATH = [\n __dirname,\n '..',\n '..',\n 'test-fixtures',\n 'format'\n ];\n const {getFixture} = fixtureFactory({root: FIXTURES_PATH, reader: READERS.JSON});\n\n describe('Undefined options', () => {\n it(`Should not update link subfield prefixes if options are undefined`, () => {\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'fiAsteriN0Fin11.json'\n ]\n }));\n const result = fixRecord(record.toObject(), undefined);\n const expected = getFixture({\n components: [\n 'in',\n 'fiAsteriN0Fin11.json'\n ]\n });\n\n expect(result).to.eql(expected);\n });\n });\n\n\n describe('fiAsteriN0Fin11', () => {\n it('Should succeed', () => {\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'fiAsteriN0Fin11.json'\n ]\n }));\n const result = fixRecord(record.toObject(), BIB_FORMAT_SETTINGS);\n const expected = getFixture({\n components: [\n 'out',\n 'fiAsteriN0Fin11.json'\n ]\n });\n\n expect(result).to.eql(expected);\n });\n });\n\n describe('fiAsteriS0Fin10', () => {\n it('Should succeed', () => {\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'fiAsteriS0Fin10.json'\n ]\n }));\n const result = fixRecord(record.toObject(), BIB_FORMAT_SETTINGS);\n const expected = getFixture({\n components: [\n 'out',\n 'fiAsteriS0Fin10.json'\n ]\n });\n\n expect(result).to.eql(expected);\n });\n });\n\n describe('fiMelindaWFin01', () => {\n it('Should succeed', () => {\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'fiMelindaWFin01.json'\n ]\n }));\n const result = fixRecord(record.toObject(), BIB_FORMAT_SETTINGS);\n const expected = getFixture({\n components: [\n 'out',\n 'fiMelindaWFin01.json'\n ]\n });\n\n expect(result).to.eql(expected);\n });\n });\n\n describe('f035fibtj', () => {\n it('Should add FI-BTJ SID', () => {\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'f035fibtj.json'\n ]\n }));\n const result = fixRecord(record.toObject(), {generateMissingSIDs: BIB_F035_TO_SID});\n const expected = getFixture({\n components: [\n 'out',\n 'f035fibtj.json'\n ]\n });\n\n expect(result).to.eql(expected);\n });\n });\n\n describe('f035tati', () => {\n it('Should add tati SID', () => {\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'f035tati.json'\n ]\n }));\n const result = fixRecord(record.toObject(), {generateMissingSIDs: BIB_F035_TO_SID});\n const expected = getFixture({\n components: [\n 'out',\n 'f035tati.json'\n ]\n });\n\n expect(result).to.eql(expected);\n });\n });\n\n describe('f035fibtjAndTati', () => {\n it('Should add tati SID and skip FI-BTJ SID', () => {\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'f035fibtjAndTati.json'\n ]\n }));\n const result = fixRecord(record.toObject(), {generateMissingSIDs: BIB_F035_TO_SID});\n const expected = getFixture({\n components: [\n 'out',\n 'f035fibtjAndTati.json'\n ]\n });\n // eslint-disable-next-line no-console\n //console.log(`result: ${JSON.stringify(result)}`);\n // eslint-disable-next-line no-console\n //console.log(`expect: ${JSON.stringify(expected)}`);\n expect(result).to.eql(expected);\n });\n });\n\n describe('f035tati', () => {\n it('Should NOT add tati SID with undefined options', () => {\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'f035tati.json'\n ]\n }));\n const result = fixRecord(record.toObject(), undefined);\n const expected = getFixture({\n components: [\n 'in',\n 'f035tati.json'\n ]\n });\n\n expect(result).to.eql(expected);\n });\n });\n\n describe('bib-prevalidation-fix -settings', () => {\n it('Should add missing SIDs, but not handle sf $0s when running with BIB_PREVALIDATION_FIX_SETTINGS', () => {\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'f035tatiAndFin11-for-prevalidation.json'\n ]\n }));\n const result = fixRecord(record.toObject(), BIB_PREVALIDATION_FIX_SETTINGS);\n const expected = getFixture({\n components: [\n 'out',\n 'f035tatiAndFin11-for-prevalidation.json'\n ]\n });\n\n expect(result).to.eql(expected);\n });\n });\n\n\n describe('bib-postvalidation-fix -settings', () => {\n it('Should handle link subfields, but not add missing SIDs, when running with BIB_PREIMPORT_FIX_SETTINGS', () => {\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'f035tatiAndFin11-for-postvalidation.json'\n ]\n }));\n const result = fixRecord(record.toObject(), BIB_PREIMPORT_FIX_SETTINGS);\n const expected = getFixture({\n components: [\n 'out',\n 'f035tatiAndFin11-for-postvalidation.json'\n ]\n });\n\n expect(result).to.eql(expected);\n });\n });\n\n describe('handle tempURNs', () => {\n it('It should do nothing if there are not tempURNs', () => {\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'tempUrnNoTemp.json'\n ]\n }));\n const result = fixRecord(record.toObject(), BIB_HANDLE_TEMP_URNS_SETTINGS);\n const expected = getFixture({\n components: [\n 'out',\n 'tempUrnNoTemp.json'\n ]\n });\n\n expect(result).to.eql(expected);\n });\n\n it('It should find a single tempURN and remove the temp subfield', () => {\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'tempUrnWithTemp.json'\n ]\n }));\n const result = fixRecord(record.toObject(), BIB_HANDLE_TEMP_URNS_SETTINGS);\n const expected = getFixture({\n components: [\n 'out',\n 'tempUrnWithTemp.json'\n ]\n });\n\n expect(result).to.eql(expected);\n });\n\n it('It should find a tempURN and an existing legal deposit URN and remove the tempURN', () => {\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'tempUrnWithTempAndLD.json'\n ]\n }));\n const result = fixRecord(record.toObject(), BIB_HANDLE_TEMP_URNS_SETTINGS);\n const expected = getFixture({\n components: [\n 'out',\n 'tempUrnWithTempAndLD.json'\n ]\n });\n\n expect(result).to.eql(expected);\n });\n\n it('It should find a tempURN and an existing non-legal deposit URN and remove the temp subfields from tempURN', () => {\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'tempUrnWithTempAndNoLD.json'\n ]\n }));\n const result = fixRecord(record.toObject(), BIB_HANDLE_TEMP_URNS_SETTINGS);\n const expected = getFixture({\n components: [\n 'out',\n 'tempUrnWithTempAndNoLD.json'\n ]\n });\n\n expect(result).to.eql(expected);\n });\n });\n\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"fix.spec.js","names":["describe","FIXTURES_PATH","__dirname","getFixture","fixtureFactory","root","reader","READERS","JSON","it","record","MarcRecord","components","result","fixRecord","toObject","undefined","expected","expect","to","eql","BIB_FORMAT_SETTINGS","generateMissingSIDs","BIB_F035_TO_SID","BIB_PREVALIDATION_FIX_SETTINGS","BIB_PREIMPORT_FIX_SETTINGS","BIB_HANDLE_TEMP_URNS_SETTINGS","BIB_STRIP_F884S_SETTINGS"],"sources":["../../src/helpers/fix.spec.js"],"sourcesContent":["/**\n*\n* @licstart The following is the entire license notice for the JavaScript code in this file.\n*\n* Shared modules for microservices of Melinda rest api batch import system\n*\n* Copyright (C) 2020 University Of Helsinki (The National Library Of Finland)\n*\n* This file is part of melinda-rest-api-commons\n*\n* melinda-rest-api-commons program is free software: you can redistribute it and/or modify\n* it under the terms of the GNU Affero General Public License as\n* published by the Free Software Foundation, either version 3 of the\n* License, or (at your option) any later version.\n*\n* melinda-rest-api-commons is distributed in the hope that it will be useful,\n* but WITHOUT ANY WARRANTY; without even the implied warranty of\n* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n* GNU Affero General Public License for more details.\n*\n* You should have received a copy of the GNU Affero General Public License\n* along with this program. If not, see <http://www.gnu.org/licenses/>.\n*\n* @licend The above is the entire license notice\n* for the JavaScript code in this file.\n*\n*/\n\nimport {expect} from 'chai';\nimport fixtureFactory, {READERS} from '@natlibfi/fixura';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport {fixRecord, BIB_FORMAT_SETTINGS, BIB_F035_TO_SID, BIB_PREVALIDATION_FIX_SETTINGS, BIB_PREIMPORT_FIX_SETTINGS, BIB_HANDLE_TEMP_URNS_SETTINGS, BIB_STRIP_F884S_SETTINGS} from './fix';\n//import {createDebugLogger} from 'debug';\n\ndescribe('services/fix', () => {\n const FIXTURES_PATH = [\n __dirname,\n '..',\n '..',\n 'test-fixtures',\n 'fix'\n ];\n const {getFixture} = fixtureFactory({root: FIXTURES_PATH, reader: READERS.JSON});\n\n describe('Undefined options', () => {\n it(`Should not update link subfield prefixes if options are undefined`, () => {\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'fiAsteriN0Fin11.json'\n ]\n }));\n const result = fixRecord(record.toObject(), undefined);\n const expected = getFixture({\n components: [\n 'in',\n 'fiAsteriN0Fin11.json'\n ]\n });\n\n expect(result).to.eql(expected);\n });\n });\n\n\n describe('fiAsteriN0Fin11', () => {\n it('Should succeed', () => {\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'fiAsteriN0Fin11.json'\n ]\n }));\n const result = fixRecord(record.toObject(), BIB_FORMAT_SETTINGS);\n const expected = getFixture({\n components: [\n 'out',\n 'fiAsteriN0Fin11.json'\n ]\n });\n\n expect(result).to.eql(expected);\n });\n });\n\n describe('fiAsteriS0Fin10', () => {\n it('Should succeed', () => {\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'fiAsteriS0Fin10.json'\n ]\n }));\n const result = fixRecord(record.toObject(), BIB_FORMAT_SETTINGS);\n const expected = getFixture({\n components: [\n 'out',\n 'fiAsteriS0Fin10.json'\n ]\n });\n\n expect(result).to.eql(expected);\n });\n });\n\n describe('fiMelindaWFin01', () => {\n it('Should succeed', () => {\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'fiMelindaWFin01.json'\n ]\n }));\n const result = fixRecord(record.toObject(), BIB_FORMAT_SETTINGS);\n const expected = getFixture({\n components: [\n 'out',\n 'fiMelindaWFin01.json'\n ]\n });\n\n expect(result).to.eql(expected);\n });\n });\n\n describe('f035fibtj', () => {\n it('Should add FI-BTJ SID', () => {\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'f035fibtj.json'\n ]\n }));\n const result = fixRecord(record.toObject(), {generateMissingSIDs: BIB_F035_TO_SID});\n const expected = getFixture({\n components: [\n 'out',\n 'f035fibtj.json'\n ]\n });\n\n expect(result).to.eql(expected);\n });\n });\n\n describe('f035tati', () => {\n it('Should add tati SID', () => {\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'f035tati.json'\n ]\n }));\n const result = fixRecord(record.toObject(), {generateMissingSIDs: BIB_F035_TO_SID});\n const expected = getFixture({\n components: [\n 'out',\n 'f035tati.json'\n ]\n });\n\n expect(result).to.eql(expected);\n });\n });\n\n describe('f035fibtjAndTati', () => {\n it('Should add tati SID and skip FI-BTJ SID', () => {\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'f035fibtjAndTati.json'\n ]\n }));\n const result = fixRecord(record.toObject(), {generateMissingSIDs: BIB_F035_TO_SID});\n const expected = getFixture({\n components: [\n 'out',\n 'f035fibtjAndTati.json'\n ]\n });\n // eslint-disable-next-line no-console\n //console.log(`result: ${JSON.stringify(result)}`);\n // eslint-disable-next-line no-console\n //console.log(`expect: ${JSON.stringify(expected)}`);\n expect(result).to.eql(expected);\n });\n });\n\n describe('f035tati', () => {\n it('Should NOT add tati SID with undefined options', () => {\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'f035tati.json'\n ]\n }));\n const result = fixRecord(record.toObject(), undefined);\n const expected = getFixture({\n components: [\n 'in',\n 'f035tati.json'\n ]\n });\n\n expect(result).to.eql(expected);\n });\n });\n\n describe('bib-prevalidation-fix -settings', () => {\n it('Should add missing SIDs, but not handle sf $0s when running with BIB_PREVALIDATION_FIX_SETTINGS', () => {\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'f035tatiAndFin11-for-prevalidation.json'\n ]\n }));\n const result = fixRecord(record.toObject(), BIB_PREVALIDATION_FIX_SETTINGS);\n const expected = getFixture({\n components: [\n 'out',\n 'f035tatiAndFin11-for-prevalidation.json'\n ]\n });\n\n expect(result).to.eql(expected);\n });\n });\n\n\n describe('bib-preimport-fix -settings', () => {\n it('Should handle link subfields, but not add missing SIDs, when running with BIB_PREIMPORT_FIX_SETTINGS', () => {\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'f035tatiAndFin11-for-postvalidation.json'\n ]\n }));\n const result = fixRecord(record.toObject(), BIB_PREIMPORT_FIX_SETTINGS);\n const expected = getFixture({\n components: [\n 'out',\n 'f035tatiAndFin11-for-postvalidation.json'\n ]\n });\n\n expect(result).to.eql(expected);\n });\n });\n\n describe('handle tempURNs', () => {\n it('It should do nothing if there are not tempURNs', () => {\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'tempUrnNoTemp.json'\n ]\n }));\n const result = fixRecord(record.toObject(), BIB_HANDLE_TEMP_URNS_SETTINGS);\n const expected = getFixture({\n components: [\n 'out',\n 'tempUrnNoTemp.json'\n ]\n });\n\n expect(result).to.eql(expected);\n });\n\n it('It should find a single tempURN and remove the temp subfield', () => {\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'tempUrnWithTemp.json'\n ]\n }));\n const result = fixRecord(record.toObject(), BIB_HANDLE_TEMP_URNS_SETTINGS);\n const expected = getFixture({\n components: [\n 'out',\n 'tempUrnWithTemp.json'\n ]\n });\n\n expect(result).to.eql(expected);\n });\n\n it('It should find a tempURN and an existing legal deposit URN and remove the tempURN', () => {\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'tempUrnWithTempAndLD.json'\n ]\n }));\n const result = fixRecord(record.toObject(), BIB_HANDLE_TEMP_URNS_SETTINGS);\n const expected = getFixture({\n components: [\n 'out',\n 'tempUrnWithTempAndLD.json'\n ]\n });\n\n expect(result).to.eql(expected);\n });\n\n it('It should find a tempURN and an existing non-legal deposit URN and remove the temp subfields from tempURN', () => {\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'tempUrnWithTempAndNoLD.json'\n ]\n }));\n const result = fixRecord(record.toObject(), BIB_HANDLE_TEMP_URNS_SETTINGS);\n const expected = getFixture({\n components: [\n 'out',\n 'tempUrnWithTempAndNoLD.json'\n ]\n });\n\n expect(result).to.eql(expected);\n });\n });\n\n\n describe('Strip f884s', () => {\n it('Should strip newer f884', () => {\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'f884s-1.json'\n ]\n }));\n const result = fixRecord(record.toObject(), BIB_STRIP_F884S_SETTINGS);\n const expected = getFixture({\n components: [\n 'out',\n 'f884s-1.json'\n ]\n });\n\n expect(result).to.eql(expected);\n });\n\n it('Should be able to handle a f884 without subfield $g - but it should keep the oldest with existing $g', () => {\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'f884s-2.json'\n ]\n }));\n const result = fixRecord(record.toObject(), BIB_STRIP_F884S_SETTINGS);\n const expected = getFixture({\n components: [\n 'out',\n 'f884s-2.json'\n ]\n });\n\n expect(result).to.eql(expected);\n });\n\n it('Should keep f884s with differing $a', () => {\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'f884s-3.json'\n ]\n }));\n const result = fixRecord(record.toObject(), BIB_STRIP_F884S_SETTINGS);\n const expected = getFixture({\n components: [\n 'out',\n 'f884s-3.json'\n ]\n });\n\n expect(result).to.eql(expected);\n });\n\n it('Should keep f884s without $5 MELINDA even if the are duplicates', () => {\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'f884s-4.json'\n ]\n }));\n const result = fixRecord(record.toObject(), BIB_STRIP_F884S_SETTINGS);\n const expected = getFixture({\n components: [\n 'out',\n 'f884s-4.json'\n ]\n });\n\n expect(result).to.eql(expected);\n });\n\n\n });\n\n\n});\n"],"mappings":"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"}
package/package.json CHANGED
@@ -14,7 +14,7 @@
14
14
  "url": "git@github.com:natlibfi/melinda-rest-api-commons.git"
15
15
  },
16
16
  "license": "AGPL-3.0+",
17
- "version": "2.3.2-alpha.3",
17
+ "version": "2.3.2-alpha.4",
18
18
  "main": "./dist/index.js",
19
19
  "engines": {
20
20
  "node": ">=14"