@natlibfi/melinda-rest-api-commons 2.3.2-alpha.1 → 2.3.2-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,8 +3,8 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.REPLACE_PREFIXES = exports.BIB_PREVALIDATION_FIX_SETTINGS = exports.BIB_POSTVALIDATION_FIX_SETTINGS = exports.BIB_HANDLE_TEMP_URNS_SETTINGS = exports.BIB_FORMAT_SETTINGS = exports.BIB_F035_TO_SID = void 0;
7
- exports.formatRecord = formatRecord;
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;
7
+ exports.fixRecord = fixRecord;
8
8
 
9
9
  var _marcRecord = require("@natlibfi/marc-record");
10
10
 
@@ -41,9 +41,9 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
41
41
  * for the JavaScript code in this file.
42
42
  *
43
43
  */
44
- function formatRecord(record, settings = {}) {
44
+ function fixRecord(record, settings = {}) {
45
45
  const logger = (0, _melindaBackendCommons.createLogger)();
46
- const debug = (0, _debug.default)('@natlibfi/melinda-rest-api-commons:format');
46
+ const debug = (0, _debug.default)('@natlibfi/melinda-rest-api-commons:fixRecord');
47
47
  const debugData = debug.extend('data');
48
48
  logger.verbose(`We will apply formatting to the record according to settings: ${JSON.stringify(settings)}`);
49
49
 
@@ -150,7 +150,7 @@ function formatRecord(record, settings = {}) {
150
150
 
151
151
 
152
152
  function handleTempUrns(options) {
153
- debugData(JSON.stringify(options));
153
+ debugData(`Options for handleTempUrns: ${JSON.stringify(options)}`);
154
154
 
155
155
  if (options !== true) {
156
156
  return;
@@ -197,7 +197,7 @@ function formatRecord(record, settings = {}) {
197
197
  if (!existingLegalDepositURN && f856sUrnsWithTempSubfields.length > 0) {
198
198
  //debug(`All Urns (${f856sUrn.length}) have a temp subfield`);
199
199
  debugData(`Original temp URNs: (${JSON.stringify(f856sUrnsWithTempSubfields)})`);
200
- const fixedFields = f856sUrnsWithTempSubfields.map(removeTempSubfield);
200
+ const fixedFields = f856sUrnsWithTempSubfields.map(removeTempSubfield).filter(field => field);
201
201
  debug(`We removed temp subfields: (${JSON.stringify(fixedFields)})`);
202
202
  newRecord.removeFields(f856sUrnsWithTempSubfields);
203
203
  newRecord.insertFields(fixedFields);
@@ -240,18 +240,25 @@ function formatRecord(record, settings = {}) {
240
240
 
241
241
 
242
242
  function removeTempSubfield(field) {
243
- // Sanity check for control fields
244
- if (field.subfields === undefined) {
245
- return field;
246
- } // we probably should check that we don't return field that has no subfields left
247
-
248
-
249
- return {
250
- tag: field.tag,
251
- ind1: field.ind1,
252
- ind2: field.ind2,
253
- subfields: field.subfields.filter(sf => sf.code !== '9' && !/^MELINDA<TEMP>$/u.test(sf.value))
254
- };
243
+ // Handle non-numeric fields, and fields with a numeric tag of 010 and greater
244
+ // Aleph's FMT as a controlfield might be a problem
245
+ if (!isNaN(field.tag) && parseInt(field.tag, 10) >= 10) {
246
+ const filteredSubfields = field.subfields.filter(sf => sf.code !== '9' && !/^MELINDA<TEMP>$/u.test(sf.value)); // Remove whole field if there are no subfields left
247
+
248
+ if (filteredSubfields.length < 1) {
249
+ return false;
250
+ }
251
+
252
+ return {
253
+ tag: field.tag,
254
+ ind1: field.ind1,
255
+ ind2: field.ind2,
256
+ subfields: filteredSubfields
257
+ };
258
+ } // return controlFields as is
259
+
260
+
261
+ return field;
255
262
  }
256
263
  } // This could be formatted so that 035-prefix and SID contents would be better connected than by just an array index
257
264
 
@@ -283,6 +290,7 @@ const REPLACE_PREFIXES = [{
283
290
  newPrefix: 'FIN13',
284
291
  prefixReplaceCodes: ['0']
285
292
  }]; // If placed in config.js testing needs envs
293
+ // BIB_FORMAT_SETTINGS is outdated, use other settings instead
286
294
 
287
295
  exports.REPLACE_PREFIXES = REPLACE_PREFIXES;
288
296
  const BIB_FORMAT_SETTINGS = {
@@ -294,12 +302,20 @@ const BIB_PREVALIDATION_FIX_SETTINGS = {
294
302
  generateMissingSIDs: BIB_F035_TO_SID
295
303
  };
296
304
  exports.BIB_PREVALIDATION_FIX_SETTINGS = BIB_PREVALIDATION_FIX_SETTINGS;
297
- const BIB_POSTVALIDATION_FIX_SETTINGS = {
305
+ const BIB_POSTMERGE_FIX_SETTINGS = {
306
+ handleTempUrns: true
307
+ };
308
+ exports.BIB_POSTMERGE_FIX_SETTINGS = BIB_POSTMERGE_FIX_SETTINGS;
309
+ const BIB_PREIMPORT_FIX_SETTINGS = {
310
+ replacePrefixes: REPLACE_PREFIXES
311
+ };
312
+ exports.BIB_PREIMPORT_FIX_SETTINGS = BIB_PREIMPORT_FIX_SETTINGS;
313
+ const AUTNAME_PREIMPORT_FIX_SETTINGS = {
298
314
  replacePrefixes: REPLACE_PREFIXES
299
315
  };
300
- exports.BIB_POSTVALIDATION_FIX_SETTINGS = BIB_POSTVALIDATION_FIX_SETTINGS;
316
+ exports.AUTNAME_PREIMPORT_FIX_SETTINGS = AUTNAME_PREIMPORT_FIX_SETTINGS;
301
317
  const BIB_HANDLE_TEMP_URNS_SETTINGS = {
302
318
  handleTempUrns: true
303
319
  };
304
320
  exports.BIB_HANDLE_TEMP_URNS_SETTINGS = BIB_HANDLE_TEMP_URNS_SETTINGS;
305
- //# sourceMappingURL=format.js.map
321
+ //# sourceMappingURL=fix.js.map
@@ -0,0 +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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"}
@@ -6,7 +6,7 @@ var _fixura = _interopRequireWildcard(require("@natlibfi/fixura"));
6
6
 
7
7
  var _marcRecord = require("@natlibfi/marc-record");
8
8
 
9
- var _format = require("./format");
9
+ var _fix = require("./fix");
10
10
 
11
11
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
12
12
 
@@ -40,7 +40,7 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
40
40
  *
41
41
  */
42
42
  //import {createDebugLogger} from 'debug';
43
- describe('services/format', () => {
43
+ describe('services/fix', () => {
44
44
  const FIXTURES_PATH = [__dirname, '..', '..', 'test-fixtures', 'format'];
45
45
  const {
46
46
  getFixture
@@ -53,7 +53,7 @@ describe('services/format', () => {
53
53
  const record = new _marcRecord.MarcRecord(getFixture({
54
54
  components: ['in', 'fiAsteriN0Fin11.json']
55
55
  }));
56
- const result = (0, _format.formatRecord)(record.toObject(), undefined);
56
+ const result = (0, _fix.fixRecord)(record.toObject(), undefined);
57
57
  const expected = getFixture({
58
58
  components: ['in', 'fiAsteriN0Fin11.json']
59
59
  });
@@ -65,7 +65,7 @@ describe('services/format', () => {
65
65
  const record = new _marcRecord.MarcRecord(getFixture({
66
66
  components: ['in', 'fiAsteriN0Fin11.json']
67
67
  }));
68
- const result = (0, _format.formatRecord)(record.toObject(), _format.BIB_FORMAT_SETTINGS);
68
+ const result = (0, _fix.fixRecord)(record.toObject(), _fix.BIB_FORMAT_SETTINGS);
69
69
  const expected = getFixture({
70
70
  components: ['out', 'fiAsteriN0Fin11.json']
71
71
  });
@@ -77,7 +77,7 @@ describe('services/format', () => {
77
77
  const record = new _marcRecord.MarcRecord(getFixture({
78
78
  components: ['in', 'fiAsteriS0Fin10.json']
79
79
  }));
80
- const result = (0, _format.formatRecord)(record.toObject(), _format.BIB_FORMAT_SETTINGS);
80
+ const result = (0, _fix.fixRecord)(record.toObject(), _fix.BIB_FORMAT_SETTINGS);
81
81
  const expected = getFixture({
82
82
  components: ['out', 'fiAsteriS0Fin10.json']
83
83
  });
@@ -89,7 +89,7 @@ describe('services/format', () => {
89
89
  const record = new _marcRecord.MarcRecord(getFixture({
90
90
  components: ['in', 'fiMelindaWFin01.json']
91
91
  }));
92
- const result = (0, _format.formatRecord)(record.toObject(), _format.BIB_FORMAT_SETTINGS);
92
+ const result = (0, _fix.fixRecord)(record.toObject(), _fix.BIB_FORMAT_SETTINGS);
93
93
  const expected = getFixture({
94
94
  components: ['out', 'fiMelindaWFin01.json']
95
95
  });
@@ -101,8 +101,8 @@ describe('services/format', () => {
101
101
  const record = new _marcRecord.MarcRecord(getFixture({
102
102
  components: ['in', 'f035fibtj.json']
103
103
  }));
104
- const result = (0, _format.formatRecord)(record.toObject(), {
105
- generateMissingSIDs: _format.BIB_F035_TO_SID
104
+ const result = (0, _fix.fixRecord)(record.toObject(), {
105
+ generateMissingSIDs: _fix.BIB_F035_TO_SID
106
106
  });
107
107
  const expected = getFixture({
108
108
  components: ['out', 'f035fibtj.json']
@@ -115,8 +115,8 @@ describe('services/format', () => {
115
115
  const record = new _marcRecord.MarcRecord(getFixture({
116
116
  components: ['in', 'f035tati.json']
117
117
  }));
118
- const result = (0, _format.formatRecord)(record.toObject(), {
119
- generateMissingSIDs: _format.BIB_F035_TO_SID
118
+ const result = (0, _fix.fixRecord)(record.toObject(), {
119
+ generateMissingSIDs: _fix.BIB_F035_TO_SID
120
120
  });
121
121
  const expected = getFixture({
122
122
  components: ['out', 'f035tati.json']
@@ -129,8 +129,8 @@ describe('services/format', () => {
129
129
  const record = new _marcRecord.MarcRecord(getFixture({
130
130
  components: ['in', 'f035fibtjAndTati.json']
131
131
  }));
132
- const result = (0, _format.formatRecord)(record.toObject(), {
133
- generateMissingSIDs: _format.BIB_F035_TO_SID
132
+ const result = (0, _fix.fixRecord)(record.toObject(), {
133
+ generateMissingSIDs: _fix.BIB_F035_TO_SID
134
134
  });
135
135
  const expected = getFixture({
136
136
  components: ['out', 'f035fibtjAndTati.json']
@@ -147,7 +147,7 @@ describe('services/format', () => {
147
147
  const record = new _marcRecord.MarcRecord(getFixture({
148
148
  components: ['in', 'f035tati.json']
149
149
  }));
150
- const result = (0, _format.formatRecord)(record.toObject(), undefined);
150
+ const result = (0, _fix.fixRecord)(record.toObject(), undefined);
151
151
  const expected = getFixture({
152
152
  components: ['in', 'f035tati.json']
153
153
  });
@@ -159,7 +159,7 @@ describe('services/format', () => {
159
159
  const record = new _marcRecord.MarcRecord(getFixture({
160
160
  components: ['in', 'f035tatiAndFin11-for-prevalidation.json']
161
161
  }));
162
- const result = (0, _format.formatRecord)(record.toObject(), _format.BIB_PREVALIDATION_FIX_SETTINGS);
162
+ const result = (0, _fix.fixRecord)(record.toObject(), _fix.BIB_PREVALIDATION_FIX_SETTINGS);
163
163
  const expected = getFixture({
164
164
  components: ['out', 'f035tatiAndFin11-for-prevalidation.json']
165
165
  });
@@ -167,11 +167,11 @@ describe('services/format', () => {
167
167
  });
168
168
  });
169
169
  describe('bib-postvalidation-fix -settings', () => {
170
- it('Should handle link subfields, but not add missing SIDs, when running with BIB_POSTVALIDATION_FIX_SETTINGS', () => {
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']
173
173
  }));
174
- const result = (0, _format.formatRecord)(record.toObject(), _format.BIB_POSTVALIDATION_FIX_SETTINGS);
174
+ const result = (0, _fix.fixRecord)(record.toObject(), _fix.BIB_PREIMPORT_FIX_SETTINGS);
175
175
  const expected = getFixture({
176
176
  components: ['out', 'f035tatiAndFin11-for-postvalidation.json']
177
177
  });
@@ -183,7 +183,7 @@ describe('services/format', () => {
183
183
  const record = new _marcRecord.MarcRecord(getFixture({
184
184
  components: ['in', 'tempUrnNoTemp.json']
185
185
  }));
186
- const result = (0, _format.formatRecord)(record.toObject(), _format.BIB_HANDLE_TEMP_URNS_SETTINGS);
186
+ const result = (0, _fix.fixRecord)(record.toObject(), _fix.BIB_HANDLE_TEMP_URNS_SETTINGS);
187
187
  const expected = getFixture({
188
188
  components: ['out', 'tempUrnNoTemp.json']
189
189
  });
@@ -193,7 +193,7 @@ describe('services/format', () => {
193
193
  const record = new _marcRecord.MarcRecord(getFixture({
194
194
  components: ['in', 'tempUrnWithTemp.json']
195
195
  }));
196
- const result = (0, _format.formatRecord)(record.toObject(), _format.BIB_HANDLE_TEMP_URNS_SETTINGS);
196
+ const result = (0, _fix.fixRecord)(record.toObject(), _fix.BIB_HANDLE_TEMP_URNS_SETTINGS);
197
197
  const expected = getFixture({
198
198
  components: ['out', 'tempUrnWithTemp.json']
199
199
  });
@@ -203,7 +203,7 @@ describe('services/format', () => {
203
203
  const record = new _marcRecord.MarcRecord(getFixture({
204
204
  components: ['in', 'tempUrnWithTempAndLD.json']
205
205
  }));
206
- const result = (0, _format.formatRecord)(record.toObject(), _format.BIB_HANDLE_TEMP_URNS_SETTINGS);
206
+ const result = (0, _fix.fixRecord)(record.toObject(), _fix.BIB_HANDLE_TEMP_URNS_SETTINGS);
207
207
  const expected = getFixture({
208
208
  components: ['out', 'tempUrnWithTempAndLD.json']
209
209
  });
@@ -213,7 +213,7 @@ describe('services/format', () => {
213
213
  const record = new _marcRecord.MarcRecord(getFixture({
214
214
  components: ['in', 'tempUrnWithTempAndNoLD.json']
215
215
  }));
216
- const result = (0, _format.formatRecord)(record.toObject(), _format.BIB_HANDLE_TEMP_URNS_SETTINGS);
216
+ const result = (0, _fix.fixRecord)(record.toObject(), _fix.BIB_HANDLE_TEMP_URNS_SETTINGS);
217
217
  const expected = getFixture({
218
218
  components: ['out', 'tempUrnWithTempAndNoLD.json']
219
219
  });
@@ -221,4 +221,4 @@ describe('services/format', () => {
221
221
  });
222
222
  });
223
223
  });
224
- //# sourceMappingURL=format.spec.js.map
224
+ //# sourceMappingURL=fix.spec.js.map
@@ -0,0 +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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"}
package/dist/index.js CHANGED
@@ -9,7 +9,7 @@ var _exportNames = {
9
9
  amqpFactory: true,
10
10
  conversions: true,
11
11
  validations: true,
12
- format: true,
12
+ fixes: true,
13
13
  logError: true,
14
14
  createImportJobState: true,
15
15
  createImportJobStateForQuery: true,
@@ -52,7 +52,7 @@ Object.defineProperty(exports, "createRecordResponseItem", {
52
52
  return _utils.createRecordResponseItem;
53
53
  }
54
54
  });
55
- exports.format = void 0;
55
+ exports.fixes = void 0;
56
56
  Object.defineProperty(exports, "logError", {
57
57
  enumerable: true,
58
58
  get: function () {
@@ -88,9 +88,9 @@ var _conversion = _interopRequireDefault(require("./helpers/conversion"));
88
88
 
89
89
  var _validation = _interopRequireDefault(require("./helpers/validation"));
90
90
 
91
- var format = _interopRequireWildcard(require("./helpers/format"));
91
+ var fixes = _interopRequireWildcard(require("./helpers/fix"));
92
92
 
93
- exports.format = format;
93
+ exports.fixes = fixes;
94
94
 
95
95
  var _utils = require("./utils");
96
96
 
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/index.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-2021 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 mongoFactory from './mongo';\nimport mongoLogFactory from './mongoLog';\nimport amqpFactory from './amqp';\nimport conversions from './helpers/conversion';\nimport validations from './helpers/validation';\nimport * as format from './helpers/format';\nimport {logError, createImportJobState, createImportJobStateForQuery, createRecordResponseItem, addRecordResponseItem} from './utils';\n\nexport {mongoFactory, mongoLogFactory, amqpFactory, conversions, validations, format, logError, createImportJobState, createImportJobStateForQuery, createRecordResponseItem, addRecordResponseItem};\nexport * from './constants';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AACA;;AAGA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/index.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-2021 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 mongoFactory from './mongo';\nimport mongoLogFactory from './mongoLog';\nimport amqpFactory from './amqp';\nimport conversions from './helpers/conversion';\nimport validations from './helpers/validation';\nimport * as fixes from './helpers/fix';\nimport {logError, createImportJobState, createImportJobStateForQuery, createRecordResponseItem, addRecordResponseItem} from './utils';\n\nexport {mongoFactory, mongoLogFactory, amqpFactory, conversions, validations, fixes, logError, createImportJobState, createImportJobStateForQuery, createRecordResponseItem, addRecordResponseItem};\nexport * from './constants';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AACA;;AAGA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA"}
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.1",
17
+ "version": "2.3.2-alpha.2",
18
18
  "main": "./dist/index.js",
19
19
  "engines": {
20
20
  "node": ">=14"
@@ -1 +0,0 @@
1
- {"version":3,"file":"format.js","names":["formatRecord","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","BIB_F035_TO_SID","REPLACE_PREFIXES","BIB_FORMAT_SETTINGS","BIB_PREVALIDATION_FIX_SETTINGS","BIB_POSTVALIDATION_FIX_SETTINGS","BIB_HANDLE_TEMP_URNS_SETTINGS"],"sources":["../../src/helpers/format.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 formatRecord(record, settings = {}) {\n const logger = createLogger();\n const debug = createDebugLogger('@natlibfi/melinda-rest-api-commons:format');\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(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);\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 // Sanity check for control fields\n if (field.subfields === undefined) {\n return field;\n }\n\n // we probably should check that we don't return field that has no subfields left\n return {\n tag: field.tag,\n ind1: field.ind1,\n ind2: field.ind2,\n subfields: field.subfields.filter(sf => sf.code !== '9' && !(/^MELINDA<TEMP>$/u).test(sf.value))\n };\n }\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\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_POSTVALIDATION_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 +0,0 @@
1
- {"version":3,"file":"format.spec.js","names":["describe","FIXTURES_PATH","__dirname","getFixture","fixtureFactory","root","reader","READERS","JSON","it","record","MarcRecord","components","result","formatRecord","toObject","undefined","expected","expect","to","eql","BIB_FORMAT_SETTINGS","generateMissingSIDs","BIB_F035_TO_SID","BIB_PREVALIDATION_FIX_SETTINGS","BIB_POSTVALIDATION_FIX_SETTINGS","BIB_HANDLE_TEMP_URNS_SETTINGS"],"sources":["../../src/helpers/format.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 {formatRecord, BIB_FORMAT_SETTINGS, BIB_F035_TO_SID, BIB_PREVALIDATION_FIX_SETTINGS, BIB_POSTVALIDATION_FIX_SETTINGS, BIB_HANDLE_TEMP_URNS_SETTINGS} from './format';\n//import {createDebugLogger} from 'debug';\n\ndescribe('services/format', () => {\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 = formatRecord(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 = formatRecord(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 = formatRecord(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 = formatRecord(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 = formatRecord(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 = formatRecord(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 = formatRecord(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 = formatRecord(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 = formatRecord(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_POSTVALIDATION_FIX_SETTINGS', () => {\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'f035tatiAndFin11-for-postvalidation.json'\n ]\n }));\n const result = formatRecord(record.toObject(), BIB_POSTVALIDATION_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 = formatRecord(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 = formatRecord(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 = formatRecord(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 = formatRecord(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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"}