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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/.github/workflows/melinda-node-tests.yml +9 -6
  2. package/dist/amqp.js +60 -151
  3. package/dist/amqp.js.map +7 -1
  4. package/dist/constants.js +40 -51
  5. package/dist/constants.js.map +7 -1
  6. package/dist/helpers/conversion.js +39 -57
  7. package/dist/helpers/conversion.js.map +7 -1
  8. package/dist/helpers/fix-constants.js +40 -47
  9. package/dist/helpers/fix-constants.js.map +7 -1
  10. package/dist/helpers/fix-handle-tempurns.js +23 -73
  11. package/dist/helpers/fix-handle-tempurns.js.map +7 -1
  12. package/dist/helpers/fix-strip-f884s.js +44 -94
  13. package/dist/helpers/fix-strip-f884s.js.map +7 -1
  14. package/dist/helpers/fix-utils.js +7 -22
  15. package/dist/helpers/fix-utils.js.map +7 -1
  16. package/dist/helpers/fix.js +62 -122
  17. package/dist/helpers/fix.js.map +7 -1
  18. package/dist/helpers/validation.js +12 -30
  19. package/dist/helpers/validation.js.map +7 -1
  20. package/dist/index.js +10 -109
  21. package/dist/index.js.map +7 -1
  22. package/dist/mongo.js +173 -509
  23. package/dist/mongo.js.map +7 -1
  24. package/dist/mongoLog.js +92 -317
  25. package/dist/mongoLog.js.map +7 -1
  26. package/dist/utils.js +46 -155
  27. package/dist/utils.js.map +7 -1
  28. package/eslint.config.js +53 -0
  29. package/package.json +23 -96
  30. package/tests/{amqp.health.spec.js → amqp.healthtest.js} +2 -2
  31. package/tests/{amqp.tests.spec.js → amqp.tests.localtest.js} +46 -46
  32. package/tests/helpers/{conversion.spec.js → conversion.test.js} +38 -25
  33. package/tests/helpers/{fix.spec.js → fix.test.js} +6 -6
  34. package/tests/helpers/{validation.spec.js → validation.test.js} +12 -9
  35. package/tests/{mongo-add-blob-size.spec.js → mongo-add-blob-size.test.js} +6 -6
  36. package/tests/{mongo-check-and-check-state.spec.js → mongo-check-and-check-state.test.js} +7 -7
  37. package/tests/{mongo-check-and-set-import-job-state.spec.js → mongo-check-and-set-import-job-state.test.js} +7 -7
  38. package/tests/{mongo-check-timeout.spec.js → mongo-check-timeout.test.js} +7 -7
  39. package/tests/{mongo-create-bulk.spec.js → mongo-create-bulk.test.js} +5 -5
  40. package/tests/{mongo-create-prio.spec.js → mongo-create-prio.test.js} +6 -6
  41. package/tests/{mongo-get-one.spec.js → mongo-get-one.test.js} +7 -7
  42. package/tests/{mongo-get-stream.spec.js → mongo-get-stream.test.js} +7 -7
  43. package/tests/{mongo-push-ids.spec.js → mongo-push-ids.test.js} +5 -5
  44. package/tests/{mongo-push-messages.spec.js → mongo-push-messages.test.js} +6 -6
  45. package/tests/{mongo-query-by-id.spec.js → mongo-query-by-id.test.js} +7 -7
  46. package/tests/{mongo-query.spec.js → mongo-query.test.js} +7 -7
  47. package/tests/{mongo-read-content.spec.js → mongo-read-content.test.js} +8 -8
  48. package/tests/{mongo-remove.spec.js → mongo-remove.test.js} +6 -6
  49. package/tests/{mongo-set-blob-size.spec.js → mongo-set-blob-size.test.js} +6 -6
  50. package/tests/{mongo-set-import-job-state.spec.js → mongo-set-import-job-state.test.js} +6 -6
  51. package/tests/{mongo-set-operation.spec.js → mongo-set-operation.test.js} +6 -6
  52. package/tests/{mongo-set-operations.spec.js → mongo-set-operations.test.js} +6 -6
  53. package/tests/{mongo-set-state.spec.js → mongo-set-state.test.js} +7 -7
  54. package/tests/{mongoLog.spec.js → mongoLog.test.js} +10 -11
  55. package/tests/testUtils.js +9 -8
package/dist/utils.js CHANGED
@@ -1,211 +1,102 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.addRecordResponseItem = addRecordResponseItem;
8
- exports.addRecordResponseItems = addRecordResponseItems;
9
- exports.createImportJobState = createImportJobState;
10
- exports.createRecordResponseItem = createRecordResponseItem;
11
- exports.logError = logError;
12
- var _melindaBackendCommons = require("@natlibfi/melinda-backend-commons");
13
- var _melindaCommons = require("@natlibfi/melinda-commons");
14
- var _constants = require("./constants");
15
- var _httpStatus = _interopRequireDefault(require("http-status"));
16
- const logger = (0, _melindaBackendCommons.createLogger)();
17
- function logError(err) {
18
- if (err instanceof _melindaCommons.Error) {
1
+ import httpStatus from "http-status";
2
+ import { createLogger } from "@natlibfi/melinda-backend-commons";
3
+ import { Error as ApiError } from "@natlibfi/melinda-commons";
4
+ import { IMPORT_JOB_STATE, OPERATIONS } from "./constants.js";
5
+ const logger = createLogger();
6
+ export function logError(err) {
7
+ if (err instanceof ApiError) {
19
8
  logger.error(JSON.stringify(err));
20
9
  return;
21
10
  }
22
- if (err === 'SIGINT') {
11
+ if (err === "SIGINT") {
23
12
  logger.error(err);
24
13
  return;
25
14
  }
26
- logger.error(err.stack === undefined ? err : err.stack);
15
+ logger.error(err.stack === void 0 ? err : err.stack);
27
16
  }
28
- function createImportJobState(operation, state, queryImportJobState = false) {
29
- if (!(state in _constants.IMPORT_JOB_STATE)) {
30
- throw new Error('Invalid IMPORT_JOB_STATE');
17
+ export function createImportJobState(operation, state, queryImportJobState = false) {
18
+ if (!(state in IMPORT_JOB_STATE)) {
19
+ throw new Error("Invalid IMPORT_JOB_STATE");
31
20
  }
32
- if (!(operation in _constants.OPERATIONS)) {
33
- throw new Error('Invalid operation');
21
+ if (!(operation in OPERATIONS)) {
22
+ throw new Error("Invalid operation");
34
23
  }
35
24
  if (queryImportJobState) {
36
25
  const importJobStateWithOperation = `importJobState.${operation}`;
37
- const importJobStateForQuery = {
38
- [importJobStateWithOperation]: state
39
- };
26
+ const importJobStateForQuery = { [importJobStateWithOperation]: state };
40
27
  return importJobStateForQuery;
41
28
  }
42
- return {
43
- [operation]: state
44
- };
29
+ return { [operation]: state };
45
30
  }
46
- function createRecordResponseItem({
47
- responsePayload,
48
- responseStatus,
49
- recordMetadata,
50
- id
51
- }) {
31
+ export function createRecordResponseItem({ responsePayload, responseStatus, recordMetadata, id }) {
52
32
  const recordResponseStatusAndMessage = getRecordResponseStatusAndMessage(responseStatus, responsePayload, id);
53
33
  const recordResponseItem = {
54
- databaseId: id || '000000000',
55
- recordMetadata: responsePayload.recordMetadata || recordMetadata || undefined,
34
+ databaseId: id || "000000000",
35
+ recordMetadata: responsePayload.recordMetadata || recordMetadata || void 0,
56
36
  ...recordResponseStatusAndMessage
57
37
  };
58
38
  return recordResponseItem;
59
39
  }
60
-
61
- // eslint-disable-next-line max-statements
62
40
  function getRecordResponseStatusAndMessage(responseStatus, responsePayload, id) {
63
41
  logger.debug(`Response status: ${responseStatus} responsePayload: ${JSON.stringify(responsePayload)}`);
64
- //const responseStatusName = httpStatus[`${responseStatus}_NAME`];
65
- //logger.debug(`Response status name: ${responseStatusName}`);
66
-
67
42
  const message = getMessageFromResponsePayload(responsePayload);
68
43
  const ids = responsePayload.ids || [];
69
44
  logger.debug(`Response message: ${message}`);
70
-
71
- // We map responseStatus here for a wider recordStatus and more detailed detailedRecordStatus
72
- // recordStatus corresponds to RECORD_IMPORT_STATEs used in https://github.com/NatLibFi/melinda-record-import-commons-js
73
-
74
- // Non-http statuses
75
- if (['UPDATED', 'CREATED', 'INVALID', 'ERROR', 'SKIPPED', 'FIXED'].includes(responseStatus)) {
76
- return {
77
- recordStatus: responseStatus,
78
- detailedRecordStatus: responseStatus,
79
- message
80
- };
45
+ if (["UPDATED", "CREATED", "INVALID", "ERROR", "SKIPPED", "FIXED"].includes(responseStatus)) {
46
+ return { recordStatus: responseStatus, detailedRecordStatus: responseStatus, message };
81
47
  }
82
-
83
- // More detailed SKIPPED statuses
84
- if (['SKIPPED_CHANGE', 'SKIPPED_UPDATE'].includes(responseStatus)) {
85
- return {
86
- recordStatus: 'SKIPPED',
87
- detailedRecordStatus: responseStatus,
88
- message
89
- };
48
+ if (["SKIPPED_CHANGE", "SKIPPED_UPDATE"].includes(responseStatus)) {
49
+ return { recordStatus: "SKIPPED", detailedRecordStatus: responseStatus, message };
90
50
  }
91
- if (['UNKNOWN'].includes(responseStatus)) {
92
- return {
93
- recordStatus: 'ERROR',
94
- detailedRecordStatus: responseStatus,
95
- message,
96
- ids
97
- };
51
+ if (["UNKNOWN"].includes(responseStatus)) {
52
+ return { recordStatus: "ERROR", detailedRecordStatus: responseStatus, message, ids };
98
53
  }
99
-
100
- // Duplicates and other CONFLICT statuses
101
- if ([_httpStatus.default.CONFLICT, 'CONFLICT'].includes(responseStatus)) {
54
+ if ([httpStatus.CONFLICT, "CONFLICT"].includes(responseStatus)) {
102
55
  if (/^Duplicates in database/u.test(message)) {
103
- return {
104
- recordStatus: 'DUPLICATE',
105
- detailedRecordStatus: 'DUPLICATE',
106
- message,
107
- ids
108
- };
56
+ return { recordStatus: "DUPLICATE", detailedRecordStatus: "DUPLICATE", message, ids };
109
57
  }
110
58
  if (/^MatchValidation for all/u.test(message)) {
111
- return {
112
- recordStatus: 'ERROR',
113
- detailedRecordStatus: 'CONFLICT',
114
- message,
115
- ids
116
- };
59
+ return { recordStatus: "ERROR", detailedRecordStatus: "CONFLICT", message, ids };
117
60
  }
118
-
119
- // Use ids only if there are more than one id or the id in payload does not match databaseId
120
61
  if (ids.length > 1 || ids[0] !== id) {
121
- return {
122
- recordStatus: 'ERROR',
123
- detailedRecordStatus: 'CONFLICT',
124
- message,
125
- ids
126
- };
62
+ return { recordStatus: "ERROR", detailedRecordStatus: "CONFLICT", message, ids };
127
63
  }
128
- return {
129
- recordStatus: 'ERROR',
130
- detailedRecordStatus: 'CONFLICT',
131
- message
132
- };
64
+ return { recordStatus: "ERROR", detailedRecordStatus: "CONFLICT", message };
133
65
  }
134
- if ([_httpStatus.default.UNPROCESSABLE_ENTITY, 'UNPROCESSABLE_ENTITY'].includes(responseStatus)) {
66
+ if ([httpStatus.UNPROCESSABLE_ENTITY, "UNPROCESSABLE_ENTITY"].includes(responseStatus)) {
135
67
  if (ids.length > 1 || ids[0] !== id) {
136
- return {
137
- recordStatus: 'INVALID',
138
- detailedRecordStatus: 'UNPROCESSABLE_ENTITY',
139
- message,
140
- ids
141
- };
68
+ return { recordStatus: "INVALID", detailedRecordStatus: "UNPROCESSABLE_ENTITY", message, ids };
142
69
  }
143
- return {
144
- recordStatus: 'INVALID',
145
- detailedRecordStatus: 'UNPROCESSABLE_ENTITY',
146
- message
147
- };
70
+ return { recordStatus: "INVALID", detailedRecordStatus: "UNPROCESSABLE_ENTITY", message };
148
71
  }
149
- if ([_httpStatus.default.NOT_FOUND, 'NOT_FOUND'].includes(responseStatus)) {
150
- return {
151
- recordStatus: 'ERROR',
152
- detailedRecordStatus: 'NOT_FOUND',
153
- message
154
- };
72
+ if ([httpStatus.NOT_FOUND, "NOT_FOUND"].includes(responseStatus)) {
73
+ return { recordStatus: "ERROR", detailedRecordStatus: "NOT_FOUND", message };
155
74
  }
156
- if ([_httpStatus.default.FORBIDDEN, 'FORBIDDEN'].includes(responseStatus)) {
157
- return {
158
- recordStatus: 'ERROR',
159
- detailedRecordStatus: 'FORBIDDEN',
160
- message
161
- };
75
+ if ([httpStatus.FORBIDDEN, "FORBIDDEN"].includes(responseStatus)) {
76
+ return { recordStatus: "ERROR", detailedRecordStatus: "FORBIDDEN", message };
162
77
  }
163
-
164
- // Otherwise
165
78
  logger.debug(`Unknown responseStatus: ${responseStatus}`);
166
79
  const newMessage = `${message} - Unknown recordStatus: ${responseStatus}`;
167
- return {
168
- recordStatus: 'ERROR',
169
- detailedRecordStatus: responseStatus,
170
- message: newMessage
171
- };
80
+ return { recordStatus: "ERROR", detailedRecordStatus: responseStatus, message: newMessage };
172
81
  }
173
82
  function getMessageFromResponsePayload(responsePayload) {
174
83
  if (responsePayload.message) {
175
84
  return responsePayload.message;
176
85
  }
177
- if (typeof responsePayload === 'string' || responsePayload instanceof String) {
86
+ if (typeof responsePayload === "string" || responsePayload instanceof String) {
178
87
  return responsePayload;
179
88
  }
180
- return '';
89
+ return "";
181
90
  }
182
- async function addRecordResponseItem({
183
- recordResponseItem,
184
- correlationId,
185
- mongoOperator
186
- }) {
187
- await mongoOperator.pushMessages({
188
- correlationId,
189
- messages: [recordResponseItem],
190
- messageField: 'records'
191
- });
91
+ export async function addRecordResponseItem({ recordResponseItem, correlationId, mongoOperator }) {
92
+ await mongoOperator.pushMessages({ correlationId, messages: [recordResponseItem], messageField: "records" });
192
93
  return true;
193
94
  }
194
-
195
- // Use addRecordResponseItems to add several recordResponseItems in one mongo operation to avoid writeconflicts
196
- async function addRecordResponseItems({
197
- recordResponseItems,
198
- correlationId,
199
- mongoOperator
200
- }) {
95
+ export async function addRecordResponseItems({ recordResponseItems, correlationId, mongoOperator }) {
201
96
  if (!Array.isArray(recordResponseItems)) {
202
- throw new Error('RecordResponseItems is not an array!');
97
+ throw new Error("RecordResponseItems is not an array!");
203
98
  }
204
- await mongoOperator.pushMessages({
205
- correlationId,
206
- messages: recordResponseItems,
207
- messageField: 'records'
208
- });
99
+ await mongoOperator.pushMessages({ correlationId, messages: recordResponseItems, messageField: "records" });
209
100
  return true;
210
101
  }
211
- //# sourceMappingURL=utils.js.map
102
+ //# sourceMappingURL=utils.js.map
package/dist/utils.js.map CHANGED
@@ -1 +1,7 @@
1
- {"version":3,"file":"utils.js","names":["_melindaBackendCommons","require","_melindaCommons","_constants","_httpStatus","_interopRequireDefault","logger","createLogger","logError","err","ApiError","error","JSON","stringify","stack","undefined","createImportJobState","operation","state","queryImportJobState","IMPORT_JOB_STATE","Error","OPERATIONS","importJobStateWithOperation","importJobStateForQuery","createRecordResponseItem","responsePayload","responseStatus","recordMetadata","id","recordResponseStatusAndMessage","getRecordResponseStatusAndMessage","recordResponseItem","databaseId","debug","message","getMessageFromResponsePayload","ids","includes","recordStatus","detailedRecordStatus","httpStatus","CONFLICT","test","length","UNPROCESSABLE_ENTITY","NOT_FOUND","FORBIDDEN","newMessage","String","addRecordResponseItem","correlationId","mongoOperator","pushMessages","messages","messageField","addRecordResponseItems","recordResponseItems","Array","isArray"],"sources":["../src/utils.js"],"sourcesContent":["import {createLogger} from '@natlibfi/melinda-backend-commons';\nimport {Error as ApiError} from '@natlibfi/melinda-commons';\nimport {IMPORT_JOB_STATE, OPERATIONS} from './constants';\nimport httpStatus from 'http-status';\n\nconst logger = createLogger();\n\nexport function logError(err) {\n if (err instanceof ApiError) {\n logger.error(JSON.stringify(err));\n return;\n }\n\n if (err === 'SIGINT') {\n logger.error(err);\n return;\n }\n\n logger.error(err.stack === undefined ? err : err.stack);\n}\n\nexport function createImportJobState(operation, state, queryImportJobState = false) {\n if (!(state in IMPORT_JOB_STATE)) {\n throw new Error('Invalid IMPORT_JOB_STATE');\n }\n\n if (!(operation in OPERATIONS)) {\n throw new Error('Invalid operation');\n }\n\n if (queryImportJobState) {\n const importJobStateWithOperation = `importJobState.${operation}`;\n const importJobStateForQuery = {[importJobStateWithOperation]: state};\n\n return importJobStateForQuery;\n }\n\n return {[operation]: state};\n}\n\nexport function createRecordResponseItem({responsePayload, responseStatus, recordMetadata, id}) {\n const recordResponseStatusAndMessage = getRecordResponseStatusAndMessage(responseStatus, responsePayload, id);\n const recordResponseItem = {\n databaseId: id || '000000000',\n recordMetadata: responsePayload.recordMetadata || recordMetadata || undefined,\n ...recordResponseStatusAndMessage\n };\n return recordResponseItem;\n}\n\n// eslint-disable-next-line max-statements\nfunction getRecordResponseStatusAndMessage(responseStatus, responsePayload, id) {\n\n logger.debug(`Response status: ${responseStatus} responsePayload: ${JSON.stringify(responsePayload)}`);\n //const responseStatusName = httpStatus[`${responseStatus}_NAME`];\n //logger.debug(`Response status name: ${responseStatusName}`);\n\n const message = getMessageFromResponsePayload(responsePayload);\n const ids = responsePayload.ids || [];\n\n logger.debug(`Response message: ${message}`);\n\n // We map responseStatus here for a wider recordStatus and more detailed detailedRecordStatus\n // recordStatus corresponds to RECORD_IMPORT_STATEs used in https://github.com/NatLibFi/melinda-record-import-commons-js\n\n // Non-http statuses\n if (['UPDATED', 'CREATED', 'INVALID', 'ERROR', 'SKIPPED', 'FIXED'].includes(responseStatus)) {\n return {recordStatus: responseStatus, detailedRecordStatus: responseStatus, message};\n }\n\n // More detailed SKIPPED statuses\n if (['SKIPPED_CHANGE', 'SKIPPED_UPDATE'].includes(responseStatus)) {\n return {recordStatus: 'SKIPPED', detailedRecordStatus: responseStatus, message};\n }\n\n if (['UNKNOWN'].includes(responseStatus)) {\n return {recordStatus: 'ERROR', detailedRecordStatus: responseStatus, message, ids};\n }\n\n // Duplicates and other CONFLICT statuses\n if ([httpStatus.CONFLICT, 'CONFLICT'].includes(responseStatus)) {\n if ((/^Duplicates in database/u).test(message)) {\n return {recordStatus: 'DUPLICATE', detailedRecordStatus: 'DUPLICATE', message, ids};\n }\n if ((/^MatchValidation for all/u).test(message)) {\n return {recordStatus: 'ERROR', detailedRecordStatus: 'CONFLICT', message, ids};\n }\n\n // Use ids only if there are more than one id or the id in payload does not match databaseId\n if (ids.length > 1 || ids[0] !== id) {\n return {recordStatus: 'ERROR', detailedRecordStatus: 'CONFLICT', message, ids};\n }\n return {recordStatus: 'ERROR', detailedRecordStatus: 'CONFLICT', message};\n }\n\n if ([httpStatus.UNPROCESSABLE_ENTITY, 'UNPROCESSABLE_ENTITY'].includes(responseStatus)) {\n if (ids.length > 1 || ids[0] !== id) {\n return {recordStatus: 'INVALID', detailedRecordStatus: 'UNPROCESSABLE_ENTITY', message, ids};\n }\n return {recordStatus: 'INVALID', detailedRecordStatus: 'UNPROCESSABLE_ENTITY', message};\n }\n\n if ([httpStatus.NOT_FOUND, 'NOT_FOUND'].includes(responseStatus)) {\n return {recordStatus: 'ERROR', detailedRecordStatus: 'NOT_FOUND', message};\n }\n\n if ([httpStatus.FORBIDDEN, 'FORBIDDEN'].includes(responseStatus)) {\n return {recordStatus: 'ERROR', detailedRecordStatus: 'FORBIDDEN', message};\n }\n\n // Otherwise\n logger.debug(`Unknown responseStatus: ${responseStatus}`);\n const newMessage = `${message} - Unknown recordStatus: ${responseStatus}`;\n return {recordStatus: 'ERROR', detailedRecordStatus: responseStatus, message: newMessage};\n}\n\nfunction getMessageFromResponsePayload(responsePayload) {\n if (responsePayload.message) {\n return responsePayload.message;\n }\n if (typeof responsePayload === 'string' || responsePayload instanceof String) {\n return responsePayload;\n }\n return '';\n}\n\nexport async function addRecordResponseItem({recordResponseItem, correlationId, mongoOperator}) {\n await mongoOperator.pushMessages({correlationId, messages: [recordResponseItem], messageField: 'records'});\n return true;\n}\n\n// Use addRecordResponseItems to add several recordResponseItems in one mongo operation to avoid writeconflicts\nexport async function addRecordResponseItems({recordResponseItems, correlationId, mongoOperator}) {\n if (!Array.isArray(recordResponseItems)) {\n throw new Error('RecordResponseItems is not an array!');\n }\n await mongoOperator.pushMessages({correlationId, messages: recordResponseItems, messageField: 'records'});\n return true;\n}\n\n"],"mappings":"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","ignoreList":[]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/utils.js"],
4
+ "sourcesContent": ["import httpStatus from 'http-status';\nimport {createLogger} from '@natlibfi/melinda-backend-commons';\nimport {Error as ApiError} from '@natlibfi/melinda-commons';\nimport {IMPORT_JOB_STATE, OPERATIONS} from './constants.js';\n\nconst logger = createLogger();\n\nexport function logError(err) {\n if (err instanceof ApiError) {\n logger.error(JSON.stringify(err));\n return;\n }\n\n if (err === 'SIGINT') {\n logger.error(err);\n return;\n }\n\n logger.error(err.stack === undefined ? err : err.stack);\n}\n\nexport function createImportJobState(operation, state, queryImportJobState = false) {\n if (!(state in IMPORT_JOB_STATE)) {\n throw new Error('Invalid IMPORT_JOB_STATE');\n }\n\n if (!(operation in OPERATIONS)) {\n throw new Error('Invalid operation');\n }\n\n if (queryImportJobState) {\n const importJobStateWithOperation = `importJobState.${operation}`;\n const importJobStateForQuery = {[importJobStateWithOperation]: state};\n\n return importJobStateForQuery;\n }\n\n return {[operation]: state};\n}\n\nexport function createRecordResponseItem({responsePayload, responseStatus, recordMetadata, id}) {\n const recordResponseStatusAndMessage = getRecordResponseStatusAndMessage(responseStatus, responsePayload, id);\n const recordResponseItem = {\n databaseId: id || '000000000',\n recordMetadata: responsePayload.recordMetadata || recordMetadata || undefined,\n ...recordResponseStatusAndMessage\n };\n return recordResponseItem;\n}\n\n// eslint-disable-next-line max-statements\nfunction getRecordResponseStatusAndMessage(responseStatus, responsePayload, id) {\n\n logger.debug(`Response status: ${responseStatus} responsePayload: ${JSON.stringify(responsePayload)}`);\n //const responseStatusName = httpStatus[`${responseStatus}_NAME`];\n //logger.debug(`Response status name: ${responseStatusName}`);\n\n const message = getMessageFromResponsePayload(responsePayload);\n const ids = responsePayload.ids || [];\n\n logger.debug(`Response message: ${message}`);\n\n // We map responseStatus here for a wider recordStatus and more detailed detailedRecordStatus\n // recordStatus corresponds to RECORD_IMPORT_STATEs used in https://github.com/NatLibFi/melinda-record-import-commons-js\n\n // Non-http statuses\n if (['UPDATED', 'CREATED', 'INVALID', 'ERROR', 'SKIPPED', 'FIXED'].includes(responseStatus)) {\n return {recordStatus: responseStatus, detailedRecordStatus: responseStatus, message};\n }\n\n // More detailed SKIPPED statuses\n if (['SKIPPED_CHANGE', 'SKIPPED_UPDATE'].includes(responseStatus)) {\n return {recordStatus: 'SKIPPED', detailedRecordStatus: responseStatus, message};\n }\n\n if (['UNKNOWN'].includes(responseStatus)) {\n return {recordStatus: 'ERROR', detailedRecordStatus: responseStatus, message, ids};\n }\n\n // Duplicates and other CONFLICT statuses\n if ([httpStatus.CONFLICT, 'CONFLICT'].includes(responseStatus)) {\n if ((/^Duplicates in database/u).test(message)) {\n return {recordStatus: 'DUPLICATE', detailedRecordStatus: 'DUPLICATE', message, ids};\n }\n if ((/^MatchValidation for all/u).test(message)) {\n return {recordStatus: 'ERROR', detailedRecordStatus: 'CONFLICT', message, ids};\n }\n\n // Use ids only if there are more than one id or the id in payload does not match databaseId\n if (ids.length > 1 || ids[0] !== id) {\n return {recordStatus: 'ERROR', detailedRecordStatus: 'CONFLICT', message, ids};\n }\n return {recordStatus: 'ERROR', detailedRecordStatus: 'CONFLICT', message};\n }\n\n if ([httpStatus.UNPROCESSABLE_ENTITY, 'UNPROCESSABLE_ENTITY'].includes(responseStatus)) {\n if (ids.length > 1 || ids[0] !== id) {\n return {recordStatus: 'INVALID', detailedRecordStatus: 'UNPROCESSABLE_ENTITY', message, ids};\n }\n return {recordStatus: 'INVALID', detailedRecordStatus: 'UNPROCESSABLE_ENTITY', message};\n }\n\n if ([httpStatus.NOT_FOUND, 'NOT_FOUND'].includes(responseStatus)) {\n return {recordStatus: 'ERROR', detailedRecordStatus: 'NOT_FOUND', message};\n }\n\n if ([httpStatus.FORBIDDEN, 'FORBIDDEN'].includes(responseStatus)) {\n return {recordStatus: 'ERROR', detailedRecordStatus: 'FORBIDDEN', message};\n }\n\n // Otherwise\n logger.debug(`Unknown responseStatus: ${responseStatus}`);\n const newMessage = `${message} - Unknown recordStatus: ${responseStatus}`;\n return {recordStatus: 'ERROR', detailedRecordStatus: responseStatus, message: newMessage};\n}\n\nfunction getMessageFromResponsePayload(responsePayload) {\n if (responsePayload.message) {\n return responsePayload.message;\n }\n if (typeof responsePayload === 'string' || responsePayload instanceof String) {\n return responsePayload;\n }\n return '';\n}\n\nexport async function addRecordResponseItem({recordResponseItem, correlationId, mongoOperator}) {\n await mongoOperator.pushMessages({correlationId, messages: [recordResponseItem], messageField: 'records'});\n return true;\n}\n\n// Use addRecordResponseItems to add several recordResponseItems in one mongo operation to avoid writeconflicts\nexport async function addRecordResponseItems({recordResponseItems, correlationId, mongoOperator}) {\n if (!Array.isArray(recordResponseItems)) {\n throw new Error('RecordResponseItems is not an array!');\n }\n await mongoOperator.pushMessages({correlationId, messages: recordResponseItems, messageField: 'records'});\n return true;\n}\n\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,53 @@
1
+ // Eslint configuration object for src
2
+ const configSrc = {
3
+ files: [
4
+ "src/*",
5
+ "tests/*"
6
+ ],
7
+ linterOptions: {
8
+ reportUnusedDisableDirectives: true,
9
+ },
10
+ rules: {
11
+ "no-console": "warn",
12
+ "eqeqeq": ["error", "always"],
13
+ "no-const-assign": "error",
14
+ "max-depth": ["warn", 4],
15
+ "max-lines": ["warn", 500],
16
+ "max-lines-per-function": ["warn", {"max": 100}],
17
+ "no-else-return": ["error", {allowElseIf: false}],
18
+ "no-plusplus": [
19
+ "error",
20
+ {
21
+ "allowForLoopAfterthoughts": true
22
+ }
23
+ ],
24
+ "array-callback-return": [
25
+ "error",
26
+ {
27
+ "checkForEach": false
28
+ }
29
+ ],
30
+ "no-unused-vars": [
31
+ "error",
32
+ {
33
+ "argsIgnorePattern": "next"
34
+ }
35
+ ],
36
+ "no-warning-comments": "off"
37
+ }
38
+ };
39
+
40
+ // Eslint configuration object for globally ignoring .js files
41
+ // - ignore all files that start with a dot
42
+ // - ignore all files inside directories named 'dist'
43
+ const configIgnores = {
44
+ ignores: [
45
+ "**/.*",
46
+ "**/dist/"
47
+ ]
48
+ };
49
+
50
+ export default [
51
+ configSrc,
52
+ configIgnores
53
+ ];
package/package.json CHANGED
@@ -14,124 +14,51 @@
14
14
  "url": "git@github.com:natlibfi/melinda-rest-api-commons.git"
15
15
  },
16
16
  "license": "MIT",
17
- "version": "4.2.5",
17
+ "version": "5.0.0-alpha.2",
18
18
  "main": "./dist/index.js",
19
+ "type": "module",
19
20
  "engines": {
20
- "node": ">=18"
21
+ "node": ">=22"
21
22
  },
22
23
  "publishConfig": {
23
24
  "access": "public"
24
25
  },
25
26
  "scripts": {
26
27
  "prepare": "npm run build",
27
- "build": "babel src --source-maps --copy-files --delete-dir-on-start --out-dir=dist",
28
+ "build": "esbuild ./src/*.js ./src/**/*.js --sourcemap --platform=node --main-fields=main --outdir=dist --allow-overwrite --analyze",
28
29
  "lint": "eslint ./src",
29
- "lint:dev": "eslint ./src --fix",
30
+ "lint:dev": "eslint --fix ./src",
30
31
  "test": "npm run lint && npm run test:base",
31
- "test:base": "cross-env NODE_ENV=test nyc mocha --package ./package.json --exclude tests/amqp.health.spec.js --exclude tests/amqp.tests.spec.js",
32
- "test:dev": "npm run lint:dev && cross-env NODE_ENV=test nyc mocha --package ./package.json --exclude tests/amqp.health.spec.js --exclude tests/amqp.tests.spec.js",
33
- "test:local": "cross-env NODE_ENV=test nyc mocha --package ./package.json -- tests/amqp.*.spec.js",
34
- "test:healthcheck": "cross-env NODE_ENV=test nyc mocha --require @babel/register -- tests/amqp.health.spec.js",
35
- "dev": "nodemon",
36
- "dev:debug": "cross-env LOG_LEVEL=debug DEBUG=@natlibfi/* NODE_ENV=test nodemon"
32
+ "test:base": "node --test --test-force-exit --experimental-test-coverage --test-reporter=spec './tests/**/*.test.js'",
33
+ "test:local": "cross-env NODE_ENV=test node --test --test-force-exit --experimental-test-coverage --test-reporter=spec './tests/amqp.*.localtest.js'",
34
+ "test:healthcheck": "cross-env NODE_ENV=test node --test --test-force-exit --experimental-test-coverage --test-reporter=spec './tests/amqp.healthtest.js'",
35
+ "watch:test": "cross-env DEBUG=@natlibfi/* NODE_ENV=test node --watch --test --experimental-test-coverage --test-reporter=spec './src/*.test.js' './src/**/*.test.js'",
36
+ "dev": "npm run watch:test",
37
+ "dev:debug": "cross-env LOG_LEVEL=debug DEBUG=@natlibfi/* NODE_ENV=test npm run watch:test"
37
38
  },
38
39
  "dependencies": {
39
- "@natlibfi/marc-record": "^9.1.5",
40
- "@natlibfi/marc-record-serializers": "^10.1.6",
41
- "@natlibfi/marc-record-validate": "^8.0.14",
40
+ "@natlibfi/marc-record": "^10.0.0-alpha.1",
41
+ "@natlibfi/marc-record-serializers": "^11.0.0-alpha.2",
42
+ "@natlibfi/marc-record-validate": "^9.0.0-alpha.1",
42
43
  "@natlibfi/marc-record-validators-melinda": "^11.6.2",
43
- "@natlibfi/melinda-backend-commons": "^2.3.8",
44
- "@natlibfi/melinda-commons": "^13.0.20",
44
+ "@natlibfi/melinda-backend-commons": "^3.0.0-alpha.3",
45
+ "@natlibfi/melinda-commons": "^14.0.0-alpha.3",
45
46
  "amqplib": "^0.10.8",
46
47
  "debug": "^4.4.0",
47
48
  "http-status": "^2.1.0",
48
49
  "moment": "^2.30.1",
49
50
  "mongo-sanitize": "^1.1.0",
50
- "mongodb": "^6.16.0"
51
+ "mongodb": "^6.18.0"
51
52
  },
52
53
  "devDependencies": {
53
- "@babel/cli": "^7.27.1",
54
- "@babel/core": "^7.27.1",
55
- "@babel/plugin-transform-runtime": "^7.27.1",
56
- "@babel/preset-env": "^7.27.1",
57
- "@babel/register": "^7.27.1",
58
- "@natlibfi/eslint-config-melinda-backend": "^3.0.5",
59
- "@natlibfi/fixugen": "^2.0.14",
60
- "@natlibfi/fixura": "^3.0.13",
61
- "@natlibfi/fixura-mongo": "^2.0.24",
62
- "babel-plugin-istanbul": "^7.0.0",
63
- "babel-plugin-rewire": "^1.2.0",
64
- "chai": "^4.5.0",
65
- "cross-env": "^7.0.3",
66
- "eslint": "^8.57.1",
67
- "mocha": "^11.2.2",
68
- "nodemon": "^3.1.10",
69
- "nyc": "^17.1.0"
54
+ "@natlibfi/fixugen": "^3.0.0-alpha.5",
55
+ "@natlibfi/fixura": "^4.0.0-alpha.12",
56
+ "@natlibfi/fixura-mongo": "^3.0.0-alpha.5",
57
+ "cross-env": "^10.0.0",
58
+ "esbuild": "^0.25.9",
59
+ "eslint": "^9.33.0"
70
60
  },
71
61
  "overrides": {
72
62
  "nanoid": "^3.3.8"
73
- },
74
- "eslintConfig": {
75
- "extends": "@natlibfi/melinda-backend"
76
- },
77
- "babel": {
78
- "presets": [
79
- [
80
- "@babel/preset-env",
81
- {
82
- "targets": "maintained node versions"
83
- }
84
- ]
85
- ],
86
- "plugins": [
87
- [
88
- "@babel/transform-runtime"
89
- ]
90
- ],
91
- "env": {
92
- "test": {
93
- "plugins": [
94
- "istanbul",
95
- "rewire"
96
- ]
97
- }
98
- }
99
- },
100
- "mocha": {
101
- "spec": [
102
- "tests/*.spec.js",
103
- "tests/**/*.spec.js"
104
- ],
105
- "require": [
106
- "@babel/register"
107
- ],
108
- "inline-diffs": true,
109
- "maxDiffSize": 25000,
110
- "bail": true,
111
- "exit": true,
112
- "timeout": 10000
113
- },
114
- "nodemonConfig": {
115
- "exec": "npm run test:dev",
116
- "watch": [
117
- "tests/*",
118
- "src/*",
119
- "test-fixtures/*"
120
- ]
121
- },
122
- "nyc": {
123
- "exclude": [
124
- "tests/*.spec.js",
125
- "tests/**/*.spec.js"
126
- ],
127
- "reporter": [
128
- "text"
129
- ],
130
- "sourceMap": false,
131
- "instrument": false,
132
- "lines": 80,
133
- "statements": 80,
134
- "functions": 80,
135
- "branches": 80
136
63
  }
137
64
  }
@@ -1,6 +1,6 @@
1
- //import {expect} from 'chai';
1
+ //import assert from 'node:assert';
2
2
  import createDebugLogger from 'debug';
3
- import {amqpFactory} from '../src/index';
3
+ import {amqpFactory} from '../src/index.js';
4
4
 
5
5
 
6
6
  const debug = createDebugLogger('@natlibfi/melinda-rest-api-commons:amqp:test');