@natlibfi/melinda-rest-api-commons 4.2.5-alpha.1 → 5.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/.github/workflows/melinda-node-tests.yml +9 -6
  2. package/dist/conversion.js +70 -0
  3. package/dist/conversion.js.map +7 -0
  4. package/dist/fix-constants.js +63 -0
  5. package/dist/fix-constants.js.map +7 -0
  6. package/dist/fix-handle-tempurns.js +83 -0
  7. package/dist/fix-handle-tempurns.js.map +7 -0
  8. package/dist/fix-strip-f884s.js +160 -0
  9. package/dist/fix-strip-f884s.js.map +7 -0
  10. package/dist/fix-utils.js +39 -0
  11. package/dist/fix-utils.js.map +7 -0
  12. package/dist/fix.js +142 -0
  13. package/dist/fix.js.map +7 -0
  14. package/dist/validation.js +19 -0
  15. package/dist/validation.js.map +7 -0
  16. package/eslint.config.js +53 -0
  17. package/package.json +23 -96
  18. package/tests/{amqp.health.spec.js → amqp.healthtest.js} +2 -2
  19. package/tests/{amqp.tests.spec.js → amqp.tests.localtest.js} +46 -46
  20. package/tests/helpers/{conversion.spec.js → conversion.test.js} +38 -25
  21. package/tests/helpers/{fix.spec.js → fix.test.js} +6 -6
  22. package/tests/helpers/{validation.spec.js → validation.test.js} +12 -9
  23. package/tests/{mongo-add-blob-size.spec.js → mongo-add-blob-size.test.js} +6 -6
  24. package/tests/{mongo-check-and-check-state.spec.js → mongo-check-and-check-state.test.js} +7 -7
  25. package/tests/{mongo-check-and-set-import-job-state.spec.js → mongo-check-and-set-import-job-state.test.js} +7 -7
  26. package/tests/{mongo-check-timeout.spec.js → mongo-check-timeout.test.js} +7 -7
  27. package/tests/{mongo-create-bulk.spec.js → mongo-create-bulk.test.js} +5 -5
  28. package/tests/{mongo-create-prio.spec.js → mongo-create-prio.test.js} +6 -6
  29. package/tests/{mongo-get-one.spec.js → mongo-get-one.test.js} +7 -7
  30. package/tests/{mongo-get-stream.spec.js → mongo-get-stream.test.js} +7 -7
  31. package/tests/{mongo-push-ids.spec.js → mongo-push-ids.test.js} +5 -5
  32. package/tests/{mongo-push-messages.spec.js → mongo-push-messages.test.js} +6 -6
  33. package/tests/{mongo-query-by-id.spec.js → mongo-query-by-id.test.js} +7 -7
  34. package/tests/{mongo-query.spec.js → mongo-query.test.js} +7 -7
  35. package/tests/{mongo-read-content.spec.js → mongo-read-content.test.js} +8 -8
  36. package/tests/{mongo-remove.spec.js → mongo-remove.test.js} +6 -6
  37. package/tests/{mongo-set-blob-size.spec.js → mongo-set-blob-size.test.js} +6 -6
  38. package/tests/{mongo-set-import-job-state.spec.js → mongo-set-import-job-state.test.js} +6 -6
  39. package/tests/{mongo-set-operation.spec.js → mongo-set-operation.test.js} +6 -6
  40. package/tests/{mongo-set-operations.spec.js → mongo-set-operations.test.js} +6 -6
  41. package/tests/{mongo-set-state.spec.js → mongo-set-state.test.js} +7 -7
  42. package/tests/{mongoLog.spec.js → mongoLog.test.js} +10 -11
  43. package/tests/testUtils.js +9 -8
  44. package/dist/amqp.js +0 -326
  45. package/dist/amqp.js.map +0 -1
  46. package/dist/constants.js +0 -60
  47. package/dist/constants.js.map +0 -1
  48. package/dist/helpers/conversion.js +0 -88
  49. package/dist/helpers/conversion.js.map +0 -1
  50. package/dist/helpers/fix-constants.js +0 -70
  51. package/dist/helpers/fix-constants.js.map +0 -1
  52. package/dist/helpers/fix-handle-tempurns.js +0 -133
  53. package/dist/helpers/fix-handle-tempurns.js.map +0 -1
  54. package/dist/helpers/fix-strip-f884s.js +0 -210
  55. package/dist/helpers/fix-strip-f884s.js.map +0 -1
  56. package/dist/helpers/fix-utils.js +0 -54
  57. package/dist/helpers/fix-utils.js.map +0 -1
  58. package/dist/helpers/fix.js +0 -202
  59. package/dist/helpers/fix.js.map +0 -1
  60. package/dist/helpers/validation.js +0 -37
  61. package/dist/helpers/validation.js.map +0 -1
  62. package/dist/index.js +0 -109
  63. package/dist/index.js.map +0 -1
  64. package/dist/mongo.js +0 -822
  65. package/dist/mongo.js.map +0 -1
  66. package/dist/mongoLog.js +0 -409
  67. package/dist/mongoLog.js.map +0 -1
  68. package/dist/utils.js +0 -211
  69. package/dist/utils.js.map +0 -1
@@ -1,133 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.handleTempUrns = handleTempUrns;
8
- var _debug = _interopRequireDefault(require("debug"));
9
- //import {MarcRecord} from '@natlibfi/marc-record';
10
-
11
- const debug = (0, _debug.default)('@natlibfi/melinda-rest-api-commons:fixRecord:handleTempUrns');
12
- const debugData = debug.extend('data');
13
-
14
- // eslint-disable-next-line max-statements
15
- function handleTempUrns(newRecord, options) {
16
- if (options !== true) {
17
- debug(`NOT running handleTempUrns fixer, no options`);
18
- return newRecord;
19
- }
20
- debug(`Running handleTempUrns fixer`);
21
- debugData(`Options for handleTempUrns: ${JSON.stringify(options)}`);
22
- const {
23
- f856sUrnsWithTempSubfields,
24
- f856sUrnsWithNoTempSubfields
25
- } = getf856sUrns(newRecord);
26
-
27
- // None of the URNs has temp subfields, we don't need to do anything
28
- if (f856sUrnsWithTempSubfields.length < 1) {
29
- debug(`No Urns with temp subfield`);
30
- return newRecord;
31
- }
32
-
33
- // Do we have an existing URN with legal deposit subfields, if we have, we can remove the temp URN field(s)
34
- const existingLegalDepositURN = validateLD(f856sUrnsWithNoTempSubfields);
35
- debug(`existingLegalDepositURN: ${existingLegalDepositURN}`);
36
- if (existingLegalDepositURN) {
37
- debug(`We have an existing LD URN, we can delete temp fields (${f856sUrnsWithTempSubfields.length})`);
38
- newRecord.removeFields(f856sUrnsWithTempSubfields);
39
- return newRecord;
40
- }
41
-
42
- // We do not have an existing legalDepositURN, we should use the tempURN and remove the temp subfields from it
43
- if (!existingLegalDepositURN && f856sUrnsWithTempSubfields.length > 0) {
44
- //debug(`All Urns (${f856sUrn.length}) have a temp subfield`);
45
- debugData(`Original temp URNs: (${JSON.stringify(f856sUrnsWithTempSubfields)})`);
46
- const fixedFields = f856sUrnsWithTempSubfields.map(removeTempSubfield).filter(field => field);
47
- debug(`We removed temp subfields: (${JSON.stringify(fixedFields)})`);
48
- newRecord.removeFields(f856sUrnsWithTempSubfields);
49
- newRecord.insertFields(fixedFields);
50
- return newRecord;
51
- }
52
- // Should we check that the non-temp URN has 2nd ind '0' - meaning that the URN handles the actual resource itself?
53
- }
54
- function getf856sUrns(newRecord) {
55
- const hasURN = f => f.tag === '856' && f.subfields.some(({
56
- code,
57
- value
58
- }) => code === 'u' && /urn.fi/u.test(value));
59
- const hasTempSubfield = f => f.subfields.some(({
60
- code,
61
- value
62
- }) => code === '9' && /^MELINDA<TEMP>$/u.test(value));
63
- const hasNoTempSubfield = f => !f.subfields.some(({
64
- code,
65
- value
66
- }) => code === '9' && /^MELINDA<TEMP>$/u.test(value));
67
- const f856sUrn = newRecord.fields.filter(hasURN);
68
- const f856sUrnsWithTempSubfields = f856sUrn.filter(hasTempSubfield);
69
- const f856sUrnsWithNoTempSubfields = f856sUrn.filter(hasNoTempSubfield);
70
- debugData(`URN f856s: ${JSON.stringify(f856sUrn)}`);
71
- debugData(`URN f856s with temp subfield: ${JSON.stringify(f856sUrnsWithTempSubfields)}`);
72
- return {
73
- f856sUrn,
74
- f856sUrnsWithTempSubfields,
75
- f856sUrnsWithNoTempSubfields
76
- };
77
- }
78
-
79
- // ---- LD-functions below are same as in https://github.com/NatLibFi/marc-record-validators-melinda/blob/feature-updates-to-urn/src/urn.js
80
- // we propably should develop the urn/legaldeposit -validator to use also here
81
-
82
- function validateLD(f856sUrn) {
83
- debug(`Validating the existence of legal deposit subfields`);
84
- const LD_SUBFIELDS_OLD = [{
85
- code: 'z',
86
- value: 'Käytettävissä vapaakappalekirjastoissa'
87
- }, {
88
- code: '5',
89
- value: 'FI-Vapaa'
90
- }];
91
- const LD_SUBFIELDS_NEW = [{
92
- code: 'z',
93
- value: 'Käytettävissä vapaakappaletyöasemilla'
94
- }, {
95
- code: '5',
96
- value: 'FI-Vapaa'
97
- }];
98
- const f856sUrnWithOldLdSubfields = f856sUrn.filter(field => fieldHasLDSubfields(field, LD_SUBFIELDS_OLD));
99
- const f856sUrnWithNewLdSubfields = f856sUrn.filter(field => fieldHasLDSubfields(field, LD_SUBFIELDS_NEW));
100
- const f856sUrnWithLdSubfields = [...f856sUrnWithNewLdSubfields, ...f856sUrnWithOldLdSubfields];
101
- if (f856sUrnWithLdSubfields.length > 0) {
102
- debug(`Record has ${f856sUrnWithLdSubfields.length} URN fields with all necessary legal deposit subfields`);
103
- debugData(`f856sUrnWithLdSubfields: ${JSON.stringify(f856sUrnWithLdSubfields)}`);
104
- return true;
105
- }
106
- return false;
107
- }
108
- function fieldHasLDSubfields(field, ldSubfields) {
109
- if (ldSubfields.every(ldsf => field.subfields.some(sf => sf.code === ldsf.code && sf.value === ldsf.value))) {
110
- return true;
111
- }
112
- }
113
- function removeTempSubfield(field) {
114
- // Handle non-numeric fields, and fields with a numeric tag of 010 and greater
115
- // Aleph's FMT as a controlfield might be a problem
116
- if (!isNaN(field.tag) && parseInt(field.tag, 10) >= 10) {
117
- const filteredSubfields = field.subfields.filter(sf => sf.code !== '9' && !/^MELINDA<TEMP>$/u.test(sf.value));
118
-
119
- // Remove whole field if there are no subfields left
120
- if (filteredSubfields.length < 1) {
121
- return false;
122
- }
123
- return {
124
- tag: field.tag,
125
- ind1: field.ind1,
126
- ind2: field.ind2,
127
- subfields: filteredSubfields
128
- };
129
- }
130
- // return controlFields as is
131
- return field;
132
- }
133
- //# sourceMappingURL=fix-handle-tempurns.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fix-handle-tempurns.js","names":["_debug","_interopRequireDefault","require","debug","createDebugLogger","debugData","extend","handleTempUrns","newRecord","options","JSON","stringify","f856sUrnsWithTempSubfields","f856sUrnsWithNoTempSubfields","getf856sUrns","length","existingLegalDepositURN","validateLD","removeFields","fixedFields","map","removeTempSubfield","filter","field","insertFields","hasURN","f","tag","subfields","some","code","value","test","hasTempSubfield","hasNoTempSubfield","f856sUrn","fields","LD_SUBFIELDS_OLD","LD_SUBFIELDS_NEW","f856sUrnWithOldLdSubfields","fieldHasLDSubfields","f856sUrnWithNewLdSubfields","f856sUrnWithLdSubfields","ldSubfields","every","ldsf","sf","isNaN","parseInt","filteredSubfields","ind1","ind2"],"sources":["../../src/helpers/fix-handle-tempurns.js"],"sourcesContent":["\n\n//import {MarcRecord} from '@natlibfi/marc-record';\nimport createDebugLogger from 'debug';\n\nconst debug = createDebugLogger('@natlibfi/melinda-rest-api-commons:fixRecord:handleTempUrns');\nconst debugData = debug.extend('data');\n\n// eslint-disable-next-line max-statements\nexport function handleTempUrns(newRecord, options) {\n\n if (options !== true) {\n debug(`NOT running handleTempUrns fixer, no options`);\n return newRecord;\n }\n\n debug(`Running handleTempUrns fixer`);\n debugData(`Options for handleTempUrns: ${JSON.stringify(options)}`);\n\n const {f856sUrnsWithTempSubfields, f856sUrnsWithNoTempSubfields} = getf856sUrns(newRecord);\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 newRecord;\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 newRecord;\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 newRecord;\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\nfunction getf856sUrns(newRecord) {\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 return {f856sUrn, f856sUrnsWithTempSubfields, f856sUrnsWithNoTempSubfields};\n}\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\nfunction validateLD(f856sUrn) {\n debug(`Validating the existence of legal deposit subfields`);\n\n const LD_SUBFIELDS_OLD = [\n {code: 'z', value: 'Käytettävissä vapaakappalekirjastoissa'},\n {code: '5', value: 'FI-Vapaa'}\n ];\n\n const LD_SUBFIELDS_NEW = [\n {code: 'z', value: 'Käytettävissä vapaakappaletyöasemilla'},\n {code: '5', value: 'FI-Vapaa'}\n ];\n\n const f856sUrnWithOldLdSubfields = f856sUrn.filter(field => fieldHasLDSubfields(field, LD_SUBFIELDS_OLD));\n const f856sUrnWithNewLdSubfields = f856sUrn.filter(field => fieldHasLDSubfields(field, LD_SUBFIELDS_NEW));\n const f856sUrnWithLdSubfields = [...f856sUrnWithNewLdSubfields, ...f856sUrnWithOldLdSubfields];\n\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\nfunction 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\nfunction 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"],"mappings":"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","ignoreList":[]}
@@ -1,210 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.stripF884s = stripF884s;
8
- var _marcRecord = require("@natlibfi/marc-record");
9
- var _debug = _interopRequireDefault(require("debug"));
10
- var _util = require("util");
11
- //import {sortFieldsBySubfieldValue, removeSubfield} from './fix-utils';
12
-
13
- function stripF884s(newRecord, options) {
14
- const debug = (0, _debug.default)('@natlibfi/melinda-rest-api-commons:fixRecord:stripF884s');
15
- const debugData = debug.extend('data');
16
- if (options !== true) {
17
- debug(`NOT running stripF884s fixer, no options`);
18
- return newRecord;
19
- }
20
- debug(`Running stripF884s fixer`);
21
- debugData(`Options for stripF884s: ${JSON.stringify(options)}`);
22
-
23
- // Handle only f884 with $5 MELINDA - let's no remove random f884s
24
- const isMelindaf884 = f => f.tag === '884' && f.subfields.some(({
25
- code,
26
- value
27
- }) => code === '5' && value === 'MELINDA');
28
- const f884Melindas = newRecord.fields.filter(isMelindaf884);
29
- debugData(`Melinda's f884s (${f884Melindas.length}) \n ${JSON.stringify(f884Melindas)}`);
30
- //debugData(`Melinda's f884s (${f884Melindas.length}) \n ${inspect(f884Melindas, {depth: 3})}`);
31
-
32
- if (f884Melindas.length < 2) {
33
- debug(`Not enough Melinda's f884s to filter (${f884Melindas.length})`);
34
- return newRecord;
35
- }
36
-
37
- // Pick data (firstDate, lastDate, hash with latest date) for all conversion : source combinations
38
- const results = f884Melindas.reduce((allResults, f884, index) => {
39
- debugData(`All results: ${JSON.stringify(allResults)}`);
40
- //debugData(`Handling field (${index}): ${inspect(f884, {depth: 3})}`);
41
- debugData(`Handling field *(${index})*: ${JSON.stringify(f884)}`);
42
- const conversion = findConversion(f884);
43
- const source = findSource(f884);
44
- const convSource = `${conversion}:${source}`;
45
- const {
46
- firstDate,
47
- lastDate
48
- } = findDates(f884);
49
- const hash = findHash(f884);
50
-
51
- // Find currently existing data for conversion : source combination
52
- const currResult = allResults[convSource];
53
- debugData(JSON.stringify(currResult));
54
-
55
- // If we do not have any current data, add data from field
56
- if (!currResult) {
57
- debug(`Add a new convSource ${convSource} to results`);
58
- const newResult = {
59
- conversion,
60
- source,
61
- firstDate,
62
- lastDate,
63
- hash
64
- };
65
- debugData(`- New result: ${JSON.stringify(newResult)}`);
66
- return {
67
- ...allResults,
68
- [convSource]: newResult
69
- };
70
- }
71
- // If we have current data, update it from the data from field, if needed
72
- debug(`Update result for ${convSource}`);
73
- debugData(`- Current result: ${JSON.stringify(currResult)}`);
74
- const updatedResult = {
75
- ...currResult,
76
- firstDate: currResult.firstDate > firstDate && firstDate !== '00000000' ? firstDate : currResult.firstDate,
77
- lastDate: currResult.lastDate < lastDate ? lastDate : currResult.lastDate,
78
- hash: currResult.lastDate < lastDate && lastDate !== '00000000' && hash !== '0000000000000000000000000000000000000000000000000000000000000000' ? hash : currResult.hash
79
- };
80
- debugData(`- Updated result: ${JSON.stringify(updatedResult)}`);
81
- return {
82
- ...allResults,
83
- [convSource]: updatedResult
84
- };
85
- }, {});
86
- debugData(`RESULTS: ${JSON.stringify(results)}`);
87
- const editedf884s = editFields(f884Melindas, results);
88
- debug(`Edited fields (${editedf884s.length})`);
89
- //debugData(inspect(editedf884s, {depth: 3}));
90
- debugData(`${JSON.stringify(editedf884s)}`);
91
-
92
- // We update each field based on the results we got from fields
93
- // Note: we do not add $g:s or $k:s if the field doesn't have them
94
- function editFields(fields, results) {
95
- debug(`EDITING FIELDS (${fields.length})`);
96
- const editedFields = fields.map(field => {
97
- const convSource = `${findConversion(field)}:${findSource(field)}`;
98
- debug(`Looking for: ${convSource}`);
99
- if (convSource && results[convSource]) {
100
- debugData(`Found: ${JSON.stringify(results[convSource])}`);
101
- const firstDate = results[convSource].firstDate && results[convSource].firstDate !== '00000000' ? results[convSource].firstDate : '';
102
- const lastDate = results[convSource].lastDate && results[convSource].lastDate !== '00000000' ? results[convSource].lastDate : '';
103
- const source = results[convSource].source && results[convSource].source !== 'NO_SOURCE' ? results[convSource].source : '';
104
- const hash = results[convSource].hash && results[convSource].hash !== '0000000000000000000000000000000000000000000000000000000000000000' ? results[convSource].hash : '';
105
- const sfGAll = firstDate === lastDate ? `${firstDate}` : `${firstDate} - ${lastDate}`;
106
- debugData(`EditedDates: ${sfGAll}`);
107
- const sfKAll = `${source}:${hash}`;
108
- const sfG = sfGAll.replace(/^ - /u, '').replace(/ - $/u, '');
109
- const sfK = sfKAll.replace(/^:/u, '').replace(/:$/u, '');
110
- return {
111
- ...field,
112
- subfields: field.subfields.map(subfield => {
113
- // we don't get $g or $k if the original field doesn't have them
114
- if (subfield.code === 'g') {
115
- return {
116
- code: subfield.code,
117
- value: sfG
118
- };
119
- }
120
- if (subfield.code === 'k') {
121
- return {
122
- code: subfield.code,
123
- value: sfK
124
- };
125
- }
126
- return subfield;
127
- })
128
- };
129
- }
130
- debug(`Not found: ${convSource}`);
131
- return field;
132
- });
133
- return editedFields;
134
- }
135
-
136
- // we'll need to uniq these too
137
-
138
- const uniq884s = uniqFields(editedf884s);
139
- debug(`UniqFields (${uniq884s.length})`);
140
- debugData((0, _util.inspect)(uniq884s, {
141
- depth: 3
142
- }));
143
- function uniqFields(fields) {
144
- return fields.reduce((uniq, field) => {
145
- if (!uniq.some(f => _marcRecord.MarcRecord.isEqual(f, field))) {
146
- // eslint-disable-line functional/no-conditional-statements
147
- uniq.push(field); // eslint-disable-line functional/immutable-data
148
- }
149
- return uniq;
150
- }, []);
151
- }
152
- // Replace original Melinda-f884s with remaining Melinda-f884s
153
- // NOTE: this sorts MELINDA-f884s after possible other f884s
154
- newRecord.removeFields(f884Melindas);
155
- newRecord.insertFields(uniq884s);
156
- return newRecord;
157
-
158
- // Find conversion:source pairs
159
- // Find first date
160
- // Find last date and last hash
161
-
162
- function findConversion(f884) {
163
- const [sfA] = f884.subfields.filter(subfield => subfield.code === 'a').map(subfield => subfield.value);
164
- const conversion = sfA;
165
- debugData(`Conversion: "${conversion}"`);
166
- return conversion;
167
- }
168
- function findSource(f884) {
169
- const [sfK] = f884.subfields.filter(subfield => subfield.code === 'k').map(subfield => subfield.value);
170
- const source = sfK.replace(/:.*$/u, '');
171
- if (source && source.length !== 64) {
172
- debugData(`Source: "${source}"`);
173
- return source;
174
- }
175
- const emptySource = 'NO_SOURCE';
176
- debugData(`Source: "${emptySource}"`);
177
- return emptySource;
178
- }
179
- function findHash(f884) {
180
- const [sfK] = f884.subfields.filter(subfield => subfield.code === 'k').map(subfield => subfield.value);
181
- const hash = sfK.replace(/^.*:/u, '');
182
- if (hash && hash.length === 64) {
183
- debugData(`Hash: "${hash}"`);
184
- return hash;
185
- }
186
- const emptyHash = '0000000000000000000000000000000000000000000000000000000000000000';
187
- debugData(`Hash: "${emptyHash}"`);
188
- return emptyHash;
189
- }
190
- function findDates(f884) {
191
- const [sfG] = f884.subfields.filter(subfield => subfield.code === 'g').map(subfield => subfield.value);
192
- if (sfG && / - /u.test(sfG)) {
193
- const firstDate = sfG.replace(/ - .*$/u, '').padStart(8, '0');
194
- const lastDate = sfG.replace(/^.* - /u, '').padStart(8, '0');
195
- debugData(`FirstDate: "${firstDate}", LastDate: "${lastDate}"`);
196
- return {
197
- firstDate,
198
- lastDate
199
- };
200
- }
201
- const firstDate = sfG ? sfG.padStart(8, '0') : '00000000';
202
- const lastDate = sfG ? sfG.padStart(8, '0') : '00000000';
203
- debugData(`FirstDate: "${firstDate}", LastDate: "${lastDate}"`);
204
- return {
205
- firstDate,
206
- lastDate
207
- };
208
- }
209
- }
210
- //# sourceMappingURL=fix-strip-f884s.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fix-strip-f884s.js","names":["_marcRecord","require","_debug","_interopRequireDefault","_util","stripF884s","newRecord","options","debug","createDebugLogger","debugData","extend","JSON","stringify","isMelindaf884","f","tag","subfields","some","code","value","f884Melindas","fields","filter","length","results","reduce","allResults","f884","index","conversion","findConversion","source","findSource","convSource","firstDate","lastDate","findDates","hash","findHash","currResult","newResult","updatedResult","editedf884s","editFields","editedFields","map","field","sfGAll","sfKAll","sfG","replace","sfK","subfield","uniq884s","uniqFields","inspect","depth","uniq","MarcRecord","isEqual","push","removeFields","insertFields","sfA","emptySource","emptyHash","test","padStart"],"sources":["../../src/helpers/fix-strip-f884s.js"],"sourcesContent":["import {MarcRecord} from '@natlibfi/marc-record';\nimport createDebugLogger from 'debug';\n//import {sortFieldsBySubfieldValue, removeSubfield} from './fix-utils';\nimport {inspect} from 'util';\n\nexport function stripF884s(newRecord, options) {\n const debug = createDebugLogger('@natlibfi/melinda-rest-api-commons:fixRecord:stripF884s');\n const debugData = debug.extend('data');\n\n if (options !== true) {\n debug(`NOT running stripF884s fixer, no options`);\n return newRecord;\n }\n\n debug(`Running stripF884s fixer`);\n debugData(`Options for stripF884s: ${JSON.stringify(options)}`);\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 //debugData(`Melinda's f884s (${f884Melindas.length}) \\n ${inspect(f884Melindas, {depth: 3})}`);\n\n if (f884Melindas.length < 2) {\n debug(`Not enough Melinda's f884s to filter (${f884Melindas.length})`);\n return newRecord;\n }\n\n // Pick data (firstDate, lastDate, hash with latest date) for all conversion : source combinations\n const results = f884Melindas.reduce((allResults, f884, index) => {\n debugData(`All results: ${JSON.stringify(allResults)}`);\n //debugData(`Handling field (${index}): ${inspect(f884, {depth: 3})}`);\n debugData(`Handling field *(${index})*: ${JSON.stringify(f884)}`);\n\n const conversion = findConversion(f884);\n const source = findSource(f884);\n const convSource = `${conversion}:${source}`;\n const {firstDate, lastDate} = findDates(f884);\n const hash = findHash(f884);\n\n // Find currently existing data for conversion : source combination\n const currResult = allResults[convSource];\n debugData(JSON.stringify(currResult));\n\n // If we do not have any current data, add data from field\n if (!currResult) {\n debug(`Add a new convSource ${convSource} to results`);\n const newResult = {\n conversion,\n source,\n firstDate,\n lastDate,\n hash\n };\n debugData(`- New result: ${JSON.stringify(newResult)}`);\n return {\n ...allResults,\n [convSource]: newResult\n };\n }\n // If we have current data, update it from the data from field, if needed\n debug(`Update result for ${convSource}`);\n debugData(`- Current result: ${JSON.stringify(currResult)}`);\n\n const updatedResult = {\n ...currResult,\n firstDate: currResult.firstDate > firstDate && firstDate !== '00000000' ? firstDate : currResult.firstDate,\n lastDate: currResult.lastDate < lastDate ? lastDate : currResult.lastDate,\n hash: currResult.lastDate < lastDate && lastDate !== '00000000' && hash !== '0000000000000000000000000000000000000000000000000000000000000000' ? hash : currResult.hash\n };\n debugData(`- Updated result: ${JSON.stringify(updatedResult)}`);\n return {\n ...allResults,\n [convSource]: updatedResult\n };\n }, {});\n\n debugData(`RESULTS: ${JSON.stringify(results)}`);\n const editedf884s = editFields(f884Melindas, results);\n\n debug(`Edited fields (${editedf884s.length})`);\n //debugData(inspect(editedf884s, {depth: 3}));\n debugData(`${JSON.stringify(editedf884s)}`);\n\n // We update each field based on the results we got from fields\n // Note: we do not add $g:s or $k:s if the field doesn't have them\n function editFields(fields, results) {\n debug(`EDITING FIELDS (${fields.length})`);\n const editedFields = fields.map((field) => {\n const convSource = `${findConversion(field)}:${findSource(field)}`;\n debug(`Looking for: ${convSource}`);\n\n if (convSource && results[convSource]) {\n debugData(`Found: ${JSON.stringify(results[convSource])}`);\n const firstDate = results[convSource].firstDate && results[convSource].firstDate !== '00000000' ? results[convSource].firstDate : '';\n const lastDate = results[convSource].lastDate && results[convSource].lastDate !== '00000000' ? results[convSource].lastDate : '';\n\n const source = results[convSource].source && results[convSource].source !== 'NO_SOURCE' ? results[convSource].source : '';\n const hash = results[convSource].hash && results[convSource].hash !== '0000000000000000000000000000000000000000000000000000000000000000' ? results[convSource].hash : '';\n\n const sfGAll = firstDate === lastDate ? `${firstDate}` : `${firstDate} - ${lastDate}`;\n debugData(`EditedDates: ${sfGAll}`);\n const sfKAll = `${source}:${hash}`;\n\n const sfG = sfGAll.replace(/^ - /u, '').replace(/ - $/u, '');\n const sfK = sfKAll.replace(/^:/u, '').replace(/:$/u, '');\n\n return {\n ...field,\n subfields: field.subfields.map(subfield => {\n\n // we don't get $g or $k if the original field doesn't have them\n if (subfield.code === 'g') {\n return {\n code: subfield.code,\n value: sfG\n };\n }\n\n if (subfield.code === 'k') {\n return {\n code: subfield.code,\n value: sfK\n };\n }\n\n return subfield;\n })\n\n };\n }\n debug(`Not found: ${convSource}`);\n return field;\n });\n return editedFields;\n }\n\n // we'll need to uniq these too\n\n const uniq884s = uniqFields(editedf884s);\n debug(`UniqFields (${uniq884s.length})`);\n debugData(inspect(uniq884s, {depth: 3}));\n\n\n function uniqFields(fields) {\n return fields.reduce((uniq, field) => {\n if (!uniq.some(f => MarcRecord.isEqual(f, field))) { // eslint-disable-line functional/no-conditional-statements\n uniq.push(field); // eslint-disable-line functional/immutable-data\n }\n\n return uniq;\n }, []);\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(uniq884s);\n\n return newRecord;\n\n\n // Find conversion:source pairs\n // Find first date\n // Find last date and last hash\n\n\n function findConversion(f884) {\n const [sfA] = f884.subfields.filter((subfield) => subfield.code === 'a').map(subfield => subfield.value);\n const conversion = sfA;\n debugData(`Conversion: \"${conversion}\"`);\n return conversion;\n }\n\n function findSource(f884) {\n const [sfK] = f884.subfields.filter((subfield) => subfield.code === 'k').map(subfield => subfield.value);\n const source = sfK.replace(/:.*$/u, '');\n if (source && source.length !== 64) {\n debugData(`Source: \"${source}\"`);\n return source;\n }\n const emptySource = 'NO_SOURCE';\n debugData(`Source: \"${emptySource}\"`);\n return emptySource;\n }\n\n function findHash(f884) {\n const [sfK] = f884.subfields.filter((subfield) => subfield.code === 'k').map(subfield => subfield.value);\n const hash = sfK.replace(/^.*:/u, '');\n if (hash && hash.length === 64) {\n debugData(`Hash: \"${hash}\"`);\n return hash;\n }\n const emptyHash = '0000000000000000000000000000000000000000000000000000000000000000';\n debugData(`Hash: \"${emptyHash}\"`);\n return emptyHash;\n }\n\n function findDates(f884) {\n const [sfG] = f884.subfields.filter((subfield) => subfield.code === 'g').map(subfield => subfield.value);\n if (sfG && (/ - /u).test(sfG)) {\n const firstDate = sfG.replace(/ - .*$/u, '').padStart(8, '0');\n const lastDate = sfG.replace(/^.* - /u, '').padStart(8, '0');\n debugData(`FirstDate: \"${firstDate}\", LastDate: \"${lastDate}\"`);\n return {firstDate, lastDate};\n }\n const firstDate = sfG ? sfG.padStart(8, '0') : '00000000';\n const lastDate = sfG ? sfG.padStart(8, '0') : '00000000';\n\n debugData(`FirstDate: \"${firstDate}\", LastDate: \"${lastDate}\"`);\n return {firstDate, lastDate};\n }\n\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,54 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.removeSubfield = removeSubfield;
7
- exports.sortFieldsBySubfieldValue = sortFieldsBySubfieldValue;
8
- function removeSubfield(field, code) {
9
- // Handle non-numeric fields, and fields with a numeric tag of 010 and greater
10
- // Aleph's FMT as a controlfield might be a problem
11
- if (!isNaN(field.tag) && parseInt(field.tag, 10) >= 10) {
12
- const filteredSubfields = field.subfields.filter(sf => sf.code !== code);
13
-
14
- // Remove whole field if there are no subfields left
15
- if (filteredSubfields.length < 1) {
16
- return false;
17
- }
18
- return {
19
- tag: field.tag,
20
- ind1: field.ind1,
21
- ind2: field.ind2,
22
- subfields: filteredSubfields
23
- };
24
- }
25
- // return controlFields as is
26
- return field;
27
- }
28
-
29
- // sort fields by value of each fields first subfield with subfielCode
30
- function sortFieldsBySubfieldValue(fields, subfieldCode) {
31
- return [...fields].sort((a, b) => {
32
- const a1value = getFirstSubfieldValue(a, subfieldCode);
33
- const b1value = getFirstSubfieldValue(b, subfieldCode);
34
- if (a1value && !b1value) {
35
- return -1;
36
- }
37
- if (!a1value && b1value) {
38
- return 1;
39
- }
40
- if (a1value > b1value) {
41
- return 1;
42
- }
43
- if (b1value > a1value) {
44
- return -1;
45
- }
46
- return 0;
47
- });
48
- // get value for the for instance of subfield with subfieldCode
49
- function getFirstSubfieldValue(field, subfieldCode) {
50
- const subs = field.subfields ? field.subfields.filter(subf => subf.code === subfieldCode) : [];
51
- return subs.length > 0 ? subs[0].value : '';
52
- }
53
- }
54
- //# sourceMappingURL=fix-utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fix-utils.js","names":["removeSubfield","field","code","isNaN","tag","parseInt","filteredSubfields","subfields","filter","sf","length","ind1","ind2","sortFieldsBySubfieldValue","fields","subfieldCode","sort","a","b","a1value","getFirstSubfieldValue","b1value","subs","subf","value"],"sources":["../../src/helpers/fix-utils.js"],"sourcesContent":["\n\nexport 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// sort fields by value of each fields first subfield with subfielCode\nexport 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 // 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"],"mappings":";;;;;;;AAEO,SAASA,cAAcA,CAACC,KAAK,EAAEC,IAAI,EAAE;EAE1C;EACA;EACA,IAAI,CAACC,KAAK,CAACF,KAAK,CAACG,GAAG,CAAC,IAAIC,QAAQ,CAACJ,KAAK,CAACG,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE;IAEtD,MAAME,iBAAiB,GAAGL,KAAK,CAACM,SAAS,CAACC,MAAM,CAACC,EAAE,IAAIA,EAAE,CAACP,IAAI,KAAKA,IAAI,CAAC;;IAExE;IACA,IAAII,iBAAiB,CAACI,MAAM,GAAG,CAAC,EAAE;MAChC,OAAO,KAAK;IACd;IAEA,OAAO;MACLN,GAAG,EAAEH,KAAK,CAACG,GAAG;MACdO,IAAI,EAAEV,KAAK,CAACU,IAAI;MAChBC,IAAI,EAAEX,KAAK,CAACW,IAAI;MAChBL,SAAS,EAAED;IACb,CAAC;EACH;EACA;EACA,OAAOL,KAAK;AACd;;AAGA;AACO,SAASY,yBAAyBA,CAACC,MAAM,EAAEC,YAAY,EAAE;EAC9D,OAAO,CAAC,GAAGD,MAAM,CAAC,CAACE,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAK;IAChC,MAAMC,OAAO,GAAGC,qBAAqB,CAACH,CAAC,EAAEF,YAAY,CAAC;IACtD,MAAMM,OAAO,GAAGD,qBAAqB,CAACF,CAAC,EAAEH,YAAY,CAAC;IACtD,IAAII,OAAO,IAAI,CAACE,OAAO,EAAE;MACvB,OAAO,CAAC,CAAC;IACX;IACA,IAAI,CAACF,OAAO,IAAIE,OAAO,EAAE;MACvB,OAAO,CAAC;IACV;IACA,IAAIF,OAAO,GAAGE,OAAO,EAAE;MACrB,OAAO,CAAC;IACV;IACA,IAAIA,OAAO,GAAGF,OAAO,EAAE;MACrB,OAAO,CAAC,CAAC;IACX;IACA,OAAO,CAAC;EACV,CAAC,CAAC;EACF;EACA,SAASC,qBAAqBA,CAACnB,KAAK,EAAEc,YAAY,EAAE;IAClD,MAAMO,IAAI,GAAGrB,KAAK,CAACM,SAAS,GAAGN,KAAK,CAACM,SAAS,CAACC,MAAM,CAACe,IAAI,IAAIA,IAAI,CAACrB,IAAI,KAAKa,YAAY,CAAC,GAAG,EAAE;IAC9F,OAAOO,IAAI,CAACZ,MAAM,GAAG,CAAC,GAAGY,IAAI,CAAC,CAAC,CAAC,CAACE,KAAK,GAAG,EAAE;EAC7C;AACF","ignoreList":[]}