@natlibfi/melinda-rest-api-commons 6.0.1 → 6.2.0-alpha.0
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/.github/workflows/melinda-node-tests-and-publish.yml +4 -2
- package/README.md +82 -0
- package/dist/amqp.d.ts +41 -0
- package/dist/amqp.d.ts.map +1 -0
- package/dist/amqp.js +242 -218
- package/dist/amqp.js.map +1 -7
- package/dist/constants.d.ts +49 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +38 -38
- package/dist/constants.js.map +1 -7
- package/dist/helpers/conversion.d.ts +8 -0
- package/dist/helpers/conversion.d.ts.map +1 -0
- package/dist/helpers/conversion.js +70 -65
- package/dist/helpers/conversion.js.map +1 -7
- package/dist/helpers/fix-constants.d.ts +76 -0
- package/dist/helpers/fix-constants.d.ts.map +1 -0
- package/dist/helpers/fix-constants.js +41 -41
- package/dist/helpers/fix-constants.js.map +1 -7
- package/dist/helpers/fix-handle-tempurns.d.ts +3 -0
- package/dist/helpers/fix-handle-tempurns.d.ts.map +1 -0
- package/dist/helpers/fix-handle-tempurns.js +73 -71
- package/dist/helpers/fix-handle-tempurns.js.map +1 -7
- package/dist/helpers/fix-strip-f884s.d.ts +10 -0
- package/dist/helpers/fix-strip-f884s.d.ts.map +1 -0
- package/dist/helpers/fix-strip-f884s.js +163 -151
- package/dist/helpers/fix-strip-f884s.js.map +1 -7
- package/dist/helpers/fix.d.ts +6 -0
- package/dist/helpers/fix.d.ts.map +1 -0
- package/dist/helpers/fix.js +133 -117
- package/dist/helpers/fix.js.map +1 -7
- package/dist/helpers/validation.d.ts +9 -0
- package/dist/helpers/validation.d.ts.map +1 -0
- package/dist/helpers/validation.js +14 -16
- package/dist/helpers/validation.js.map +1 -7
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -7
- package/dist/mongo.d.ts +165 -0
- package/dist/mongo.d.ts.map +1 -0
- package/dist/mongo.js +603 -464
- package/dist/mongo.js.map +1 -7
- package/dist/mongoError.d.ts +2 -0
- package/dist/mongoError.d.ts.map +1 -0
- package/dist/mongoError.js +19 -0
- package/dist/mongoError.js.map +1 -0
- package/dist/mongoLog.d.ts +50 -0
- package/dist/mongoLog.d.ts.map +1 -0
- package/dist/mongoLog.js +282 -172
- package/dist/mongoLog.js.map +1 -7
- package/dist/utils.d.ts +36 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +118 -87
- package/dist/utils.js.map +1 -7
- package/eslint.config.ts +66 -0
- package/package.json +23 -25
- package/test/amqp-error-branches.test.ts +551 -0
- package/{tests/amqp.healthtest.js → test/amqp.healthtest.ts} +19 -7
- package/{tests/amqp.tests.localtest.js → test/amqp.tests.localtest.ts} +66 -52
- package/{tests/helpers/conversion.test.js → test/helpers/conversion.test.ts} +39 -11
- package/test/helpers/fix-edge.test.ts +201 -0
- package/test/helpers/fix.test.ts +65 -0
- package/{tests/helpers/validation.test.js → test/helpers/validation.test.ts} +13 -8
- package/{tests/mongo-add-blob-size.test.js → test/mongo-add-blob-size.test.ts} +14 -15
- package/{tests/mongo-check-and-check-state.test.js → test/mongo-check-and-check-state.test.ts} +9 -9
- package/{tests/mongo-check-and-set-import-job-state.test.js → test/mongo-check-and-set-import-job-state.test.ts} +9 -10
- package/{tests/mongo-check-timeout.test.js → test/mongo-check-timeout.test.ts} +6 -9
- package/{tests/mongo-create-bulk.test.js → test/mongo-create-bulk.test.ts} +6 -7
- package/{tests/mongo-create-prio.test.js → test/mongo-create-prio.test.ts} +6 -6
- package/test/mongo-error-branches.test.ts +883 -0
- package/{tests/mongo-get-one.test.js → test/mongo-get-one.test.ts} +6 -6
- package/{tests/mongo-get-stream.test.js → test/mongo-get-stream.test.ts} +10 -9
- package/{tests/mongo-push-ids.test.js → test/mongo-push-ids.test.ts} +6 -6
- package/{tests/mongo-push-messages.test.js → test/mongo-push-messages.test.ts} +6 -6
- package/{tests/mongo-query-by-id.test.js → test/mongo-query-by-id.test.ts} +6 -9
- package/{tests/mongo-query.test.js → test/mongo-query.test.ts} +6 -7
- package/{tests/mongo-read-content.test.js → test/mongo-read-content.test.ts} +16 -9
- package/{tests/mongo-remove.test.js → test/mongo-remove.test.ts} +6 -8
- package/{tests/mongo-set-blob-size.test.js → test/mongo-set-blob-size.test.ts} +6 -6
- package/{tests/mongo-set-import-job-state.test.js → test/mongo-set-import-job-state.test.ts} +6 -6
- package/{tests/mongo-set-operation.test.js → test/mongo-set-operation.test.ts} +6 -6
- package/{tests/mongo-set-operations.test.js → test/mongo-set-operations.test.ts} +6 -6
- package/{tests/mongo-set-state.test.js → test/mongo-set-state.test.ts} +6 -6
- package/test/mongoLog-protect.test.ts +182 -0
- package/test/mongoLog.test.ts +191 -0
- package/{tests/testUtils.js → test/testUtils.ts} +49 -15
- package/test/utils.test.ts +360 -0
- package/tsconfig.json +62 -0
- package/tsconfig.test.json +17 -0
- package/dist/helpers/fix-utils.js +0 -39
- package/dist/helpers/fix-utils.js.map +0 -7
- package/eslint.config.js +0 -53
- package/tests/helpers/fix.test.js +0 -41
- package/tests/mongoLog.test.js +0 -84
package/dist/utils.js
CHANGED
|
@@ -1,102 +1,133 @@
|
|
|
1
|
-
import httpStatus from
|
|
2
|
-
import { createLogger } from
|
|
3
|
-
import { Error as ApiError } from "@natlibfi/melinda-commons";
|
|
1
|
+
import httpStatus from 'http-status';
|
|
2
|
+
import { createLogger, Error as ApiError } from '@natlibfi/melinda-commons';
|
|
4
3
|
import { IMPORT_JOB_STATE, OPERATIONS } from "./constants.js";
|
|
5
4
|
const logger = createLogger();
|
|
6
5
|
export function logError(err) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
6
|
+
if (err instanceof ApiError) {
|
|
7
|
+
logger.error(JSON.stringify(err));
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
if (err === 'SIGINT') {
|
|
11
|
+
logger.error(err);
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const maybeError = err;
|
|
15
|
+
logger.error(maybeError.stack === undefined ? err : maybeError.stack);
|
|
16
|
+
}
|
|
17
|
+
export function assertString(value, name) {
|
|
18
|
+
if (typeof value !== 'string') {
|
|
19
|
+
throw new ApiError(httpStatus.BAD_REQUEST, `${name} must be a string`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export function assertNumber(value, name) {
|
|
23
|
+
if (typeof value !== 'number') {
|
|
24
|
+
throw new ApiError(httpStatus.BAD_REQUEST, `${name} must be a number`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export function assertImportJobStateFilter(value, name) {
|
|
28
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value)) {
|
|
29
|
+
throw new ApiError(httpStatus.BAD_REQUEST, `${name} must be an object`);
|
|
30
|
+
}
|
|
31
|
+
const validKeys = Object.values(OPERATIONS).map(operation => `importJobState.${operation}`);
|
|
32
|
+
for (const [key, state] of Object.entries(value)) {
|
|
33
|
+
if (!validKeys.includes(key)) {
|
|
34
|
+
throw new ApiError(httpStatus.BAD_REQUEST, `${name} key ${key} must be one of ${validKeys.join(', ')}`);
|
|
35
|
+
}
|
|
36
|
+
if (typeof state !== 'string') {
|
|
37
|
+
throw new ApiError(httpStatus.BAD_REQUEST, `${name}.${key} must be a string`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
16
40
|
}
|
|
17
41
|
export function createImportJobState(operation, state, queryImportJobState = false) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
42
|
+
if (!(state in IMPORT_JOB_STATE)) {
|
|
43
|
+
throw new Error('Invalid IMPORT_JOB_STATE');
|
|
44
|
+
}
|
|
45
|
+
if (!(operation in OPERATIONS)) {
|
|
46
|
+
throw new Error('Invalid operation');
|
|
47
|
+
}
|
|
48
|
+
if (queryImportJobState) {
|
|
49
|
+
const importJobStateWithOperation = `importJobState.${operation}`;
|
|
50
|
+
const importJobStateForQuery = { [importJobStateWithOperation]: state };
|
|
51
|
+
return importJobStateForQuery;
|
|
52
|
+
}
|
|
53
|
+
return { [operation]: state };
|
|
30
54
|
}
|
|
31
|
-
export function createRecordResponseItem(
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
55
|
+
export function createRecordResponseItem(params) {
|
|
56
|
+
const { responsePayload, responseStatus, recordMetadata, id } = params;
|
|
57
|
+
if (responsePayload === undefined || responsePayload === null) {
|
|
58
|
+
throw new Error('responsePayload must be an object or a string!');
|
|
59
|
+
}
|
|
60
|
+
const recordResponseStatusAndMessage = getRecordResponseStatusAndMessage(responseStatus, responsePayload, id);
|
|
61
|
+
const recordResponseItem = {
|
|
62
|
+
databaseId: id || '000000000',
|
|
63
|
+
recordMetadata: responsePayload.recordMetadata || recordMetadata || undefined,
|
|
64
|
+
...recordResponseStatusAndMessage
|
|
65
|
+
};
|
|
66
|
+
return recordResponseItem;
|
|
39
67
|
}
|
|
40
68
|
function getRecordResponseStatusAndMessage(responseStatus, responsePayload, id) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
69
|
+
logger.debug(`Response status: ${responseStatus} responsePayload: ${JSON.stringify(responsePayload)}`);
|
|
70
|
+
const message = getMessageFromResponsePayload(responsePayload);
|
|
71
|
+
const ids = responsePayload.ids || [];
|
|
72
|
+
logger.debug(`Response message: ${message}`);
|
|
73
|
+
if (['UPDATED', 'CREATED', 'INVALID', 'ERROR', 'SKIPPED', 'FIXED'].includes(responseStatus)) {
|
|
74
|
+
return { recordStatus: responseStatus, detailedRecordStatus: responseStatus, message };
|
|
75
|
+
}
|
|
76
|
+
if (['SKIPPED_CHANGE', 'SKIPPED_UPDATE'].includes(responseStatus)) {
|
|
77
|
+
return { recordStatus: 'SKIPPED', detailedRecordStatus: responseStatus, message };
|
|
78
|
+
}
|
|
79
|
+
if (['UNKNOWN'].includes(responseStatus)) {
|
|
80
|
+
return { recordStatus: 'ERROR', detailedRecordStatus: responseStatus, message, ids };
|
|
81
|
+
}
|
|
82
|
+
if ([httpStatus.CONFLICT, 'CONFLICT'].includes(responseStatus)) {
|
|
83
|
+
if ((/^Duplicates in database/u).test(message)) {
|
|
84
|
+
return { recordStatus: 'DUPLICATE', detailedRecordStatus: 'DUPLICATE', message, ids };
|
|
85
|
+
}
|
|
86
|
+
if ((/^MatchValidation for all/u).test(message)) {
|
|
87
|
+
return { recordStatus: 'ERROR', detailedRecordStatus: 'CONFLICT', message, ids };
|
|
88
|
+
}
|
|
89
|
+
if (ids.length > 1 || (ids.length > 0 && ids[0] !== id)) {
|
|
90
|
+
return { recordStatus: 'ERROR', detailedRecordStatus: 'CONFLICT', message, ids };
|
|
91
|
+
}
|
|
92
|
+
return { recordStatus: 'ERROR', detailedRecordStatus: 'CONFLICT', message };
|
|
93
|
+
}
|
|
94
|
+
if ([httpStatus.UNPROCESSABLE_ENTITY, 'UNPROCESSABLE_ENTITY'].includes(responseStatus)) {
|
|
95
|
+
if (ids.length > 1 || (ids.length > 0 && ids[0] !== id)) {
|
|
96
|
+
return { recordStatus: 'INVALID', detailedRecordStatus: 'UNPROCESSABLE_ENTITY', message, ids };
|
|
97
|
+
}
|
|
98
|
+
return { recordStatus: 'INVALID', detailedRecordStatus: 'UNPROCESSABLE_ENTITY', message };
|
|
99
|
+
}
|
|
100
|
+
if ([httpStatus.NOT_FOUND, 'NOT_FOUND'].includes(responseStatus)) {
|
|
101
|
+
return { recordStatus: 'ERROR', detailedRecordStatus: 'NOT_FOUND', message };
|
|
102
|
+
}
|
|
103
|
+
if ([httpStatus.FORBIDDEN, 'FORBIDDEN'].includes(responseStatus)) {
|
|
104
|
+
return { recordStatus: 'ERROR', detailedRecordStatus: 'FORBIDDEN', message };
|
|
105
|
+
}
|
|
106
|
+
logger.debug(`Unknown responseStatus: ${responseStatus}`);
|
|
107
|
+
const newMessage = `${message} - Unknown recordStatus: ${responseStatus}`;
|
|
108
|
+
return { recordStatus: 'ERROR', detailedRecordStatus: responseStatus, message: newMessage };
|
|
81
109
|
}
|
|
82
110
|
function getMessageFromResponsePayload(responsePayload) {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
111
|
+
if (responsePayload.message) {
|
|
112
|
+
return responsePayload.message;
|
|
113
|
+
}
|
|
114
|
+
if (typeof responsePayload === 'string' || responsePayload instanceof String) {
|
|
115
|
+
return responsePayload;
|
|
116
|
+
}
|
|
117
|
+
return '';
|
|
90
118
|
}
|
|
91
119
|
export async function addRecordResponseItem({ recordResponseItem, correlationId, mongoOperator }) {
|
|
92
|
-
|
|
93
|
-
|
|
120
|
+
if (!recordResponseItem || typeof recordResponseItem !== 'object' || Array.isArray(recordResponseItem)) {
|
|
121
|
+
throw new Error('RecordResponseItem is not an object!');
|
|
122
|
+
}
|
|
123
|
+
await mongoOperator.pushMessages({ correlationId, messages: [recordResponseItem], messageField: 'records' });
|
|
124
|
+
return true;
|
|
94
125
|
}
|
|
95
126
|
export async function addRecordResponseItems({ recordResponseItems, correlationId, mongoOperator }) {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
127
|
+
if (!Array.isArray(recordResponseItems)) {
|
|
128
|
+
throw new Error('RecordResponseItems is not an array!');
|
|
129
|
+
}
|
|
130
|
+
await mongoOperator.pushMessages({ correlationId, messages: recordResponseItems, messageField: 'records' });
|
|
131
|
+
return true;
|
|
101
132
|
}
|
|
102
|
-
//# sourceMappingURL=utils.js.map
|
|
133
|
+
//# sourceMappingURL=utils.js.map
|
package/dist/utils.js.map
CHANGED
|
@@ -1,7 +1 @@
|
|
|
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\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
|
-
}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/eslint.config.ts
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
import {defineConfig} from 'eslint/config';
|
|
3
|
+
import tseslint from 'typescript-eslint';
|
|
4
|
+
|
|
5
|
+
// House rules (see melinda-commons-js) for src/ and test/. The
|
|
6
|
+
// typescript-eslint no-unused-vars variant is used because the base rule
|
|
7
|
+
// does not understand TS syntax (interface method params etc.).
|
|
8
|
+
const houseRules = {
|
|
9
|
+
"array-callback-return": [
|
|
10
|
+
"error",
|
|
11
|
+
{
|
|
12
|
+
"checkForEach": false
|
|
13
|
+
}
|
|
14
|
+
],
|
|
15
|
+
"eqeqeq": ["error", "always"],
|
|
16
|
+
"max-depth": ["warn", 4],
|
|
17
|
+
"max-lines": ["warn", 500],
|
|
18
|
+
"max-lines-per-function": ["warn", {"max": 100}],
|
|
19
|
+
"no-console": "warn",
|
|
20
|
+
"no-const-assign": "error",
|
|
21
|
+
"no-else-return": ["error", {allowElseIf: false}],
|
|
22
|
+
"no-plusplus": [
|
|
23
|
+
"error",
|
|
24
|
+
{
|
|
25
|
+
"allowForLoopAfterthoughts": true
|
|
26
|
+
}
|
|
27
|
+
],
|
|
28
|
+
"no-unused-vars": "off",
|
|
29
|
+
"@typescript-eslint/no-unused-vars": [
|
|
30
|
+
"error",
|
|
31
|
+
{
|
|
32
|
+
"argsIgnorePattern": "next"
|
|
33
|
+
}
|
|
34
|
+
],
|
|
35
|
+
"no-var": "error",
|
|
36
|
+
"no-warning-comments": "off"
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export default defineConfig(
|
|
40
|
+
[
|
|
41
|
+
...tseslint.configs.recommended,
|
|
42
|
+
...tseslint.configs.stylistic,
|
|
43
|
+
{
|
|
44
|
+
files: [
|
|
45
|
+
"src/**/*.ts",
|
|
46
|
+
"test/**/*.ts"
|
|
47
|
+
],
|
|
48
|
+
ignores: ['node_modules/**', "**/.*", "**/dist/"],
|
|
49
|
+
linterOptions: {
|
|
50
|
+
reportUnusedInlineConfigs: "error",
|
|
51
|
+
reportUnusedDisableDirectives: true
|
|
52
|
+
},
|
|
53
|
+
rules: houseRules
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
// Fixture-driven test scaffolding: any-typed fixture values and no-op
|
|
57
|
+
// stubs are intentional in tests (tsc -p tsconfig.test.json still
|
|
58
|
+
// typechecks the directory).
|
|
59
|
+
files: ["test/**/*.ts"],
|
|
60
|
+
rules: {
|
|
61
|
+
"@typescript-eslint/no-explicit-any": "off",
|
|
62
|
+
"@typescript-eslint/no-empty-function": "off"
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
]
|
|
66
|
+
);
|
package/package.json
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"url": "https://github.com/NatLibFi/melinda-rest-api-commons"
|
|
14
14
|
},
|
|
15
15
|
"license": "MIT",
|
|
16
|
-
"version": "6.0.
|
|
16
|
+
"version": "6.2.0-alpha.0",
|
|
17
17
|
"main": "./dist/index.js",
|
|
18
18
|
"type": "module",
|
|
19
19
|
"engines": {
|
|
@@ -24,40 +24,38 @@
|
|
|
24
24
|
},
|
|
25
25
|
"scripts": {
|
|
26
26
|
"prepare": "npm run build",
|
|
27
|
-
"build": "
|
|
28
|
-
"lint": "eslint ./src",
|
|
29
|
-
"lint:dev": "eslint --fix ./src",
|
|
30
|
-
"
|
|
31
|
-
"test
|
|
32
|
-
"test:
|
|
33
|
-
"test:
|
|
34
|
-
"
|
|
27
|
+
"build": "tsc",
|
|
28
|
+
"lint": "eslint ./src ./test",
|
|
29
|
+
"lint:dev": "eslint --fix ./src ./test",
|
|
30
|
+
"typecheck": "tsc -p tsconfig.test.json",
|
|
31
|
+
"test": "npm run lint && npm run typecheck && npm run test:base",
|
|
32
|
+
"test:base": "node --test --test-force-exit --experimental-test-coverage --test-coverage-lines=88 --test-coverage-branches=88 --test-coverage-functions=90 --test-coverage-include=src/** --test-reporter=spec 'test/**/*.test.ts'",
|
|
33
|
+
"test:local": "cross-env NODE_ENV=test node --test --test-force-exit --experimental-test-coverage --test-reporter=spec './test/amqp.*.localtest.ts'",
|
|
34
|
+
"test:healthcheck": "cross-env NODE_ENV=test node --test --test-force-exit --experimental-test-coverage --test-reporter=spec './test/amqp.healthtest.ts'",
|
|
35
|
+
"watch:test": "cross-env DEBUG=@natlibfi/* NODE_ENV=test node --watch --test --experimental-test-coverage --test-reporter=spec './test/**/*.test.ts'",
|
|
35
36
|
"dev": "npm run watch:test",
|
|
36
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": "^
|
|
40
|
+
"@natlibfi/marc-record": "^11.0.3",
|
|
40
41
|
"@natlibfi/marc-record-serializers": "^11.0.4",
|
|
41
42
|
"@natlibfi/marc-record-validate": "^9.0.2",
|
|
42
|
-
"@natlibfi/marc-record-validators-melinda": "^13.0.
|
|
43
|
-
"@natlibfi/melinda-
|
|
44
|
-
"
|
|
45
|
-
"amqplib": "^0.10.9",
|
|
43
|
+
"@natlibfi/marc-record-validators-melinda": "^13.0.6",
|
|
44
|
+
"@natlibfi/melinda-commons": "^16.0.0",
|
|
45
|
+
"amqplib": "^2.2.0",
|
|
46
46
|
"debug": "^4.4.3",
|
|
47
47
|
"http-status": "^2.1.0",
|
|
48
|
-
"
|
|
49
|
-
"mongo-sanitize": "^1.1.0",
|
|
50
|
-
"mongodb": "^6.21.0"
|
|
48
|
+
"mongodb": "^7.7.0"
|
|
51
49
|
},
|
|
52
50
|
"devDependencies": {
|
|
53
|
-
"@natlibfi/fixugen": "^
|
|
54
|
-
"@natlibfi/fixura": "^
|
|
55
|
-
"@natlibfi/fixura-mongo": "^
|
|
51
|
+
"@natlibfi/fixugen": "^4.0.0",
|
|
52
|
+
"@natlibfi/fixura": "^5.0.0",
|
|
53
|
+
"@natlibfi/fixura-mongo": "^4.0.2",
|
|
54
|
+
"@types/node": "^25.9.9",
|
|
56
55
|
"cross-env": "^10.1.0",
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
"nanoid": "^3.3.8"
|
|
56
|
+
"eslint": "^10.12.0",
|
|
57
|
+
"jiti": "^2.7.0",
|
|
58
|
+
"typescript": "^6.0.3",
|
|
59
|
+
"typescript-eslint": "^8.72.0"
|
|
62
60
|
}
|
|
63
61
|
}
|