@natlibfi/melinda-rest-api-commons 2.3.2-alpha.5 → 2.3.2-alpha.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/amqp.js CHANGED
@@ -4,25 +4,15 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = _default;
7
-
8
7
  var _amqplib = _interopRequireDefault(require("amqplib"));
9
-
10
8
  var _marcRecord = require("@natlibfi/marc-record");
11
-
12
9
  var _melindaCommons = require("@natlibfi/melinda-commons");
13
-
14
10
  var _melindaBackendCommons = require("@natlibfi/melinda-backend-commons");
15
-
16
11
  var _constants = require("./constants");
17
-
18
12
  var _utils = require("./utils");
19
-
20
13
  var _util = require("util");
21
-
22
14
  var _httpStatus = _interopRequireDefault(require("http-status"));
23
-
24
15
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
-
26
16
  /**
27
17
  *
28
18
  * @licstart The following is the entire license notice for the JavaScript code in this file.
@@ -50,6 +40,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
50
40
  * for the JavaScript code in this file.
51
41
  *
52
42
  */
43
+
53
44
  async function _default(AMQP_URL) {
54
45
  const connection = await _amqplib.default.connect(AMQP_URL);
55
46
  const channel = await connection.createChannel();
@@ -63,8 +54,9 @@ async function _default(AMQP_URL) {
63
54
  sendToQueue,
64
55
  removeQueue,
65
56
  messagesToRecords
66
- }; // eslint-disable-next-line max-statements
57
+ };
67
58
 
59
+ // eslint-disable-next-line max-statements
68
60
  async function checkQueue({
69
61
  queue,
70
62
  style = 'basic',
@@ -72,13 +64,11 @@ async function _default(AMQP_URL) {
72
64
  purge = false
73
65
  }) {
74
66
  logger.silly(`checkQueue: ${queue}, Style: ${style}: toRecord: ${toRecord}, Purge: ${purge}`);
75
-
76
67
  try {
77
68
  errorUndefinedQueue(queue);
78
69
  const channelInfo = await channel.assertQueue(queue, {
79
70
  durable: true
80
71
  });
81
-
82
72
  if (purge) {
83
73
  await purgeQueue(purge);
84
74
  logger.verbose(`Queue ${queue} has purged ${channelInfo.messageCount} messages`);
@@ -87,57 +77,51 @@ async function _default(AMQP_URL) {
87
77
  style
88
78
  });
89
79
  }
90
-
91
80
  if (channelInfo.messageCount < 1) {
92
81
  logger.silly(`checkQueue: ${channelInfo.messageCount} - ${queue} is empty`);
93
82
  return false;
94
83
  }
95
-
96
84
  logger.silly(`Queue ${queue} has ${channelInfo.messageCount} messages`);
97
-
98
85
  if (style === 'messages') {
99
86
  return channelInfo.messageCount;
100
- } // Note: returns one message (+ record, of toRecord: true)
87
+ }
88
+
89
+ // Note: returns one message (+ record, of toRecord: true)
101
90
  // note: if toRecord is false returns just plain message / false
102
91
  // note: if toRecord is true returns {headers, records, messages} -object / false
103
92
  // should this be more consistent?
104
-
105
-
106
93
  if (style === 'one') {
107
94
  return consumeOne(queue, toRecord);
108
- } // Note: returns a chunk of (100) messages (+ records, if toRecord: true)
109
- // returns {headers, records, messages} object or {headers, messages} object depending on toRecord
110
-
95
+ }
111
96
 
97
+ // Note: returns a chunk of (100) messages (+ records, if toRecord: true)
98
+ // returns {headers, records, messages} object or {headers, messages} object depending on toRecord
112
99
  if (style === 'basic') {
113
100
  return consumeChunk(queue, toRecord);
114
- } // Defaults:
115
-
101
+ }
116
102
 
103
+ // Defaults:
117
104
  throw new _melindaCommons.Error(_httpStatus.default.UNPROCESSABLE_ENTITY);
118
105
  } catch (error) {
119
106
  (0, _utils.logError)(error);
120
107
  }
121
-
122
108
  function purgeQueue(purge) {
123
109
  if (purge) {
124
110
  return channel.purgeQueue(queue);
125
111
  }
126
112
  }
127
113
  }
128
-
129
114
  async function consumeChunk(queue, toRecord) {
130
115
  logger.silly(`Prepared to consumeChunk from queue: ${queue}`);
131
-
132
116
  try {
133
117
  await channel.assertQueue(queue, {
134
118
  durable: true
135
- }); // getData: next chunk (100) messages
119
+ });
136
120
 
121
+ // getData: next chunk (100) messages
137
122
  const messages = await getData(queue);
138
123
  const headers = getHeaderInfo(messages[0]);
139
124
  logger.debug(`consumeChunk (${messages ? messages.length : '0'} from queue ${queue}) ${toRecord ? 'to records' : 'just messages'}`);
140
-
141
125
  if (toRecord) {
142
126
  const records = await messagesToRecords(messages);
143
127
  return {
@@ -146,7 +130,6 @@ async function _default(AMQP_URL) {
146
130
  messages
147
131
  };
148
132
  }
149
-
150
133
  return {
151
134
  headers,
152
135
  messages
@@ -155,24 +138,22 @@ async function _default(AMQP_URL) {
155
138
  (0, _utils.logError)(error);
156
139
  }
157
140
  }
158
-
159
141
  async function consumeOne(queue, toRecord) {
160
142
  logger.silly(`Prepared to consumeOne from queue: ${queue}`);
161
-
162
143
  try {
163
144
  await channel.assertQueue(queue, {
164
145
  durable: true
165
- }); // Returns false if 0 items in queue
146
+ });
166
147
 
148
+ // Returns false if 0 items in queue
167
149
  const message = await channel.get(queue);
168
150
  logger.silly(`Message: ${(0, _util.inspect)(message, {
169
151
  colors: true,
170
152
  maxArrayLength: 3,
171
153
  depth: 3
172
- })}`); // Do not spam the logs
173
-
154
+ })}`);
155
+ // Do not spam the logs
174
156
  logger.debug(`consumeOne from queue: ${queue} ${toRecord ? 'to records' : 'just the message'}`);
175
-
176
157
  if (message) {
177
158
  if (toRecord) {
178
159
  const headers = getHeaderInfo(message);
@@ -183,30 +164,25 @@ async function _default(AMQP_URL) {
183
164
  messages: [message]
184
165
  };
185
166
  }
186
-
187
167
  return message;
188
168
  }
189
-
190
169
  return false;
191
170
  } catch (error) {
192
171
  (0, _utils.logError)(error);
193
172
  }
194
173
  }
195
-
196
174
  function ackMessages(messages) {
197
175
  messages.forEach(message => {
198
176
  logger.silly(`Ack message ${message.properties.correlationId}`);
199
177
  channel.ack(message);
200
178
  });
201
179
  }
202
-
203
180
  function nackMessages(messages) {
204
181
  messages.forEach(message => {
205
182
  logger.silly(`Nack message ${message.properties.correlationId}`);
206
183
  channel.nack(message);
207
184
  });
208
185
  }
209
-
210
186
  async function sendToQueue({
211
187
  queue,
212
188
  correlationId,
@@ -234,7 +210,6 @@ async function _default(AMQP_URL) {
234
210
  (0, _utils.logError)(error);
235
211
  }
236
212
  }
237
-
238
213
  async function removeQueue(queue) {
239
214
  // deleteQueue borks the channel if the queue does not exist
240
215
  // -> use throwaway tempChannel to avoid killing actual channel in use
@@ -242,16 +217,16 @@ async function _default(AMQP_URL) {
242
217
  const tempChannel = await connection.createChannel();
243
218
  logger.verbose(`Removing queue ${queue}.`);
244
219
  await tempChannel.deleteQueue(queue);
245
-
246
220
  if (tempChannel) {
247
221
  // eslint-disable-line functional/no-conditional-statement
248
222
  await tempChannel.close();
249
223
  }
250
- } // ----------------
224
+ }
225
+
226
+ // ----------------
251
227
  // Helper functions
252
228
  // ----------------
253
229
 
254
-
255
230
  function messagesToRecords(messages) {
256
231
  logger.debug(`Parsing messages (${messages.length}) to records`);
257
232
  return messages.map(message => {
@@ -259,10 +234,8 @@ async function _default(AMQP_URL) {
259
234
  return new _marcRecord.MarcRecord(content.data);
260
235
  });
261
236
  }
262
-
263
237
  async function getData(queue) {
264
238
  logger.debug(`Getting queue data from ${queue}`);
265
-
266
239
  try {
267
240
  const {
268
241
  messageCount
@@ -276,30 +249,25 @@ async function _default(AMQP_URL) {
276
249
  } catch (error) {
277
250
  (0, _utils.logError)(error);
278
251
  }
279
-
280
252
  async function pump(count, results = [], identifiers = []) {
281
253
  if (count === 0) {
282
254
  return results;
283
255
  }
284
-
285
256
  const message = await channel.get(queue);
286
257
  const identifier = {
287
258
  correlationId: message.properties.correlationId,
288
259
  deliveryTag: message.fields.deliveryTag
289
- }; // Filter not unique messages
290
-
260
+ };
261
+ // Filter not unique messages
291
262
  if (identifiers.includes(identifier)) {
292
263
  return pump(count - 1, results, identifiers);
293
264
  }
294
-
295
265
  return pump(count - 1, results.concat(message), identifiers.concat(identifier));
296
266
  }
297
267
  }
298
-
299
268
  function getHeaderInfo(data) {
300
269
  return data.properties.headers;
301
270
  }
302
-
303
271
  function errorUndefinedQueue(queue) {
304
272
  if (queue === undefined || queue === '' || queue === null) {
305
273
  throw new _melindaCommons.Error(_httpStatus.default.INTERNAL_SERVER_ERROR, `Undefined queue!`);
package/dist/amqp.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"amqp.js","names":["AMQP_URL","connection","amqplib","connect","channel","createChannel","logger","createLogger","checkQueue","consumeChunk","consumeOne","ackMessages","nackMessages","sendToQueue","removeQueue","messagesToRecords","queue","style","toRecord","purge","silly","errorUndefinedQueue","channelInfo","assertQueue","durable","purgeQueue","verbose","messageCount","ApiError","httpStatus","UNPROCESSABLE_ENTITY","error","logError","messages","getData","headers","getHeaderInfo","debug","length","records","message","get","inspect","colors","maxArrayLength","depth","forEach","properties","correlationId","ack","nack","data","JSON","stringify","Buffer","from","persistent","tempChannel","deleteQueue","close","map","content","parse","toString","MarcRecord","messagesToGet","CHUNK_SIZE","pump","count","results","identifiers","identifier","deliveryTag","fields","includes","concat","undefined","INTERNAL_SERVER_ERROR"],"sources":["../src/amqp.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 amqplib from 'amqplib';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport {Error as ApiError} from '@natlibfi/melinda-commons';\nimport {createLogger} from '@natlibfi/melinda-backend-commons';\nimport {CHUNK_SIZE} from './constants';\nimport {logError} from './utils';\nimport {inspect} from 'util';\nimport httpStatus from 'http-status';\n\nexport default async function (AMQP_URL) {\n const connection = await amqplib.connect(AMQP_URL);\n const channel = await connection.createChannel();\n const logger = createLogger();\n\n return {checkQueue, consumeChunk, consumeOne, ackMessages, nackMessages, sendToQueue, removeQueue, messagesToRecords};\n\n // eslint-disable-next-line max-statements\n async function checkQueue({queue, style = 'basic', toRecord = true, purge = false}) {\n logger.silly(`checkQueue: ${queue}, Style: ${style}: toRecord: ${toRecord}, Purge: ${purge}`);\n\n try {\n\n errorUndefinedQueue(queue);\n const channelInfo = await channel.assertQueue(queue, {durable: true});\n\n if (purge) {\n await purgeQueue(purge);\n logger.verbose(`Queue ${queue} has purged ${channelInfo.messageCount} messages`);\n return checkQueue({queue, style});\n }\n\n if (channelInfo.messageCount < 1) {\n logger.silly(`checkQueue: ${channelInfo.messageCount} - ${queue} is empty`);\n return false;\n }\n logger.silly(`Queue ${queue} has ${channelInfo.messageCount} messages`);\n\n if (style === 'messages') {\n return channelInfo.messageCount;\n }\n\n // Note: returns one message (+ record, of toRecord: true)\n // note: if toRecord is false returns just plain message / false\n // note: if toRecord is true returns {headers, records, messages} -object / false\n // should this be more consistent?\n if (style === 'one') {\n return consumeOne(queue, toRecord);\n }\n\n // Note: returns a chunk of (100) messages (+ records, if toRecord: true)\n // returns {headers, records, messages} object or {headers, messages} object depending on toRecord\n if (style === 'basic') {\n return consumeChunk(queue, toRecord);\n }\n\n // Defaults:\n throw new ApiError(httpStatus.UNPROCESSABLE_ENTITY);\n } catch (error) {\n logError(error);\n }\n\n function purgeQueue(purge) {\n if (purge) {\n return channel.purgeQueue(queue);\n }\n }\n }\n\n async function consumeChunk(queue, toRecord) {\n logger.silly(`Prepared to consumeChunk from queue: ${queue}`);\n try {\n await channel.assertQueue(queue, {durable: true});\n\n // getData: next chunk (100) messages\n const messages = await getData(queue);\n const headers = getHeaderInfo(messages[0]);\n logger.debug(`consumeChunk (${messages ? messages.length : '0'} from queue ${queue}) ${toRecord ? 'to records' : 'just messages'}`);\n\n if (toRecord) {\n const records = await messagesToRecords(messages);\n return {headers, records, messages};\n }\n\n return {headers, messages};\n } catch (error) {\n logError(error);\n }\n }\n\n async function consumeOne(queue, toRecord) {\n logger.silly(`Prepared to consumeOne from queue: ${queue}`);\n try {\n await channel.assertQueue(queue, {durable: true});\n\n // Returns false if 0 items in queue\n const message = await channel.get(queue);\n\n logger.silly(`Message: ${inspect(message, {colors: true, maxArrayLength: 3, depth: 3})}`);\n // Do not spam the logs\n logger.debug(`consumeOne from queue: ${queue} ${toRecord ? 'to records' : 'just the message'}`);\n\n if (message) {\n if (toRecord) {\n const headers = getHeaderInfo(message);\n const records = messagesToRecords([message]);\n return {headers, records, messages: [message]};\n }\n\n return message;\n }\n\n return false;\n } catch (error) {\n logError(error);\n }\n }\n\n function ackMessages(messages) {\n messages.forEach(message => {\n logger.silly(`Ack message ${message.properties.correlationId}`);\n channel.ack(message);\n });\n }\n\n function nackMessages(messages) {\n messages.forEach(message => {\n logger.silly(`Nack message ${message.properties.correlationId}`);\n channel.nack(message);\n });\n }\n\n async function sendToQueue({queue, correlationId, headers, data}) {\n try {\n logger.silly(`Queue ${queue}`);\n logger.silly(`CorrelationId ${correlationId}`);\n logger.silly(`Data ${JSON.stringify(data)}`);\n logger.silly(`Headers ${JSON.stringify(headers)}`);\n\n errorUndefinedQueue(queue);\n await channel.assertQueue(queue, {durable: true});\n\n channel.sendToQueue(\n queue,\n Buffer.from(JSON.stringify({data})),\n {\n correlationId,\n persistent: true,\n headers\n }\n );\n logger.silly(`Send message for ${correlationId} to queue: ${queue}`);\n } catch (error) {\n logError(error);\n }\n }\n\n async function removeQueue(queue) {\n // deleteQueue borks the channel if the queue does not exist\n // -> use throwaway tempChannel to avoid killing actual channel in use\n // this might be doable also with assertQueue before deleteQueue\n const tempChannel = await connection.createChannel();\n logger.verbose(`Removing queue ${queue}.`);\n await tempChannel.deleteQueue(queue);\n if (tempChannel) { // eslint-disable-line functional/no-conditional-statement\n await tempChannel.close();\n }\n }\n\n // ----------------\n // Helper functions\n // ----------------\n\n function messagesToRecords(messages) {\n logger.debug(`Parsing messages (${messages.length}) to records`);\n\n return messages.map(message => {\n const content = JSON.parse(message.content.toString());\n return new MarcRecord(content.data);\n });\n }\n\n async function getData(queue) {\n logger.debug(`Getting queue data from ${queue}`);\n try {\n const {messageCount} = await channel.checkQueue(queue);\n logger.silly(`There is ${messageCount} messages in queue ${queue}`);\n const messagesToGet = messageCount >= CHUNK_SIZE ? CHUNK_SIZE : messageCount;\n logger.silly(`Getting ${messagesToGet} messages from queue ${queue}`);\n\n const messages = await pump(messagesToGet);\n\n logger.debug(`Returning ${messages.length} unique messages`);\n\n return messages;\n } catch (error) {\n logError(error);\n }\n\n async function pump(count, results = [], identifiers = []) {\n if (count === 0) {\n return results;\n }\n\n const message = await channel.get(queue);\n const identifier = {\n correlationId: message.properties.correlationId,\n deliveryTag: message.fields.deliveryTag\n };\n // Filter not unique messages\n if (identifiers.includes(identifier)) {\n return pump(count - 1, results, identifiers);\n }\n\n return pump(count - 1, results.concat(message), identifiers.concat(identifier));\n }\n }\n\n function getHeaderInfo(data) {\n return data.properties.headers;\n }\n\n function errorUndefinedQueue(queue) {\n if (queue === undefined || queue === '' || queue === null) {\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Undefined queue!`);\n }\n }\n}\n\n\n"],"mappings":"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"}
1
+ {"version":3,"file":"amqp.js","names":["AMQP_URL","connection","amqplib","connect","channel","createChannel","logger","createLogger","checkQueue","consumeChunk","consumeOne","ackMessages","nackMessages","sendToQueue","removeQueue","messagesToRecords","queue","style","toRecord","purge","silly","errorUndefinedQueue","channelInfo","assertQueue","durable","purgeQueue","verbose","messageCount","ApiError","httpStatus","UNPROCESSABLE_ENTITY","error","logError","messages","getData","headers","getHeaderInfo","debug","length","records","message","get","inspect","colors","maxArrayLength","depth","forEach","properties","correlationId","ack","nack","data","JSON","stringify","Buffer","from","persistent","tempChannel","deleteQueue","close","map","content","parse","toString","MarcRecord","messagesToGet","CHUNK_SIZE","pump","count","results","identifiers","identifier","deliveryTag","fields","includes","concat","undefined","INTERNAL_SERVER_ERROR"],"sources":["../src/amqp.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 amqplib from 'amqplib';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport {Error as ApiError} from '@natlibfi/melinda-commons';\nimport {createLogger} from '@natlibfi/melinda-backend-commons';\nimport {CHUNK_SIZE} from './constants';\nimport {logError} from './utils';\nimport {inspect} from 'util';\nimport httpStatus from 'http-status';\n\nexport default async function (AMQP_URL) {\n const connection = await amqplib.connect(AMQP_URL);\n const channel = await connection.createChannel();\n const logger = createLogger();\n\n return {checkQueue, consumeChunk, consumeOne, ackMessages, nackMessages, sendToQueue, removeQueue, messagesToRecords};\n\n // eslint-disable-next-line max-statements\n async function checkQueue({queue, style = 'basic', toRecord = true, purge = false}) {\n logger.silly(`checkQueue: ${queue}, Style: ${style}: toRecord: ${toRecord}, Purge: ${purge}`);\n\n try {\n\n errorUndefinedQueue(queue);\n const channelInfo = await channel.assertQueue(queue, {durable: true});\n\n if (purge) {\n await purgeQueue(purge);\n logger.verbose(`Queue ${queue} has purged ${channelInfo.messageCount} messages`);\n return checkQueue({queue, style});\n }\n\n if (channelInfo.messageCount < 1) {\n logger.silly(`checkQueue: ${channelInfo.messageCount} - ${queue} is empty`);\n return false;\n }\n logger.silly(`Queue ${queue} has ${channelInfo.messageCount} messages`);\n\n if (style === 'messages') {\n return channelInfo.messageCount;\n }\n\n // Note: returns one message (+ record, of toRecord: true)\n // note: if toRecord is false returns just plain message / false\n // note: if toRecord is true returns {headers, records, messages} -object / false\n // should this be more consistent?\n if (style === 'one') {\n return consumeOne(queue, toRecord);\n }\n\n // Note: returns a chunk of (100) messages (+ records, if toRecord: true)\n // returns {headers, records, messages} object or {headers, messages} object depending on toRecord\n if (style === 'basic') {\n return consumeChunk(queue, toRecord);\n }\n\n // Defaults:\n throw new ApiError(httpStatus.UNPROCESSABLE_ENTITY);\n } catch (error) {\n logError(error);\n }\n\n function purgeQueue(purge) {\n if (purge) {\n return channel.purgeQueue(queue);\n }\n }\n }\n\n async function consumeChunk(queue, toRecord) {\n logger.silly(`Prepared to consumeChunk from queue: ${queue}`);\n try {\n await channel.assertQueue(queue, {durable: true});\n\n // getData: next chunk (100) messages\n const messages = await getData(queue);\n const headers = getHeaderInfo(messages[0]);\n logger.debug(`consumeChunk (${messages ? messages.length : '0'} from queue ${queue}) ${toRecord ? 'to records' : 'just messages'}`);\n\n if (toRecord) {\n const records = await messagesToRecords(messages);\n return {headers, records, messages};\n }\n\n return {headers, messages};\n } catch (error) {\n logError(error);\n }\n }\n\n async function consumeOne(queue, toRecord) {\n logger.silly(`Prepared to consumeOne from queue: ${queue}`);\n try {\n await channel.assertQueue(queue, {durable: true});\n\n // Returns false if 0 items in queue\n const message = await channel.get(queue);\n\n logger.silly(`Message: ${inspect(message, {colors: true, maxArrayLength: 3, depth: 3})}`);\n // Do not spam the logs\n logger.debug(`consumeOne from queue: ${queue} ${toRecord ? 'to records' : 'just the message'}`);\n\n if (message) {\n if (toRecord) {\n const headers = getHeaderInfo(message);\n const records = messagesToRecords([message]);\n return {headers, records, messages: [message]};\n }\n\n return message;\n }\n\n return false;\n } catch (error) {\n logError(error);\n }\n }\n\n function ackMessages(messages) {\n messages.forEach(message => {\n logger.silly(`Ack message ${message.properties.correlationId}`);\n channel.ack(message);\n });\n }\n\n function nackMessages(messages) {\n messages.forEach(message => {\n logger.silly(`Nack message ${message.properties.correlationId}`);\n channel.nack(message);\n });\n }\n\n async function sendToQueue({queue, correlationId, headers, data}) {\n try {\n logger.silly(`Queue ${queue}`);\n logger.silly(`CorrelationId ${correlationId}`);\n logger.silly(`Data ${JSON.stringify(data)}`);\n logger.silly(`Headers ${JSON.stringify(headers)}`);\n\n errorUndefinedQueue(queue);\n await channel.assertQueue(queue, {durable: true});\n\n channel.sendToQueue(\n queue,\n Buffer.from(JSON.stringify({data})),\n {\n correlationId,\n persistent: true,\n headers\n }\n );\n logger.silly(`Send message for ${correlationId} to queue: ${queue}`);\n } catch (error) {\n logError(error);\n }\n }\n\n async function removeQueue(queue) {\n // deleteQueue borks the channel if the queue does not exist\n // -> use throwaway tempChannel to avoid killing actual channel in use\n // this might be doable also with assertQueue before deleteQueue\n const tempChannel = await connection.createChannel();\n logger.verbose(`Removing queue ${queue}.`);\n await tempChannel.deleteQueue(queue);\n if (tempChannel) { // eslint-disable-line functional/no-conditional-statement\n await tempChannel.close();\n }\n }\n\n // ----------------\n // Helper functions\n // ----------------\n\n function messagesToRecords(messages) {\n logger.debug(`Parsing messages (${messages.length}) to records`);\n\n return messages.map(message => {\n const content = JSON.parse(message.content.toString());\n return new MarcRecord(content.data);\n });\n }\n\n async function getData(queue) {\n logger.debug(`Getting queue data from ${queue}`);\n try {\n const {messageCount} = await channel.checkQueue(queue);\n logger.silly(`There is ${messageCount} messages in queue ${queue}`);\n const messagesToGet = messageCount >= CHUNK_SIZE ? CHUNK_SIZE : messageCount;\n logger.silly(`Getting ${messagesToGet} messages from queue ${queue}`);\n\n const messages = await pump(messagesToGet);\n\n logger.debug(`Returning ${messages.length} unique messages`);\n\n return messages;\n } catch (error) {\n logError(error);\n }\n\n async function pump(count, results = [], identifiers = []) {\n if (count === 0) {\n return results;\n }\n\n const message = await channel.get(queue);\n const identifier = {\n correlationId: message.properties.correlationId,\n deliveryTag: message.fields.deliveryTag\n };\n // Filter not unique messages\n if (identifiers.includes(identifier)) {\n return pump(count - 1, results, identifiers);\n }\n\n return pump(count - 1, results.concat(message), identifiers.concat(identifier));\n }\n }\n\n function getHeaderInfo(data) {\n return data.properties.headers;\n }\n\n function errorUndefinedQueue(queue) {\n if (queue === undefined || queue === '' || queue === null) {\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Undefined queue!`);\n }\n }\n}\n\n\n"],"mappings":";;;;;;AA4BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAqC;AAnCrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAWe,wBAAgBA,QAAQ,EAAE;EACvC,MAAMC,UAAU,GAAG,MAAMC,gBAAO,CAACC,OAAO,CAACH,QAAQ,CAAC;EAClD,MAAMI,OAAO,GAAG,MAAMH,UAAU,CAACI,aAAa,EAAE;EAChD,MAAMC,MAAM,GAAG,IAAAC,mCAAY,GAAE;EAE7B,OAAO;IAACC,UAAU;IAAEC,YAAY;IAAEC,UAAU;IAAEC,WAAW;IAAEC,YAAY;IAAEC,WAAW;IAAEC,WAAW;IAAEC;EAAiB,CAAC;;EAErH;EACA,eAAeP,UAAU,CAAC;IAACQ,KAAK;IAAEC,KAAK,GAAG,OAAO;IAAEC,QAAQ,GAAG,IAAI;IAAEC,KAAK,GAAG;EAAK,CAAC,EAAE;IAClFb,MAAM,CAACc,KAAK,CAAE,eAAcJ,KAAM,YAAWC,KAAM,eAAcC,QAAS,YAAWC,KAAM,EAAC,CAAC;IAE7F,IAAI;MAEFE,mBAAmB,CAACL,KAAK,CAAC;MAC1B,MAAMM,WAAW,GAAG,MAAMlB,OAAO,CAACmB,WAAW,CAACP,KAAK,EAAE;QAACQ,OAAO,EAAE;MAAI,CAAC,CAAC;MAErE,IAAIL,KAAK,EAAE;QACT,MAAMM,UAAU,CAACN,KAAK,CAAC;QACvBb,MAAM,CAACoB,OAAO,CAAE,SAAQV,KAAM,eAAcM,WAAW,CAACK,YAAa,WAAU,CAAC;QAChF,OAAOnB,UAAU,CAAC;UAACQ,KAAK;UAAEC;QAAK,CAAC,CAAC;MACnC;MAEA,IAAIK,WAAW,CAACK,YAAY,GAAG,CAAC,EAAE;QAChCrB,MAAM,CAACc,KAAK,CAAE,eAAcE,WAAW,CAACK,YAAa,MAAKX,KAAM,WAAU,CAAC;QAC3E,OAAO,KAAK;MACd;MACAV,MAAM,CAACc,KAAK,CAAE,SAAQJ,KAAM,QAAOM,WAAW,CAACK,YAAa,WAAU,CAAC;MAEvE,IAAIV,KAAK,KAAK,UAAU,EAAE;QACxB,OAAOK,WAAW,CAACK,YAAY;MACjC;;MAEA;MACA;MACA;MACA;MACA,IAAIV,KAAK,KAAK,KAAK,EAAE;QACnB,OAAOP,UAAU,CAACM,KAAK,EAAEE,QAAQ,CAAC;MACpC;;MAEA;MACA;MACA,IAAID,KAAK,KAAK,OAAO,EAAE;QACrB,OAAOR,YAAY,CAACO,KAAK,EAAEE,QAAQ,CAAC;MACtC;;MAEA;MACA,MAAM,IAAIU,qBAAQ,CAACC,mBAAU,CAACC,oBAAoB,CAAC;IACrD,CAAC,CAAC,OAAOC,KAAK,EAAE;MACd,IAAAC,eAAQ,EAACD,KAAK,CAAC;IACjB;IAEA,SAASN,UAAU,CAACN,KAAK,EAAE;MACzB,IAAIA,KAAK,EAAE;QACT,OAAOf,OAAO,CAACqB,UAAU,CAACT,KAAK,CAAC;MAClC;IACF;EACF;EAEA,eAAeP,YAAY,CAACO,KAAK,EAAEE,QAAQ,EAAE;IAC3CZ,MAAM,CAACc,KAAK,CAAE,wCAAuCJ,KAAM,EAAC,CAAC;IAC7D,IAAI;MACF,MAAMZ,OAAO,CAACmB,WAAW,CAACP,KAAK,EAAE;QAACQ,OAAO,EAAE;MAAI,CAAC,CAAC;;MAEjD;MACA,MAAMS,QAAQ,GAAG,MAAMC,OAAO,CAAClB,KAAK,CAAC;MACrC,MAAMmB,OAAO,GAAGC,aAAa,CAACH,QAAQ,CAAC,CAAC,CAAC,CAAC;MAC1C3B,MAAM,CAAC+B,KAAK,CAAE,iBAAgBJ,QAAQ,GAAGA,QAAQ,CAACK,MAAM,GAAG,GAAI,eAActB,KAAM,KAAIE,QAAQ,GAAG,YAAY,GAAG,eAAgB,EAAC,CAAC;MAEnI,IAAIA,QAAQ,EAAE;QACZ,MAAMqB,OAAO,GAAG,MAAMxB,iBAAiB,CAACkB,QAAQ,CAAC;QACjD,OAAO;UAACE,OAAO;UAAEI,OAAO;UAAEN;QAAQ,CAAC;MACrC;MAEA,OAAO;QAACE,OAAO;QAAEF;MAAQ,CAAC;IAC5B,CAAC,CAAC,OAAOF,KAAK,EAAE;MACd,IAAAC,eAAQ,EAACD,KAAK,CAAC;IACjB;EACF;EAEA,eAAerB,UAAU,CAACM,KAAK,EAAEE,QAAQ,EAAE;IACzCZ,MAAM,CAACc,KAAK,CAAE,sCAAqCJ,KAAM,EAAC,CAAC;IAC3D,IAAI;MACF,MAAMZ,OAAO,CAACmB,WAAW,CAACP,KAAK,EAAE;QAACQ,OAAO,EAAE;MAAI,CAAC,CAAC;;MAEjD;MACA,MAAMgB,OAAO,GAAG,MAAMpC,OAAO,CAACqC,GAAG,CAACzB,KAAK,CAAC;MAExCV,MAAM,CAACc,KAAK,CAAE,YAAW,IAAAsB,aAAO,EAACF,OAAO,EAAE;QAACG,MAAM,EAAE,IAAI;QAAEC,cAAc,EAAE,CAAC;QAAEC,KAAK,EAAE;MAAC,CAAC,CAAE,EAAC,CAAC;MACzF;MACAvC,MAAM,CAAC+B,KAAK,CAAE,0BAAyBrB,KAAM,IAAGE,QAAQ,GAAG,YAAY,GAAG,kBAAmB,EAAC,CAAC;MAE/F,IAAIsB,OAAO,EAAE;QACX,IAAItB,QAAQ,EAAE;UACZ,MAAMiB,OAAO,GAAGC,aAAa,CAACI,OAAO,CAAC;UACtC,MAAMD,OAAO,GAAGxB,iBAAiB,CAAC,CAACyB,OAAO,CAAC,CAAC;UAC5C,OAAO;YAACL,OAAO;YAAEI,OAAO;YAAEN,QAAQ,EAAE,CAACO,OAAO;UAAC,CAAC;QAChD;QAEA,OAAOA,OAAO;MAChB;MAEA,OAAO,KAAK;IACd,CAAC,CAAC,OAAOT,KAAK,EAAE;MACd,IAAAC,eAAQ,EAACD,KAAK,CAAC;IACjB;EACF;EAEA,SAASpB,WAAW,CAACsB,QAAQ,EAAE;IAC7BA,QAAQ,CAACa,OAAO,CAACN,OAAO,IAAI;MAC1BlC,MAAM,CAACc,KAAK,CAAE,eAAcoB,OAAO,CAACO,UAAU,CAACC,aAAc,EAAC,CAAC;MAC/D5C,OAAO,CAAC6C,GAAG,CAACT,OAAO,CAAC;IACtB,CAAC,CAAC;EACJ;EAEA,SAAS5B,YAAY,CAACqB,QAAQ,EAAE;IAC9BA,QAAQ,CAACa,OAAO,CAACN,OAAO,IAAI;MAC1BlC,MAAM,CAACc,KAAK,CAAE,gBAAeoB,OAAO,CAACO,UAAU,CAACC,aAAc,EAAC,CAAC;MAChE5C,OAAO,CAAC8C,IAAI,CAACV,OAAO,CAAC;IACvB,CAAC,CAAC;EACJ;EAEA,eAAe3B,WAAW,CAAC;IAACG,KAAK;IAAEgC,aAAa;IAAEb,OAAO;IAAEgB;EAAI,CAAC,EAAE;IAChE,IAAI;MACF7C,MAAM,CAACc,KAAK,CAAE,SAAQJ,KAAM,EAAC,CAAC;MAC9BV,MAAM,CAACc,KAAK,CAAE,iBAAgB4B,aAAc,EAAC,CAAC;MAC9C1C,MAAM,CAACc,KAAK,CAAE,QAAOgC,IAAI,CAACC,SAAS,CAACF,IAAI,CAAE,EAAC,CAAC;MAC5C7C,MAAM,CAACc,KAAK,CAAE,WAAUgC,IAAI,CAACC,SAAS,CAAClB,OAAO,CAAE,EAAC,CAAC;MAElDd,mBAAmB,CAACL,KAAK,CAAC;MAC1B,MAAMZ,OAAO,CAACmB,WAAW,CAACP,KAAK,EAAE;QAACQ,OAAO,EAAE;MAAI,CAAC,CAAC;MAEjDpB,OAAO,CAACS,WAAW,CACjBG,KAAK,EACLsC,MAAM,CAACC,IAAI,CAACH,IAAI,CAACC,SAAS,CAAC;QAACF;MAAI,CAAC,CAAC,CAAC,EACnC;QACEH,aAAa;QACbQ,UAAU,EAAE,IAAI;QAChBrB;MACF,CAAC,CACF;MACD7B,MAAM,CAACc,KAAK,CAAE,oBAAmB4B,aAAc,cAAahC,KAAM,EAAC,CAAC;IACtE,CAAC,CAAC,OAAOe,KAAK,EAAE;MACd,IAAAC,eAAQ,EAACD,KAAK,CAAC;IACjB;EACF;EAEA,eAAejB,WAAW,CAACE,KAAK,EAAE;IAChC;IACA;IACA;IACA,MAAMyC,WAAW,GAAG,MAAMxD,UAAU,CAACI,aAAa,EAAE;IACpDC,MAAM,CAACoB,OAAO,CAAE,kBAAiBV,KAAM,GAAE,CAAC;IAC1C,MAAMyC,WAAW,CAACC,WAAW,CAAC1C,KAAK,CAAC;IACpC,IAAIyC,WAAW,EAAE;MAAE;MACjB,MAAMA,WAAW,CAACE,KAAK,EAAE;IAC3B;EACF;;EAEA;EACA;EACA;;EAEA,SAAS5C,iBAAiB,CAACkB,QAAQ,EAAE;IACnC3B,MAAM,CAAC+B,KAAK,CAAE,qBAAoBJ,QAAQ,CAACK,MAAO,cAAa,CAAC;IAEhE,OAAOL,QAAQ,CAAC2B,GAAG,CAACpB,OAAO,IAAI;MAC7B,MAAMqB,OAAO,GAAGT,IAAI,CAACU,KAAK,CAACtB,OAAO,CAACqB,OAAO,CAACE,QAAQ,EAAE,CAAC;MACtD,OAAO,IAAIC,sBAAU,CAACH,OAAO,CAACV,IAAI,CAAC;IACrC,CAAC,CAAC;EACJ;EAEA,eAAejB,OAAO,CAAClB,KAAK,EAAE;IAC5BV,MAAM,CAAC+B,KAAK,CAAE,2BAA0BrB,KAAM,EAAC,CAAC;IAChD,IAAI;MACF,MAAM;QAACW;MAAY,CAAC,GAAG,MAAMvB,OAAO,CAACI,UAAU,CAACQ,KAAK,CAAC;MACtDV,MAAM,CAACc,KAAK,CAAE,YAAWO,YAAa,sBAAqBX,KAAM,EAAC,CAAC;MACnE,MAAMiD,aAAa,GAAGtC,YAAY,IAAIuC,qBAAU,GAAGA,qBAAU,GAAGvC,YAAY;MAC5ErB,MAAM,CAACc,KAAK,CAAE,WAAU6C,aAAc,wBAAuBjD,KAAM,EAAC,CAAC;MAErE,MAAMiB,QAAQ,GAAG,MAAMkC,IAAI,CAACF,aAAa,CAAC;MAE1C3D,MAAM,CAAC+B,KAAK,CAAE,aAAYJ,QAAQ,CAACK,MAAO,kBAAiB,CAAC;MAE5D,OAAOL,QAAQ;IACjB,CAAC,CAAC,OAAOF,KAAK,EAAE;MACd,IAAAC,eAAQ,EAACD,KAAK,CAAC;IACjB;IAEA,eAAeoC,IAAI,CAACC,KAAK,EAAEC,OAAO,GAAG,EAAE,EAAEC,WAAW,GAAG,EAAE,EAAE;MACzD,IAAIF,KAAK,KAAK,CAAC,EAAE;QACf,OAAOC,OAAO;MAChB;MAEA,MAAM7B,OAAO,GAAG,MAAMpC,OAAO,CAACqC,GAAG,CAACzB,KAAK,CAAC;MACxC,MAAMuD,UAAU,GAAG;QACjBvB,aAAa,EAAER,OAAO,CAACO,UAAU,CAACC,aAAa;QAC/CwB,WAAW,EAAEhC,OAAO,CAACiC,MAAM,CAACD;MAC9B,CAAC;MACD;MACA,IAAIF,WAAW,CAACI,QAAQ,CAACH,UAAU,CAAC,EAAE;QACpC,OAAOJ,IAAI,CAACC,KAAK,GAAG,CAAC,EAAEC,OAAO,EAAEC,WAAW,CAAC;MAC9C;MAEA,OAAOH,IAAI,CAACC,KAAK,GAAG,CAAC,EAAEC,OAAO,CAACM,MAAM,CAACnC,OAAO,CAAC,EAAE8B,WAAW,CAACK,MAAM,CAACJ,UAAU,CAAC,CAAC;IACjF;EACF;EAEA,SAASnC,aAAa,CAACe,IAAI,EAAE;IAC3B,OAAOA,IAAI,CAACJ,UAAU,CAACZ,OAAO;EAChC;EAEA,SAASd,mBAAmB,CAACL,KAAK,EAAE;IAClC,IAAIA,KAAK,KAAK4D,SAAS,IAAI5D,KAAK,KAAK,EAAE,IAAIA,KAAK,KAAK,IAAI,EAAE;MACzD,MAAM,IAAIY,qBAAQ,CAACC,mBAAU,CAACgD,qBAAqB,EAAG,kBAAiB,CAAC;IAC1E;EACF;AACF"}
package/dist/constants.js CHANGED
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.QUEUE_ITEM_STATE = exports.OPERATIONS = exports.LOG_ITEM_TYPE = exports.IMPORT_JOB_STATE = exports.CONVERSION_FORMATS = exports.CHUNK_SIZE = void 0;
7
-
8
7
  /**
9
8
  *
10
9
  * @licstart The following is the entire license notice for the JavaScript code in this file.
@@ -32,7 +31,9 @@ exports.QUEUE_ITEM_STATE = exports.OPERATIONS = exports.LOG_ITEM_TYPE = exports.
32
31
  * for the JavaScript code in this file.
33
32
  *
34
33
  */
34
+
35
35
  // QueueItemState flows: see README.md
36
+
36
37
  const QUEUE_ITEM_STATE = {
37
38
  VALIDATOR: {
38
39
  PENDING_QUEUING: 'PENDING_QUEUING',
@@ -68,9 +69,10 @@ const OPERATIONS = {
68
69
  UPDATE: 'UPDATE'
69
70
  };
70
71
  exports.OPERATIONS = OPERATIONS;
71
- const CHUNK_SIZE = 100; // We could configure here whether a logItemType is for a several records of a single record
72
- // ie. whether is has bulkSequence or bulkSequenceStart & bulkSequenceEnd
72
+ const CHUNK_SIZE = 100;
73
73
 
74
+ // We could configure here whether a logItemType is for a several records of a single record
75
+ // ie. whether is has bulkSequence or bulkSequenceStart & bulkSequenceEnd
74
76
  exports.CHUNK_SIZE = CHUNK_SIZE;
75
77
  const LOG_ITEM_TYPE = {
76
78
  MERGE_LOG: 'MERGE_LOG',
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","names":["QUEUE_ITEM_STATE","VALIDATOR","PENDING_QUEUING","PENDING_VALIDATION","QUEUING_IN_PROGRESS","UPLOADING","VALIDATING","WAITING_FOR_RECORDS","IMPORTER","IMPORTING","IN_PROCESS","IN_QUEUE","DONE","ERROR","ABORT","IMPORT_JOB_STATE","EMPTY","QUEUING","PROCESSING","OPERATIONS","CREATE","UPDATE","CHUNK_SIZE","LOG_ITEM_TYPE","MERGE_LOG","MATCH_LOG","SPLITTER_LOG","CONVERSION_FORMATS","MARCXML","ISO2709","JSON","ALEPHSEQ"],"sources":["../src/constants.js"],"sourcesContent":["/**\n*\n* @licstart The following is the entire license notice for the JavaScript code in this file.\n*\n* Shared modules for microservices of Melinda rest api batch import system\n*\n* Copyright (C) 2020-2022 University Of Helsinki (The National Library Of Finland)\n*\n* This file is part of melinda-rest-api-commons\n*\n* melinda-rest-api-commons program is free software: you can redistribute it and/or modify\n* it under the terms of the GNU Affero General Public License as\n* published by the Free Software Foundation, either version 3 of the\n* License, or (at your option) any later version.\n*\n* melinda-rest-api-commons is distributed in the hope that it will be useful,\n* but WITHOUT ANY WARRANTY; without even the implied warranty of\n* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n* GNU Affero General Public License for more details.\n*\n* You should have received a copy of the GNU Affero General Public License\n* along with this program. If not, see <http://www.gnu.org/licenses/>.\n*\n* @licend The above is the entire license notice\n* for the JavaScript code in this file.\n*\n*/\n\n// QueueItemState flows: see README.md\n\nexport const QUEUE_ITEM_STATE = {\n VALIDATOR: {\n PENDING_QUEUING: 'PENDING_QUEUING',\n PENDING_VALIDATION: 'PENDING_VALIDATION',\n QUEUING_IN_PROGRESS: 'QUEUING_IN_PROGRESS',\n UPLOADING: 'UPLOADING',\n VALIDATING: 'VALIDATING',\n WAITING_FOR_RECORDS: 'WAITING_FOR_RECORDS'\n },\n IMPORTER: {\n IMPORTING: 'IMPORTING',\n IN_PROCESS: 'IN_PROCESS',\n IN_QUEUE: 'IN_QUEUE'\n },\n DONE: 'DONE',\n ERROR: 'ERROR',\n ABORT: 'ABORT'\n};\n\nexport const IMPORT_JOB_STATE = {\n EMPTY: 'EMPTY',\n QUEUING: 'QUEUING',\n IN_QUEUE: 'IN_QUEUE',\n IMPORTING: 'IMPORTING',\n PROCESSING: 'PROCESSING',\n DONE: 'DONE',\n ERROR: 'ERROR',\n ABORT: 'ABORT'\n};\n\nexport const OPERATIONS = {\n CREATE: 'CREATE',\n UPDATE: 'UPDATE'\n};\n\nexport const CHUNK_SIZE = 100;\n\n// We could configure here whether a logItemType is for a several records of a single record\n// ie. whether is has bulkSequence or bulkSequenceStart & bulkSequenceEnd\nexport const LOG_ITEM_TYPE = {\n MERGE_LOG: 'MERGE_LOG',\n MATCH_LOG: 'MATCH_LOG',\n SPLITTER_LOG: 'SPLITTER_LOG'\n};\n\nexport const CONVERSION_FORMATS = {\n MARCXML: 'MARCXML',\n ISO2709: 'ISO2709',\n JSON: 'JSON',\n ALEPHSEQ: 'ALEPHSEQ'\n};\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEO,MAAMA,gBAAgB,GAAG;EAC9BC,SAAS,EAAE;IACTC,eAAe,EAAE,iBADR;IAETC,kBAAkB,EAAE,oBAFX;IAGTC,mBAAmB,EAAE,qBAHZ;IAITC,SAAS,EAAE,WAJF;IAKTC,UAAU,EAAE,YALH;IAMTC,mBAAmB,EAAE;EANZ,CADmB;EAS9BC,QAAQ,EAAE;IACRC,SAAS,EAAE,WADH;IAERC,UAAU,EAAE,YAFJ;IAGRC,QAAQ,EAAE;EAHF,CAToB;EAc9BC,IAAI,EAAE,MAdwB;EAe9BC,KAAK,EAAE,OAfuB;EAgB9BC,KAAK,EAAE;AAhBuB,CAAzB;;AAmBA,MAAMC,gBAAgB,GAAG;EAC9BC,KAAK,EAAE,OADuB;EAE9BC,OAAO,EAAE,SAFqB;EAG9BN,QAAQ,EAAE,UAHoB;EAI9BF,SAAS,EAAE,WAJmB;EAK9BS,UAAU,EAAE,YALkB;EAM9BN,IAAI,EAAE,MANwB;EAO9BC,KAAK,EAAE,OAPuB;EAQ9BC,KAAK,EAAE;AARuB,CAAzB;;AAWA,MAAMK,UAAU,GAAG;EACxBC,MAAM,EAAE,QADgB;EAExBC,MAAM,EAAE;AAFgB,CAAnB;;AAKA,MAAMC,UAAU,GAAG,GAAnB,C,CAEP;AACA;;;AACO,MAAMC,aAAa,GAAG;EAC3BC,SAAS,EAAE,WADgB;EAE3BC,SAAS,EAAE,WAFgB;EAG3BC,YAAY,EAAE;AAHa,CAAtB;;AAMA,MAAMC,kBAAkB,GAAG;EAChCC,OAAO,EAAE,SADuB;EAEhCC,OAAO,EAAE,SAFuB;EAGhCC,IAAI,EAAE,MAH0B;EAIhCC,QAAQ,EAAE;AAJsB,CAA3B"}
1
+ {"version":3,"file":"constants.js","names":["QUEUE_ITEM_STATE","VALIDATOR","PENDING_QUEUING","PENDING_VALIDATION","QUEUING_IN_PROGRESS","UPLOADING","VALIDATING","WAITING_FOR_RECORDS","IMPORTER","IMPORTING","IN_PROCESS","IN_QUEUE","DONE","ERROR","ABORT","IMPORT_JOB_STATE","EMPTY","QUEUING","PROCESSING","OPERATIONS","CREATE","UPDATE","CHUNK_SIZE","LOG_ITEM_TYPE","MERGE_LOG","MATCH_LOG","SPLITTER_LOG","CONVERSION_FORMATS","MARCXML","ISO2709","JSON","ALEPHSEQ"],"sources":["../src/constants.js"],"sourcesContent":["/**\n*\n* @licstart The following is the entire license notice for the JavaScript code in this file.\n*\n* Shared modules for microservices of Melinda rest api batch import system\n*\n* Copyright (C) 2020-2022 University Of Helsinki (The National Library Of Finland)\n*\n* This file is part of melinda-rest-api-commons\n*\n* melinda-rest-api-commons program is free software: you can redistribute it and/or modify\n* it under the terms of the GNU Affero General Public License as\n* published by the Free Software Foundation, either version 3 of the\n* License, or (at your option) any later version.\n*\n* melinda-rest-api-commons is distributed in the hope that it will be useful,\n* but WITHOUT ANY WARRANTY; without even the implied warranty of\n* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n* GNU Affero General Public License for more details.\n*\n* You should have received a copy of the GNU Affero General Public License\n* along with this program. If not, see <http://www.gnu.org/licenses/>.\n*\n* @licend The above is the entire license notice\n* for the JavaScript code in this file.\n*\n*/\n\n// QueueItemState flows: see README.md\n\nexport const QUEUE_ITEM_STATE = {\n VALIDATOR: {\n PENDING_QUEUING: 'PENDING_QUEUING',\n PENDING_VALIDATION: 'PENDING_VALIDATION',\n QUEUING_IN_PROGRESS: 'QUEUING_IN_PROGRESS',\n UPLOADING: 'UPLOADING',\n VALIDATING: 'VALIDATING',\n WAITING_FOR_RECORDS: 'WAITING_FOR_RECORDS'\n },\n IMPORTER: {\n IMPORTING: 'IMPORTING',\n IN_PROCESS: 'IN_PROCESS',\n IN_QUEUE: 'IN_QUEUE'\n },\n DONE: 'DONE',\n ERROR: 'ERROR',\n ABORT: 'ABORT'\n};\n\nexport const IMPORT_JOB_STATE = {\n EMPTY: 'EMPTY',\n QUEUING: 'QUEUING',\n IN_QUEUE: 'IN_QUEUE',\n IMPORTING: 'IMPORTING',\n PROCESSING: 'PROCESSING',\n DONE: 'DONE',\n ERROR: 'ERROR',\n ABORT: 'ABORT'\n};\n\nexport const OPERATIONS = {\n CREATE: 'CREATE',\n UPDATE: 'UPDATE'\n};\n\nexport const CHUNK_SIZE = 100;\n\n// We could configure here whether a logItemType is for a several records of a single record\n// ie. whether is has bulkSequence or bulkSequenceStart & bulkSequenceEnd\nexport const LOG_ITEM_TYPE = {\n MERGE_LOG: 'MERGE_LOG',\n MATCH_LOG: 'MATCH_LOG',\n SPLITTER_LOG: 'SPLITTER_LOG'\n};\n\nexport const CONVERSION_FORMATS = {\n MARCXML: 'MARCXML',\n ISO2709: 'ISO2709',\n JSON: 'JSON',\n ALEPHSEQ: 'ALEPHSEQ'\n};\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEO,MAAMA,gBAAgB,GAAG;EAC9BC,SAAS,EAAE;IACTC,eAAe,EAAE,iBAAiB;IAClCC,kBAAkB,EAAE,oBAAoB;IACxCC,mBAAmB,EAAE,qBAAqB;IAC1CC,SAAS,EAAE,WAAW;IACtBC,UAAU,EAAE,YAAY;IACxBC,mBAAmB,EAAE;EACvB,CAAC;EACDC,QAAQ,EAAE;IACRC,SAAS,EAAE,WAAW;IACtBC,UAAU,EAAE,YAAY;IACxBC,QAAQ,EAAE;EACZ,CAAC;EACDC,IAAI,EAAE,MAAM;EACZC,KAAK,EAAE,OAAO;EACdC,KAAK,EAAE;AACT,CAAC;AAAC;AAEK,MAAMC,gBAAgB,GAAG;EAC9BC,KAAK,EAAE,OAAO;EACdC,OAAO,EAAE,SAAS;EAClBN,QAAQ,EAAE,UAAU;EACpBF,SAAS,EAAE,WAAW;EACtBS,UAAU,EAAE,YAAY;EACxBN,IAAI,EAAE,MAAM;EACZC,KAAK,EAAE,OAAO;EACdC,KAAK,EAAE;AACT,CAAC;AAAC;AAEK,MAAMK,UAAU,GAAG;EACxBC,MAAM,EAAE,QAAQ;EAChBC,MAAM,EAAE;AACV,CAAC;AAAC;AAEK,MAAMC,UAAU,GAAG,GAAG;;AAE7B;AACA;AAAA;AACO,MAAMC,aAAa,GAAG;EAC3BC,SAAS,EAAE,WAAW;EACtBC,SAAS,EAAE,WAAW;EACtBC,YAAY,EAAE;AAChB,CAAC;AAAC;AAEK,MAAMC,kBAAkB,GAAG;EAChCC,OAAO,EAAE,SAAS;EAClBC,OAAO,EAAE,SAAS;EAClBC,IAAI,EAAE,MAAM;EACZC,QAAQ,EAAE;AACZ,CAAC;AAAC"}
@@ -4,21 +4,13 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = _default;
7
-
8
7
  var _httpStatus = _interopRequireDefault(require("http-status"));
9
-
10
8
  var _marcRecordSerializers = require("@natlibfi/marc-record-serializers");
11
-
12
9
  var _melindaBackendCommons = require("@natlibfi/melinda-backend-commons");
13
-
14
10
  var _melindaCommons = require("@natlibfi/melinda-commons");
15
-
16
11
  var _constants = require("../constants");
17
-
18
12
  var _utils = require("../utils");
19
-
20
13
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
-
22
14
  /**
23
15
  *
24
16
  * @licstart The following is the entire license notice for the JavaScript code in this file.
@@ -46,47 +38,42 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
46
38
  * for the JavaScript code in this file.
47
39
  *
48
40
  */
41
+
49
42
  function _default() {
50
43
  const logger = (0, _melindaBackendCommons.createLogger)();
51
44
  return {
52
45
  serialize,
53
46
  unserialize
54
- }; // This uses format as a number form contants CONVERSION_FORMATS
47
+ };
55
48
 
49
+ // This uses format as a number form contants CONVERSION_FORMATS
56
50
  function serialize(record, format) {
57
51
  logger.verbose(`Serializing record to ${format}`);
58
-
59
52
  try {
60
53
  if (format === _constants.CONVERSION_FORMATS.MARCXML) {
61
54
  return _marcRecordSerializers.MARCXML.to(record);
62
55
  }
63
-
64
56
  if (format === _constants.CONVERSION_FORMATS.ISO2709) {
65
57
  return _marcRecordSerializers.ISO2709.to(record);
66
58
  }
67
-
68
59
  if (format === _constants.CONVERSION_FORMATS.JSON) {
69
60
  return _marcRecordSerializers.Json.to(record);
70
61
  }
71
-
72
62
  if (format === _constants.CONVERSION_FORMATS.ALEPHSEQ) {
73
63
  return _marcRecordSerializers.AlephSequential.to(record);
74
64
  }
75
-
76
65
  throw new _melindaCommons.Error(_httpStatus.default.UNSUPPORTED_MEDIA_TYPE);
77
66
  } catch (err) {
78
67
  (0, _utils.logError)(err);
79
-
80
68
  if (err instanceof _melindaCommons.Error) {
81
69
  // eslint-disable-line functional/no-conditional-statement
82
70
  throw err;
83
71
  }
84
-
85
72
  throw new _melindaCommons.Error(_httpStatus.default.BAD_REQUEST, 'Error while serializing record');
86
73
  }
87
- } // eslint-disable-next-line max-statements
88
-
74
+ }
89
75
 
76
+ // eslint-disable-next-line max-statements
90
77
  function unserialize(data, format, validationOptions = {
91
78
  subfieldValues: false
92
79
  }) {
@@ -94,37 +81,30 @@ function _default() {
94
81
  logger.silly(`Format: ${format}`);
95
82
  logger.debug(`Validation options: ${JSON.stringify(validationOptions)}`);
96
83
  logger.silly(`Data: ${JSON.stringify(data)}`);
97
-
98
84
  try {
99
85
  if (format === _constants.CONVERSION_FORMATS.MARCXML) {
100
86
  logger.silly('Unserialize format marcxml');
101
87
  return _marcRecordSerializers.MARCXML.from(data, validationOptions);
102
88
  }
103
-
104
89
  if (format === _constants.CONVERSION_FORMATS.ISO2709) {
105
90
  logger.silly('Unserialize format iso2709');
106
91
  return _marcRecordSerializers.ISO2709.from(data, validationOptions);
107
92
  }
108
-
109
93
  if (format === _constants.CONVERSION_FORMATS.JSON) {
110
94
  logger.silly('Unserialize format json');
111
95
  return _marcRecordSerializers.Json.from(data, validationOptions);
112
96
  }
113
-
114
97
  if (format === _constants.CONVERSION_FORMATS.ALEPHSEQ) {
115
98
  logger.silly('Unserialize format aleph sequential');
116
99
  return _marcRecordSerializers.AlephSequential.from(data, validationOptions);
117
100
  }
118
-
119
101
  throw new _melindaCommons.Error(_httpStatus.default.UNSUPPORTED_MEDIA_TYPE);
120
102
  } catch (err) {
121
103
  (0, _utils.logError)(err);
122
-
123
104
  if (err instanceof _melindaCommons.Error) {
124
105
  // eslint-disable-line functional/no-conditional-statement
125
106
  throw err;
126
107
  }
127
-
128
108
  throw new _melindaCommons.Error(_httpStatus.default.BAD_REQUEST, 'Error while unserializing record');
129
109
  }
130
110
  }
@@ -1 +1 @@
1
- {"version":3,"file":"conversion.js","names":["logger","createLogger","serialize","unserialize","record","format","verbose","CONVERSION_FORMATS","MARCXML","to","ISO2709","JSON","Json","ALEPHSEQ","AlephSequential","ConversionError","httpStatus","UNSUPPORTED_MEDIA_TYPE","err","logError","BAD_REQUEST","data","validationOptions","subfieldValues","silly","debug","stringify","from"],"sources":["../../src/helpers/conversion.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 httpStatus from 'http-status';\nimport {MARCXML, ISO2709, Json, AlephSequential} from '@natlibfi/marc-record-serializers';\nimport {createLogger} from '@natlibfi/melinda-backend-commons';\nimport {Error as ConversionError} from '@natlibfi/melinda-commons';\nimport {CONVERSION_FORMATS} from '../constants';\nimport {logError} from '../utils';\n\nexport default function () {\n const logger = createLogger();\n\n return {serialize, unserialize};\n\n // This uses format as a number form contants CONVERSION_FORMATS\n function serialize(record, format) {\n logger.verbose(`Serializing record to ${format}`);\n try {\n if (format === CONVERSION_FORMATS.MARCXML) {\n return MARCXML.to(record);\n }\n\n if (format === CONVERSION_FORMATS.ISO2709) {\n return ISO2709.to(record);\n }\n\n if (format === CONVERSION_FORMATS.JSON) {\n return Json.to(record);\n }\n\n if (format === CONVERSION_FORMATS.ALEPHSEQ) {\n return AlephSequential.to(record);\n }\n\n throw new ConversionError(httpStatus.UNSUPPORTED_MEDIA_TYPE);\n } catch (err) {\n logError(err);\n if (err instanceof ConversionError) { // eslint-disable-line functional/no-conditional-statement\n throw err;\n }\n throw new ConversionError(httpStatus.BAD_REQUEST, 'Error while serializing record');\n }\n }\n\n // eslint-disable-next-line max-statements\n function unserialize(data, format, validationOptions = {subfieldValues: false}) {\n logger.verbose(`Unserializing record from ${format}`);\n logger.silly(`Format: ${format}`);\n logger.debug(`Validation options: ${JSON.stringify(validationOptions)}`);\n logger.silly(`Data: ${JSON.stringify(data)}`);\n try {\n if (format === CONVERSION_FORMATS.MARCXML) {\n logger.silly('Unserialize format marcxml');\n return MARCXML.from(data, validationOptions);\n }\n\n if (format === CONVERSION_FORMATS.ISO2709) {\n logger.silly('Unserialize format iso2709');\n return ISO2709.from(data, validationOptions);\n }\n\n if (format === CONVERSION_FORMATS.JSON) {\n logger.silly('Unserialize format json');\n return Json.from(data, validationOptions);\n }\n\n if (format === CONVERSION_FORMATS.ALEPHSEQ) {\n logger.silly('Unserialize format aleph sequential');\n return AlephSequential.from(data, validationOptions);\n }\n\n throw new ConversionError(httpStatus.UNSUPPORTED_MEDIA_TYPE);\n } catch (err) {\n logError(err);\n if (err instanceof ConversionError) { // eslint-disable-line functional/no-conditional-statement\n throw err;\n }\n throw new ConversionError(httpStatus.BAD_REQUEST, 'Error while unserializing record');\n }\n }\n}\n"],"mappings":";;;;;;;AA4BA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AASe,oBAAY;EACzB,MAAMA,MAAM,GAAG,IAAAC,mCAAA,GAAf;EAEA,OAAO;IAACC,SAAD;IAAYC;EAAZ,CAAP,CAHyB,CAKzB;;EACA,SAASD,SAAT,CAAmBE,MAAnB,EAA2BC,MAA3B,EAAmC;IACjCL,MAAM,CAACM,OAAP,CAAgB,yBAAwBD,MAAO,EAA/C;;IACA,IAAI;MACF,IAAIA,MAAM,KAAKE,6BAAA,CAAmBC,OAAlC,EAA2C;QACzC,OAAOA,8BAAA,CAAQC,EAAR,CAAWL,MAAX,CAAP;MACD;;MAED,IAAIC,MAAM,KAAKE,6BAAA,CAAmBG,OAAlC,EAA2C;QACzC,OAAOA,8BAAA,CAAQD,EAAR,CAAWL,MAAX,CAAP;MACD;;MAED,IAAIC,MAAM,KAAKE,6BAAA,CAAmBI,IAAlC,EAAwC;QACtC,OAAOC,2BAAA,CAAKH,EAAL,CAAQL,MAAR,CAAP;MACD;;MAED,IAAIC,MAAM,KAAKE,6BAAA,CAAmBM,QAAlC,EAA4C;QAC1C,OAAOC,sCAAA,CAAgBL,EAAhB,CAAmBL,MAAnB,CAAP;MACD;;MAED,MAAM,IAAIW,qBAAJ,CAAoBC,mBAAA,CAAWC,sBAA/B,CAAN;IACD,CAlBD,CAkBE,OAAOC,GAAP,EAAY;MACZ,IAAAC,eAAA,EAASD,GAAT;;MACA,IAAIA,GAAG,YAAYH,qBAAnB,EAAoC;QAAE;QACpC,MAAMG,GAAN;MACD;;MACD,MAAM,IAAIH,qBAAJ,CAAoBC,mBAAA,CAAWI,WAA/B,EAA4C,gCAA5C,CAAN;IACD;EACF,CAjCwB,CAmCzB;;;EACA,SAASjB,WAAT,CAAqBkB,IAArB,EAA2BhB,MAA3B,EAAmCiB,iBAAiB,GAAG;IAACC,cAAc,EAAE;EAAjB,CAAvD,EAAgF;IAC9EvB,MAAM,CAACM,OAAP,CAAgB,6BAA4BD,MAAO,EAAnD;IACAL,MAAM,CAACwB,KAAP,CAAc,WAAUnB,MAAO,EAA/B;IACAL,MAAM,CAACyB,KAAP,CAAc,uBAAsBd,IAAI,CAACe,SAAL,CAAeJ,iBAAf,CAAkC,EAAtE;IACAtB,MAAM,CAACwB,KAAP,CAAc,SAAQb,IAAI,CAACe,SAAL,CAAeL,IAAf,CAAqB,EAA3C;;IACA,IAAI;MACF,IAAIhB,MAAM,KAAKE,6BAAA,CAAmBC,OAAlC,EAA2C;QACzCR,MAAM,CAACwB,KAAP,CAAa,4BAAb;QACA,OAAOhB,8BAAA,CAAQmB,IAAR,CAAaN,IAAb,EAAmBC,iBAAnB,CAAP;MACD;;MAED,IAAIjB,MAAM,KAAKE,6BAAA,CAAmBG,OAAlC,EAA2C;QACzCV,MAAM,CAACwB,KAAP,CAAa,4BAAb;QACA,OAAOd,8BAAA,CAAQiB,IAAR,CAAaN,IAAb,EAAmBC,iBAAnB,CAAP;MACD;;MAED,IAAIjB,MAAM,KAAKE,6BAAA,CAAmBI,IAAlC,EAAwC;QACtCX,MAAM,CAACwB,KAAP,CAAa,yBAAb;QACA,OAAOZ,2BAAA,CAAKe,IAAL,CAAUN,IAAV,EAAgBC,iBAAhB,CAAP;MACD;;MAED,IAAIjB,MAAM,KAAKE,6BAAA,CAAmBM,QAAlC,EAA4C;QAC1Cb,MAAM,CAACwB,KAAP,CAAa,qCAAb;QACA,OAAOV,sCAAA,CAAgBa,IAAhB,CAAqBN,IAArB,EAA2BC,iBAA3B,CAAP;MACD;;MAED,MAAM,IAAIP,qBAAJ,CAAoBC,mBAAA,CAAWC,sBAA/B,CAAN;IACD,CAtBD,CAsBE,OAAOC,GAAP,EAAY;MACZ,IAAAC,eAAA,EAASD,GAAT;;MACA,IAAIA,GAAG,YAAYH,qBAAnB,EAAoC;QAAE;QACpC,MAAMG,GAAN;MACD;;MACD,MAAM,IAAIH,qBAAJ,CAAoBC,mBAAA,CAAWI,WAA/B,EAA4C,kCAA5C,CAAN;IACD;EACF;AACF"}
1
+ {"version":3,"file":"conversion.js","names":["logger","createLogger","serialize","unserialize","record","format","verbose","CONVERSION_FORMATS","MARCXML","to","ISO2709","JSON","Json","ALEPHSEQ","AlephSequential","ConversionError","httpStatus","UNSUPPORTED_MEDIA_TYPE","err","logError","BAD_REQUEST","data","validationOptions","subfieldValues","silly","debug","stringify","from"],"sources":["../../src/helpers/conversion.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 httpStatus from 'http-status';\nimport {MARCXML, ISO2709, Json, AlephSequential} from '@natlibfi/marc-record-serializers';\nimport {createLogger} from '@natlibfi/melinda-backend-commons';\nimport {Error as ConversionError} from '@natlibfi/melinda-commons';\nimport {CONVERSION_FORMATS} from '../constants';\nimport {logError} from '../utils';\n\nexport default function () {\n const logger = createLogger();\n\n return {serialize, unserialize};\n\n // This uses format as a number form contants CONVERSION_FORMATS\n function serialize(record, format) {\n logger.verbose(`Serializing record to ${format}`);\n try {\n if (format === CONVERSION_FORMATS.MARCXML) {\n return MARCXML.to(record);\n }\n\n if (format === CONVERSION_FORMATS.ISO2709) {\n return ISO2709.to(record);\n }\n\n if (format === CONVERSION_FORMATS.JSON) {\n return Json.to(record);\n }\n\n if (format === CONVERSION_FORMATS.ALEPHSEQ) {\n return AlephSequential.to(record);\n }\n\n throw new ConversionError(httpStatus.UNSUPPORTED_MEDIA_TYPE);\n } catch (err) {\n logError(err);\n if (err instanceof ConversionError) { // eslint-disable-line functional/no-conditional-statement\n throw err;\n }\n throw new ConversionError(httpStatus.BAD_REQUEST, 'Error while serializing record');\n }\n }\n\n // eslint-disable-next-line max-statements\n function unserialize(data, format, validationOptions = {subfieldValues: false}) {\n logger.verbose(`Unserializing record from ${format}`);\n logger.silly(`Format: ${format}`);\n logger.debug(`Validation options: ${JSON.stringify(validationOptions)}`);\n logger.silly(`Data: ${JSON.stringify(data)}`);\n try {\n if (format === CONVERSION_FORMATS.MARCXML) {\n logger.silly('Unserialize format marcxml');\n return MARCXML.from(data, validationOptions);\n }\n\n if (format === CONVERSION_FORMATS.ISO2709) {\n logger.silly('Unserialize format iso2709');\n return ISO2709.from(data, validationOptions);\n }\n\n if (format === CONVERSION_FORMATS.JSON) {\n logger.silly('Unserialize format json');\n return Json.from(data, validationOptions);\n }\n\n if (format === CONVERSION_FORMATS.ALEPHSEQ) {\n logger.silly('Unserialize format aleph sequential');\n return AlephSequential.from(data, validationOptions);\n }\n\n throw new ConversionError(httpStatus.UNSUPPORTED_MEDIA_TYPE);\n } catch (err) {\n logError(err);\n if (err instanceof ConversionError) { // eslint-disable-line functional/no-conditional-statement\n throw err;\n }\n throw new ConversionError(httpStatus.BAD_REQUEST, 'Error while unserializing record');\n }\n }\n}\n"],"mappings":"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"}
@@ -1,19 +1,12 @@
1
1
  "use strict";
2
2
 
3
3
  var _chai = require("chai");
4
-
5
4
  var _fixura = _interopRequireDefault(require("@natlibfi/fixura"));
6
-
7
5
  var _marcRecord = require("@natlibfi/marc-record");
8
-
9
6
  var _melindaCommons = require("@natlibfi/melinda-commons");
10
-
11
7
  var _conversion = _interopRequireDefault(require("./conversion"));
12
-
13
8
  var _constants = require("../constants");
14
-
15
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
-
17
10
  /**
18
11
  *
19
12
  * @licstart The following is the entire license notice for the JavaScript code in this file.
@@ -41,6 +34,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
41
34
  * for the JavaScript code in this file.
42
35
  *
43
36
  */
37
+
44
38
  describe('services/conversion', () => {
45
39
  const {
46
40
  getFixture
@@ -1 +1 @@
1
- {"version":3,"file":"conversion.spec.js","names":["describe","getFixture","fixtureFactory","root","__dirname","conversionService","createConversionService","marcRecord","MarcRecord","JSON","parse","components","subfieldValues","marcXml","iso2709","json","alephSeq","it","service","expect","to","be","an","and","respondTo","serialize","throw","data","CONVERSION_FORMATS","MARCXML","equal","ISO2709","ALEPHSEQ","unserialize","record","equalsTo","ConversionError"],"sources":["../../src/helpers/conversion.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-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 {expect} from 'chai';\nimport fixtureFactory from '@natlibfi/fixura';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport {Error as ConversionError} from '@natlibfi/melinda-commons';\nimport createConversionService from './conversion';\nimport {CONVERSION_FORMATS} from '../constants';\n\ndescribe('services/conversion', () => {\n const {getFixture} = fixtureFactory({root: [\n __dirname,\n '..',\n '..',\n 'test-fixtures',\n 'conversion'\n ]});\n const conversionService = createConversionService();\n\n const marcRecord = new MarcRecord(JSON.parse(getFixture({components: ['json1']})), {subfieldValues: false});\n const marcXml = getFixture({components: ['marcxml1']});\n const iso2709 = getFixture({components: ['iso2709_1']});\n const json = getFixture({components: ['json1']});\n const alephSeq = getFixture({components: ['aleph_sequential']});\n\n\n describe('factory', () => {\n it('Should create the expected object', () => {\n const service = createConversionService();\n expect(service).to.be.an('object').and\n .respondTo('serialize')\n .respondTo('unserialize');\n });\n });\n\n describe('#serialize', () => {\n it('Should throw because of unsupported format', () => {\n expect(conversionService.serialize).to.throw();\n });\n\n it('Should serialize to MARCXML', () => {\n const data = conversionService.serialize(marcRecord, CONVERSION_FORMATS.MARCXML);\n expect(data).to.equal(marcXml);\n });\n\n it('Should serialize to ISO2709', () => {\n const data = conversionService.serialize(marcRecord, CONVERSION_FORMATS.ISO2709);\n expect(data).to.equal(iso2709);\n });\n\n it('Should serialize to JSON', () => {\n const data = conversionService.serialize(marcRecord, CONVERSION_FORMATS.JSON);\n expect(data).to.equal(json);\n });\n\n it('Should serialize to aleph sequential', () => {\n const data = conversionService.serialize(marcRecord, CONVERSION_FORMATS.ALEPHSEQ);\n expect(data).to.equal(alephSeq);\n });\n\n });\n\n describe('#unserialize', () => {\n it('Should throw because of unsupported format', () => {\n expect(conversionService.unserialize).to.throw();\n });\n\n it('Should unserialize from MARCXML', async () => {\n const record = await conversionService.unserialize(marcXml, CONVERSION_FORMATS.MARCXML);\n expect(record.equalsTo(marcRecord)).to.equal(true);\n });\n\n it('Should unserialize from ISO2709', () => {\n const record = conversionService.unserialize(iso2709, CONVERSION_FORMATS.ISO2709);\n expect(record.equalsTo(marcRecord)).to.equal(true);\n });\n\n it('Should unserialize from JSON', () => {\n const record = conversionService.unserialize(json, CONVERSION_FORMATS.JSON);\n expect(record.equalsTo(marcRecord)).to.equal(true);\n });\n\n it('Should unserialize from Aleph sequential', () => {\n const record = conversionService.unserialize(alephSeq, CONVERSION_FORMATS.ALEPHSEQ);\n expect(record.equalsTo(marcRecord)).to.equal(true);\n });\n\n\n it('Should throw because the record could not be unserialized', () => {\n expect(() => {\n conversionService.unserialize('', CONVERSION_FORMATS.JSON);\n }).to.throw(ConversionError);\n });\n });\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"conversion.spec.js","names":["describe","getFixture","fixtureFactory","root","__dirname","conversionService","createConversionService","marcRecord","MarcRecord","JSON","parse","components","subfieldValues","marcXml","iso2709","json","alephSeq","it","service","expect","to","be","an","and","respondTo","serialize","throw","data","CONVERSION_FORMATS","MARCXML","equal","ISO2709","ALEPHSEQ","unserialize","record","equalsTo","ConversionError"],"sources":["../../src/helpers/conversion.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-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 {expect} from 'chai';\nimport fixtureFactory from '@natlibfi/fixura';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport {Error as ConversionError} from '@natlibfi/melinda-commons';\nimport createConversionService from './conversion';\nimport {CONVERSION_FORMATS} from '../constants';\n\ndescribe('services/conversion', () => {\n const {getFixture} = fixtureFactory({root: [\n __dirname,\n '..',\n '..',\n 'test-fixtures',\n 'conversion'\n ]});\n const conversionService = createConversionService();\n\n const marcRecord = new MarcRecord(JSON.parse(getFixture({components: ['json1']})), {subfieldValues: false});\n const marcXml = getFixture({components: ['marcxml1']});\n const iso2709 = getFixture({components: ['iso2709_1']});\n const json = getFixture({components: ['json1']});\n const alephSeq = getFixture({components: ['aleph_sequential']});\n\n\n describe('factory', () => {\n it('Should create the expected object', () => {\n const service = createConversionService();\n expect(service).to.be.an('object').and\n .respondTo('serialize')\n .respondTo('unserialize');\n });\n });\n\n describe('#serialize', () => {\n it('Should throw because of unsupported format', () => {\n expect(conversionService.serialize).to.throw();\n });\n\n it('Should serialize to MARCXML', () => {\n const data = conversionService.serialize(marcRecord, CONVERSION_FORMATS.MARCXML);\n expect(data).to.equal(marcXml);\n });\n\n it('Should serialize to ISO2709', () => {\n const data = conversionService.serialize(marcRecord, CONVERSION_FORMATS.ISO2709);\n expect(data).to.equal(iso2709);\n });\n\n it('Should serialize to JSON', () => {\n const data = conversionService.serialize(marcRecord, CONVERSION_FORMATS.JSON);\n expect(data).to.equal(json);\n });\n\n it('Should serialize to aleph sequential', () => {\n const data = conversionService.serialize(marcRecord, CONVERSION_FORMATS.ALEPHSEQ);\n expect(data).to.equal(alephSeq);\n });\n\n });\n\n describe('#unserialize', () => {\n it('Should throw because of unsupported format', () => {\n expect(conversionService.unserialize).to.throw();\n });\n\n it('Should unserialize from MARCXML', async () => {\n const record = await conversionService.unserialize(marcXml, CONVERSION_FORMATS.MARCXML);\n expect(record.equalsTo(marcRecord)).to.equal(true);\n });\n\n it('Should unserialize from ISO2709', () => {\n const record = conversionService.unserialize(iso2709, CONVERSION_FORMATS.ISO2709);\n expect(record.equalsTo(marcRecord)).to.equal(true);\n });\n\n it('Should unserialize from JSON', () => {\n const record = conversionService.unserialize(json, CONVERSION_FORMATS.JSON);\n expect(record.equalsTo(marcRecord)).to.equal(true);\n });\n\n it('Should unserialize from Aleph sequential', () => {\n const record = conversionService.unserialize(alephSeq, CONVERSION_FORMATS.ALEPHSEQ);\n expect(record.equalsTo(marcRecord)).to.equal(true);\n });\n\n\n it('Should throw because the record could not be unserialized', () => {\n expect(() => {\n conversionService.unserialize('', CONVERSION_FORMATS.JSON);\n }).to.throw(ConversionError);\n });\n });\n});\n"],"mappings":"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"}