@natlibfi/melinda-rest-api-commons 6.1.0-alpha.0 → 6.2.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/.github/workflows/melinda-node-tests-and-publish.yml +4 -2
  2. package/README.md +211 -14
  3. package/dist/amqp.d.ts +41 -0
  4. package/dist/amqp.d.ts.map +1 -0
  5. package/dist/amqp.js +251 -235
  6. package/dist/amqp.js.map +1 -7
  7. package/dist/constants.d.ts +49 -0
  8. package/dist/constants.d.ts.map +1 -0
  9. package/dist/constants.js +38 -38
  10. package/dist/constants.js.map +1 -7
  11. package/dist/helpers/conversion.d.ts +8 -0
  12. package/dist/helpers/conversion.d.ts.map +1 -0
  13. package/dist/helpers/conversion.js +70 -64
  14. package/dist/helpers/conversion.js.map +1 -7
  15. package/dist/helpers/fix-constants.d.ts +76 -0
  16. package/dist/helpers/fix-constants.d.ts.map +1 -0
  17. package/dist/helpers/fix-constants.js +41 -41
  18. package/dist/helpers/fix-constants.js.map +1 -7
  19. package/dist/helpers/fix-handle-tempurns.d.ts +3 -0
  20. package/dist/helpers/fix-handle-tempurns.d.ts.map +1 -0
  21. package/dist/helpers/fix-handle-tempurns.js +73 -71
  22. package/dist/helpers/fix-handle-tempurns.js.map +1 -7
  23. package/dist/helpers/fix-strip-f884s.d.ts +10 -0
  24. package/dist/helpers/fix-strip-f884s.d.ts.map +1 -0
  25. package/dist/helpers/fix-strip-f884s.js +161 -163
  26. package/dist/helpers/fix-strip-f884s.js.map +1 -7
  27. package/dist/helpers/fix.d.ts +6 -0
  28. package/dist/helpers/fix.d.ts.map +1 -0
  29. package/dist/helpers/fix.js +133 -121
  30. package/dist/helpers/fix.js.map +1 -7
  31. package/dist/helpers/validation.d.ts +9 -0
  32. package/dist/helpers/validation.d.ts.map +1 -0
  33. package/dist/helpers/validation.js +14 -16
  34. package/dist/helpers/validation.js.map +1 -7
  35. package/dist/index.d.ts +13 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +1 -1
  38. package/dist/index.js.map +1 -7
  39. package/dist/mongo.d.ts +165 -0
  40. package/dist/mongo.d.ts.map +1 -0
  41. package/dist/mongo.js +595 -547
  42. package/dist/mongo.js.map +1 -7
  43. package/dist/mongoError.d.ts +2 -0
  44. package/dist/mongoError.d.ts.map +1 -0
  45. package/dist/mongoError.js +19 -0
  46. package/dist/mongoError.js.map +1 -0
  47. package/dist/mongoLog.d.ts +50 -0
  48. package/dist/mongoLog.d.ts.map +1 -0
  49. package/dist/mongoLog.js +274 -242
  50. package/dist/mongoLog.js.map +1 -7
  51. package/dist/utils.d.ts +36 -0
  52. package/dist/utils.d.ts.map +1 -0
  53. package/dist/utils.js +112 -110
  54. package/dist/utils.js.map +1 -7
  55. package/eslint.config.ts +66 -0
  56. package/package.json +17 -11
  57. package/{tests/amqp-error-branches.test.js → test/amqp-error-branches.test.ts} +135 -61
  58. package/{tests/amqp.healthtest.js → test/amqp.healthtest.ts} +19 -11
  59. package/{tests/amqp.tests.localtest.js → test/amqp.tests.localtest.ts} +54 -35
  60. package/{tests/helpers/conversion.test.js → test/helpers/conversion.test.ts} +26 -14
  61. package/{tests/helpers/fix-edge.test.js → test/helpers/fix-edge.test.ts} +16 -12
  62. package/{tests/helpers/fix.test.js → test/helpers/fix.test.ts} +14 -8
  63. package/{tests/helpers/validation.test.js → test/helpers/validation.test.ts} +7 -6
  64. package/{tests/mongo-add-blob-size.test.js → test/mongo-add-blob-size.test.ts} +14 -15
  65. package/{tests/mongo-check-and-check-state.test.js → test/mongo-check-and-check-state.test.ts} +6 -8
  66. package/{tests/mongo-check-and-set-import-job-state.test.js → test/mongo-check-and-set-import-job-state.test.ts} +6 -9
  67. package/{tests/mongo-check-timeout.test.js → test/mongo-check-timeout.test.ts} +6 -9
  68. package/{tests/mongo-create-bulk.test.js → test/mongo-create-bulk.test.ts} +6 -7
  69. package/{tests/mongo-create-prio.test.js → test/mongo-create-prio.test.ts} +6 -6
  70. package/{tests/mongo-error-branches.test.js → test/mongo-error-branches.test.ts} +166 -65
  71. package/{tests/mongo-get-one.test.js → test/mongo-get-one.test.ts} +6 -6
  72. package/{tests/mongo-get-stream.test.js → test/mongo-get-stream.test.ts} +6 -8
  73. package/{tests/mongo-push-ids.test.js → test/mongo-push-ids.test.ts} +6 -6
  74. package/{tests/mongo-push-messages.test.js → test/mongo-push-messages.test.ts} +6 -6
  75. package/{tests/mongo-query-by-id.test.js → test/mongo-query-by-id.test.ts} +6 -9
  76. package/{tests/mongo-query.test.js → test/mongo-query.test.ts} +6 -7
  77. package/{tests/mongo-read-content.test.js → test/mongo-read-content.test.ts} +6 -9
  78. package/{tests/mongo-remove.test.js → test/mongo-remove.test.ts} +6 -8
  79. package/{tests/mongo-set-blob-size.test.js → test/mongo-set-blob-size.test.ts} +6 -6
  80. package/{tests/mongo-set-import-job-state.test.js → test/mongo-set-import-job-state.test.ts} +6 -6
  81. package/{tests/mongo-set-operation.test.js → test/mongo-set-operation.test.ts} +6 -6
  82. package/{tests/mongo-set-operations.test.js → test/mongo-set-operations.test.ts} +6 -6
  83. package/{tests/mongo-set-state.test.js → test/mongo-set-state.test.ts} +6 -6
  84. package/{tests/mongoLog-protect.test.js → test/mongoLog-protect.test.ts} +18 -17
  85. package/{tests/mongoLog.test.js → test/mongoLog.test.ts} +8 -8
  86. package/{tests/testUtils.js → test/testUtils.ts} +49 -15
  87. package/{tests/utils.test.js → test/utils.test.ts} +5 -5
  88. package/tsconfig.json +62 -0
  89. package/tsconfig.test.json +17 -0
  90. package/dist/helpers/fix-utils.js +0 -39
  91. package/dist/helpers/fix-utils.js.map +0 -7
  92. package/eslint.config.js +0 -53
@@ -1,146 +1,158 @@
1
- import createDebugLogger from "debug";
2
- import { MarcRecord } from "@natlibfi/marc-record";
3
- import { createLogger } from "@natlibfi/melinda-commons";
4
- import { FieldExclusion, SubfieldExclusion } from "@natlibfi/marc-record-validators-melinda";
1
+ import createDebugLogger from 'debug';
2
+ import { MarcRecord } from '@natlibfi/marc-record';
3
+ import { createLogger } from '@natlibfi/melinda-commons';
4
+ import { FieldExclusion, SubfieldExclusion } from '@natlibfi/marc-record-validators-melinda';
5
5
  import { handleTempUrns } from "./fix-handle-tempurns.js";
6
6
  import { stripF884s } from "./fix-strip-f884s.js";
7
7
  export * from "./fix-constants.js";
8
8
  const logger = createLogger();
9
- const debug = createDebugLogger("@natlibfi/melinda-rest-api-commons:fixRecord");
10
- const debugData = debug.extend("data");
9
+ const debug = createDebugLogger('@natlibfi/melinda-rest-api-commons:fixRecord');
10
+ const debugData = debug.extend('data');
11
11
  export function fixRecord(record, settings = {}) {
12
- logger.verbose(`We will apply formatting to the record according to settings: ${JSON.stringify(settings)}`);
13
- const newRecord = MarcRecord.clone(record, { subfieldValues: false });
14
- debugData(`settings: ${JSON.stringify(settings)}`);
15
- const generateMissingSIDsOptions = settings.generateMissingSIDs || void 0;
16
- const newRecord1 = generateMissingSIDs(newRecord, generateMissingSIDsOptions);
17
- const replacePrefixesOptions = settings.replacePrefixes || [];
18
- const newRecord2 = replaceAllPrefixes(newRecord1, replacePrefixesOptions);
19
- const newRecord3 = handleTempUrns(newRecord2, settings.handleTempUrns);
20
- const newRecord4 = stripF884s(newRecord3, settings.stripF884s);
21
- const newRecord5 = stripF984s(newRecord4, settings.stripF984s || false);
22
- const newRecord6 = stripMelindaTempSubfields(newRecord5, settings.stripMelindaTempSubfields || false);
23
- debugData(newRecord6);
24
- return newRecord6.toObject();
12
+ logger.verbose(`We will apply formatting to the record according to settings: ${JSON.stringify(settings)}`);
13
+ const newRecord = MarcRecord.clone(record, { subfieldValues: false });
14
+ debugData(`settings: ${JSON.stringify(settings)}`);
15
+ const generateMissingSIDsOptions = settings.generateMissingSIDs || undefined;
16
+ const newRecord1 = generateMissingSIDs(newRecord, generateMissingSIDsOptions);
17
+ const replacePrefixesOptions = settings.replacePrefixes || [];
18
+ const newRecord2 = replaceAllPrefixes(newRecord1, replacePrefixesOptions);
19
+ const newRecord3 = handleTempUrns(newRecord2, settings.handleTempUrns);
20
+ const newRecord4 = stripF884s(newRecord3, settings.stripF884s);
21
+ const newRecord5 = stripF984s(newRecord4, settings.stripF984s || false);
22
+ const newRecord6 = stripMelindaTempSubfields(newRecord5, settings.stripMelindaTempSubfields || false);
23
+ debugData(newRecord6);
24
+ return newRecord6.toObject();
25
25
  }
26
26
  function replaceAllPrefixes(record, replacePrefixesOptions) {
27
- if (replacePrefixesOptions.length < 1) {
28
- debug(`NOT running replacePrefixes, no options`);
27
+ if (replacePrefixesOptions.length < 1) {
28
+ debug(`NOT running replacePrefixes, no options`);
29
+ return record;
30
+ }
31
+ debug(`Running replacePrefixes fixer`);
32
+ debugData(`replacePrefixesOptions: ${JSON.stringify(replacePrefixesOptions)}`);
33
+ replacePrefixesOptions.forEach(options => {
34
+ replacePrefix(record, options);
35
+ });
29
36
  return record;
30
- }
31
- debug(`Running replacePrefixes fixer`);
32
- debugData(`replacePrefixesOptions: ${JSON.stringify(replacePrefixesOptions)}`);
33
- replacePrefixesOptions.forEach((options) => {
34
- replacePrefix(record, options);
35
- });
36
- return record;
37
37
  }
38
38
  function replacePrefix(record, options) {
39
- const { oldPrefix, newPrefix, prefixReplaceCodes } = options;
40
- debug(`Replacing ${oldPrefix} with ${newPrefix} in subfields ${prefixReplaceCodes}`);
41
- const pattern = `(${oldPrefix})`;
42
- const replacement = `(${newPrefix})`;
43
- record.getDatafields().forEach((field) => {
44
- field.subfields.filter(({ code }) => prefixReplaceCodes.includes(code)).forEach((subfield) => {
45
- subfield.value = subfield.value.replace(pattern, replacement);
39
+ const { oldPrefix, newPrefix, prefixReplaceCodes } = options;
40
+ debug(`Replacing ${oldPrefix} with ${newPrefix} in subfields ${prefixReplaceCodes}`);
41
+ const pattern = `(${oldPrefix})`;
42
+ const replacement = `(${newPrefix})`;
43
+ record.getDatafields()
44
+ .forEach(field => {
45
+ field.subfields
46
+ .filter(({ code }) => prefixReplaceCodes.includes(code))
47
+ .forEach(subfield => {
48
+ subfield.value = subfield.value.replace(pattern, replacement);
49
+ });
46
50
  });
47
- });
48
- return record;
51
+ return record;
49
52
  }
50
53
  function generateMissingSIDs(record, options) {
51
- const f035Filters = options && options.f035Filters ? options.f035Filters : [];
52
- const fSIDFilters = options && options.fSIDFilters ? options.fSIDFilters : [];
53
- if (f035Filters.length !== fSIDFilters.length) {
54
- debug(`NOT running generateMissingSIDs: f035Filters (${f035Filters.length}) and fSIDFilters (${fSIDFilters.length}) lengths differ`);
55
- return record;
56
- }
57
- if (f035Filters.length < 1) {
58
- debug(`NOT running generateMissingSIDs, no options`);
54
+ const f035Filters = options?.f035Filters ?? [];
55
+ const fSIDFilters = options?.fSIDFilters ?? [];
56
+ if (f035Filters.length !== fSIDFilters.length) {
57
+ debug(`NOT running generateMissingSIDs: f035Filters (${f035Filters.length}) and fSIDFilters (${fSIDFilters.length}) lengths differ`);
58
+ return record;
59
+ }
60
+ if (f035Filters.length < 1) {
61
+ debug(`NOT running generateMissingSIDs, no options`);
62
+ return record;
63
+ }
64
+ debug(`Running generateMissingSIDs fixer`);
65
+ debugData(`generateMissingSIDs options: ${JSON.stringify(options)}`);
66
+ const f035s = f035ToSidInfo(record.get(/^035$/u));
67
+ const fSIDs = sidsToSidInfo(record.get(/^SID$/u));
68
+ const sidsToBeAdded = genNewSids(fSIDs.length === 0
69
+ ? f035s
70
+ : f035s.filter(f035SidInfo => !fSIDs.some(fSIDInfo => f035SidInfo.SID === fSIDInfo.SID && f035SidInfo.value === fSIDInfo.value)));
71
+ debugData(`Adding (${sidsToBeAdded.length}) SIDs: ${JSON.stringify(sidsToBeAdded)}`);
72
+ sidsToBeAdded.forEach(sidField => record.insertField(sidField));
59
73
  return record;
60
- }
61
- debug(`Running generateMissingSIDs fixer`);
62
- debugData(`generateMissingSIDs options: ${JSON.stringify(options)}`);
63
- const f035s = f035ToSidInfo(record.get(/^035$/u));
64
- const fSIDs = sidsToSidInfo(record.get(/^SID$/u));
65
- const sidsToBeAdded = genNewSids(fSIDs.length === 0 ? f035s : f035s.filter((f035SidInfo) => !fSIDs.some((fSIDInfo) => f035SidInfo.SID === fSIDInfo.SID && f035SidInfo.value === fSIDInfo.value)));
66
- debugData(`Adding (${sidsToBeAdded.length}) SIDs: ${JSON.stringify(sidsToBeAdded)}`);
67
- sidsToBeAdded.forEach((sidField) => record.insertField(sidField));
68
- return record;
69
- function genNewSids(sidsToBeAdded2) {
70
- return sidsToBeAdded2.map((sidInfo) => ({ tag: "SID", ind1: " ", ind2: " ", subfields: [{ code: "c", value: sidInfo.value }, { code: "b", value: sidInfo.SID }] }));
71
- }
72
- function sidsToSidInfo(SIDs) {
73
- return SIDs.flatMap(({ subfields }) => {
74
- const [SID] = subfields.filter((sub) => sub.code === "b" && fSIDFilters.includes(sub.value)).map((sub) => sub.value);
75
- const [value] = subfields.filter((sub) => sub.code === "c" && sub.value !== void 0).map((sub) => sub.value);
76
- if (SID && value) {
77
- return {
78
- SID,
79
- value
80
- };
81
- }
82
- return void 0;
83
- }).filter((value) => value !== void 0);
84
- }
85
- function f035ToSidInfo(f035s2) {
86
- return f035s2.flatMap(({ subfields }) => {
87
- const wantedSub = subfields.find((sub) => sub.code === "a" && f035Filters.findIndex((regexp) => regexp.test(sub.value)) > -1);
88
- if (wantedSub) {
89
- const filterIndex = f035Filters.findIndex((regexp) => regexp.test(wantedSub.value));
90
- return {
91
- SID: fSIDFilters[filterIndex],
92
- value: wantedSub.value.slice(wantedSub.value.indexOf(")") + 1)
93
- };
94
- }
95
- return void 0;
96
- }).filter((value) => value !== void 0);
97
- }
74
+ function genNewSids(sidsToBeAdded) {
75
+ return sidsToBeAdded.map(sidInfo => ({ tag: 'SID', ind1: ' ', ind2: ' ', subfields: [{ code: 'c', value: sidInfo.value }, { code: 'b', value: sidInfo.SID }] }));
76
+ }
77
+ function sidsToSidInfo(SIDs) {
78
+ return SIDs.flatMap(({ subfields }) => {
79
+ const sidSubfields = subfields.filter(sub => sub.code === 'b' && sub.value !== undefined && fSIDFilters.includes(sub.value));
80
+ const SID = sidSubfields[0]?.value;
81
+ const valueSubfields = subfields.filter(sub => sub.code === 'c' && sub.value !== undefined);
82
+ const value = valueSubfields[0]?.value;
83
+ if (SID && value) {
84
+ return {
85
+ SID,
86
+ value
87
+ };
88
+ }
89
+ return undefined;
90
+ }).filter((value) => value !== undefined);
91
+ }
92
+ function f035ToSidInfo(f035s) {
93
+ return f035s.flatMap(({ subfields }) => {
94
+ const wantedSub = subfields.find(sub => sub.code === 'a' && f035Filters.findIndex(regexp => regexp.test(sub.value)) > -1);
95
+ if (wantedSub) {
96
+ const wantedSubValue = wantedSub.value;
97
+ const filterIndex = f035Filters.findIndex(regexp => regexp.test(wantedSubValue));
98
+ const fSID = fSIDFilters[filterIndex];
99
+ if (fSID !== undefined) {
100
+ return {
101
+ SID: fSID,
102
+ value: wantedSubValue.slice(wantedSubValue.indexOf(')') + 1)
103
+ };
104
+ }
105
+ return undefined;
106
+ }
107
+ return undefined;
108
+ }).filter((value) => value !== undefined);
109
+ }
98
110
  }
99
111
  function stripF984s(record, stripF984sSettings) {
100
- const F984A_PATTERN = /^(?:ALWAYS|NEVER)-PREFER-IN-MERGE$/u;
101
- const config = [
102
- {
103
- tag: /^984$/u,
104
- subfields: [
112
+ const F984A_PATTERN = /^(?:ALWAYS|NEVER)-PREFER-IN-MERGE$/u;
113
+ const config = [
105
114
  {
106
- code: /a/u,
107
- value: F984A_PATTERN
115
+ tag: /^984$/u,
116
+ subfields: [
117
+ {
118
+ code: /a/u,
119
+ value: F984A_PATTERN
120
+ }
121
+ ]
108
122
  }
109
- ]
123
+ ];
124
+ debugData(`removeF984AFieldsSettings: ${JSON.stringify(stripF984sSettings)}`);
125
+ if (!stripF984sSettings || !F984A_PATTERN || record.get('984').length < 1) {
126
+ debug(`No settings or pattern for removeF984AFields or f984 in record`);
127
+ return record;
110
128
  }
111
- ];
112
- debugData(`removeF984AFieldsSettings: ${JSON.stringify(stripF984sSettings)}`);
113
- if (!stripF984sSettings || !F984A_PATTERN || record.get("984").length < 1) {
114
- debug(`No settings or pattern for removeF984AFields or f984 in record`);
129
+ debug(`Removing f984 fields with subfield $a consisting values ${F984A_PATTERN.toString()}`);
130
+ const validator = FieldExclusion(config);
131
+ validator.fix(record);
115
132
  return record;
116
- }
117
- debug(`Removing f984 fields with subfield $a consisting values ${F984A_PATTERN.toString()}`);
118
- const validator = FieldExclusion(config);
119
- validator.fix(record);
120
- return record;
121
133
  }
122
134
  function stripMelindaTempSubfields(record, stripMelindaTempSubfieldsSettings) {
123
- if (!stripMelindaTempSubfieldsSettings) {
124
- debug(`No settings for stripMelindaTempSubfields`);
125
- return record;
126
- }
127
- const tagPattern = /^856$/u;
128
- const subfieldCodePattern = /^9$/u;
129
- const subfieldValuePattern = /^MELINDA<TEMP>$/u;
130
- const config = [
131
- {
132
- tag: tagPattern,
133
- subfields: [
135
+ if (!stripMelindaTempSubfieldsSettings) {
136
+ debug(`No settings for stripMelindaTempSubfields`);
137
+ return record;
138
+ }
139
+ const tagPattern = /^856$/u;
140
+ const subfieldCodePattern = /^9$/u;
141
+ const subfieldValuePattern = /^MELINDA<TEMP>$/u;
142
+ const config = [
134
143
  {
135
- code: subfieldCodePattern,
136
- value: subfieldValuePattern
144
+ tag: tagPattern,
145
+ subfields: [
146
+ {
147
+ code: subfieldCodePattern,
148
+ value: subfieldValuePattern
149
+ }
150
+ ]
137
151
  }
138
- ]
139
- }
140
- ];
141
- debug(`Running stripMelindaTempSubfields`);
142
- const validator = SubfieldExclusion(config);
143
- validator.fix(record);
144
- return record;
152
+ ];
153
+ debug(`Running stripMelindaTempSubfields`);
154
+ const validator = SubfieldExclusion(config);
155
+ validator.fix(record);
156
+ return record;
145
157
  }
146
- //# sourceMappingURL=fix.js.map
158
+ //# sourceMappingURL=fix.js.map
@@ -1,7 +1 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/helpers/fix.js"],
4
- "sourcesContent": ["import createDebugLogger from 'debug';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport {createLogger} from '@natlibfi/melinda-commons';\n\nimport {FieldExclusion, SubfieldExclusion} from '@natlibfi/marc-record-validators-melinda';\n\nimport {handleTempUrns} from './fix-handle-tempurns.js';\nimport {stripF884s} from './fix-strip-f884s.js';\n\nexport * from './fix-constants.js';\n\nconst logger = createLogger();\nconst debug = createDebugLogger('@natlibfi/melinda-rest-api-commons:fixRecord');\nconst debugData = debug.extend('data');\n\nexport function fixRecord(record, settings = {}) {\n\n logger.verbose(`We will apply formatting to the record according to settings: ${JSON.stringify(settings)}`);\n const newRecord = MarcRecord.clone(record, {subfieldValues: false});\n debugData(`settings: ${JSON.stringify(settings)}`);\n\n // We should handle these in some prettier way ...\n\n // Fix 1, generate SIDs\n const generateMissingSIDsOptions = settings.generateMissingSIDs || undefined;\n const newRecord1 = generateMissingSIDs(newRecord, generateMissingSIDsOptions);\n\n // Fix 2, replace identifier prefixes\n const replacePrefixesOptions = settings.replacePrefixes || [];\n const newRecord2 = replaceAllPrefixes(newRecord1, replacePrefixesOptions);\n\n // Fix 3, handle temporary URNs from legal deposit record import\n const newRecord3 = handleTempUrns(newRecord2, settings.handleTempUrns);\n\n // Fix 4, strip extra field 884s\n const newRecord4 = stripF884s(newRecord3, settings.stripF884s);\n\n // Fix 5, strip extra field 984s\n const newRecord5 = stripF984s(newRecord4, settings.stripF984s || false);\n\n // Fix 6, strip $9 MELINDA<TEMP> subfields\n const newRecord6 = stripMelindaTempSubfields(newRecord5, settings.stripMelindaTempSubfields || false);\n\n debugData(newRecord6);\n\n return newRecord6.toObject();\n\n}\n\n\nfunction replaceAllPrefixes(record, replacePrefixesOptions) {\n if (replacePrefixesOptions.length < 1) {\n debug(`NOT running replacePrefixes, no options`);\n return record;\n }\n\n debug(`Running replacePrefixes fixer`);\n debugData(`replacePrefixesOptions: ${JSON.stringify(replacePrefixesOptions)}`);\n\n replacePrefixesOptions.forEach(options => {\n replacePrefix(record, options);\n });\n return record;\n}\n\n\n// Replace prefix in all specified subfields\nfunction replacePrefix(record, options) {\n const {oldPrefix, newPrefix, prefixReplaceCodes} = options;\n debug(`Replacing ${oldPrefix} with ${newPrefix} in subfields ${prefixReplaceCodes}`);\n const pattern = `(${oldPrefix})`;\n const replacement = `(${newPrefix})`;\n record.getDatafields()\n .forEach(field => {\n field.subfields\n .filter(({code}) => prefixReplaceCodes.includes(code))\n .forEach(subfield => {\n subfield.value = subfield.value.replace(pattern, replacement);\n });\n });\n return record;\n}\n\n\nfunction generateMissingSIDs(record, options) {\n\n const f035Filters = options && options.f035Filters ? options.f035Filters : [];\n const fSIDFilters = options && options.fSIDFilters ? options.fSIDFilters : [];\n\n if (f035Filters.length !== fSIDFilters.length) {\n debug(`NOT running generateMissingSIDs: f035Filters (${f035Filters.length}) and fSIDFilters (${fSIDFilters.length}) lengths differ`);\n return record;\n }\n if (f035Filters.length < 1) {\n debug(`NOT running generateMissingSIDs, no options`);\n return record;\n }\n\n debug(`Running generateMissingSIDs fixer`);\n debugData(`generateMissingSIDs options: ${JSON.stringify(options)}`);\n\n const f035s = f035ToSidInfo(record.get(/^035$/u));\n const fSIDs = sidsToSidInfo(record.get(/^SID$/u));\n\n const sidsToBeAdded = genNewSids(fSIDs.length === 0\n ? f035s\n // test that SIDs are not there yet\n : f035s.filter(f035SidInfo => !fSIDs.some(fSIDInfo => f035SidInfo.SID === fSIDInfo.SID && f035SidInfo.value === fSIDInfo.value)));\n\n debugData(`Adding (${sidsToBeAdded.length}) SIDs: ${JSON.stringify(sidsToBeAdded)}`);\n\n // Add new SIDs\n sidsToBeAdded.forEach(sidField => record.insertField(sidField));\n return record;\n\n function genNewSids(sidsToBeAdded) {\n return sidsToBeAdded.map(sidInfo => ({tag: 'SID', ind1: ' ', ind2: ' ', subfields: [{code: 'c', value: sidInfo.value}, {code: 'b', value: sidInfo.SID}]}));\n }\n\n function sidsToSidInfo(SIDs) {\n return SIDs.flatMap(({subfields}) => {\n const [SID] = subfields.filter(sub => sub.code === 'b' && fSIDFilters.includes(sub.value)).map(sub => sub.value);\n const [value] = subfields.filter(sub => sub.code === 'c' && sub.value !== undefined).map(sub => sub.value);\n\n if (SID && value) {\n return {\n SID,\n value\n };\n }\n\n return undefined;\n }).filter(value => value !== undefined);\n }\n\n function f035ToSidInfo(f035s) {\n return f035s.flatMap(({subfields}) => {\n // single pass over the filters - the subfield AND the SID are\n // both chosen by the SAME first matching filter index (previously the\n // subfield matched any filter but the SID lookup re-scanned with\n // findIndex, which was order-sensitive and O(n^2) per field)\n const wantedSub = subfields.find(sub => sub.code === 'a' && f035Filters.findIndex(regexp => regexp.test(sub.value)) > -1);\n\n if (wantedSub) {\n const filterIndex = f035Filters.findIndex(regexp => regexp.test(wantedSub.value));\n return {\n SID: fSIDFilters[filterIndex],\n value: wantedSub.value.slice(wantedSub.value.indexOf(')') + 1)\n };\n }\n\n return undefined;\n }).filter(value => value !== undefined);\n }\n}\n\n\nfunction stripF984s(record, stripF984sSettings) {\n const F984A_PATTERN = /^(?:ALWAYS|NEVER)-PREFER-IN-MERGE$/u;\n const config = [\n {\n tag: /^984$/u,\n subfields: [\n {\n code: /a/u,\n value: F984A_PATTERN\n }\n ]\n }\n ];\n\n debugData(`removeF984AFieldsSettings: ${JSON.stringify(stripF984sSettings)}`);\n\n if (!stripF984sSettings || !F984A_PATTERN || record.get('984').length < 1) {\n debug(`No settings or pattern for removeF984AFields or f984 in record`);\n return record;\n }\n\n debug(`Removing f984 fields with subfield $a consisting values ${F984A_PATTERN.toString()}`);\n const validator = FieldExclusion(config);\n validator.fix(record);\n return record;\n\n}\n\nfunction stripMelindaTempSubfields(record, stripMelindaTempSubfieldsSettings) {\n if (!stripMelindaTempSubfieldsSettings) {\n debug(`No settings for stripMelindaTempSubfields`);\n return record;\n }\n // NOTE: we remove $9 MELINDA<TEMP> subfields only from f856\n // Anchored so e.g. tag '8560'-ish values or multi-char subfield codes can\n // never over-match (SubfieldExclusion tests these RegExps, not replaces)\n const tagPattern = /^856$/u;\n const subfieldCodePattern = /^9$/u;\n const subfieldValuePattern = /^MELINDA<TEMP>$/u;\n const config = [\n {\n tag: tagPattern,\n subfields: [\n {\n code: subfieldCodePattern,\n value: subfieldValuePattern\n }\n ]\n }\n ];\n\n debug(`Running stripMelindaTempSubfields`);\n\n const validator = SubfieldExclusion(config);\n validator.fix(record);\n return record;\n}\n"],
5
- "mappings": "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",
6
- "names": ["sidsToBeAdded", "f035s"]
7
- }
1
+ {"version":3,"file":"fix.js","sourceRoot":"","sources":["../../src/helpers/fix.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { MarcRecord, MarcRecordObject } from '@natlibfi/marc-record';
2
+ export interface ValidationResult {
3
+ record: MarcRecord;
4
+ failed: boolean;
5
+ messages: unknown;
6
+ }
7
+ declare const _default: () => Promise<(unvalidRecord: MarcRecord | MarcRecordObject) => Promise<ValidationResult>>;
8
+ export default _default;
9
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/helpers/validation.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,UAAU,EAAE,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AAKxE,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;8BAEwB,OAAO,CAAC,CAAC,aAAa,EAAE,UAAU,GAAG,gBAAgB,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAA7G,wBAgBE"}
@@ -1,19 +1,17 @@
1
- import validateFactory from "@natlibfi/marc-record-validate";
2
- import {
3
- FieldStructure as fieldStructure
4
- } from "@natlibfi/marc-record-validators-melinda";
5
- import { createLogger } from "@natlibfi/melinda-commons";
1
+ import validateFactory from '@natlibfi/marc-record-validate';
2
+ import { FieldStructure as fieldStructure } from '@natlibfi/marc-record-validators-melinda';
3
+ import { createLogger } from '@natlibfi/melinda-commons';
6
4
  export default async () => {
7
- const logger = createLogger();
8
- logger.verbose("Running inbuilt record validations");
9
- const validate = validateFactory([await fieldStructure([{ tag: /^003$/u, valuePattern: /^FI-MELINDA$/u }])]);
10
- return async (unvalidRecord) => {
11
- const { record, valid, report } = await validate(unvalidRecord, { fix: false, validateFixes: false }, { subfieldValues: false });
12
- return {
13
- record,
14
- failed: valid === false,
15
- messages: report
5
+ const logger = createLogger();
6
+ logger.verbose('Running inbuilt record validations');
7
+ const validate = validateFactory([await fieldStructure([{ tag: /^003$/u, valuePattern: /^FI-MELINDA$/u }])]);
8
+ return async (unvalidRecord) => {
9
+ const { record, valid, report } = await validate(unvalidRecord, { fix: false, validateFixes: false }, { subfieldValues: false });
10
+ return {
11
+ record,
12
+ failed: valid === false,
13
+ messages: report
14
+ };
16
15
  };
17
- };
18
16
  };
19
- //# sourceMappingURL=validation.js.map
17
+ //# sourceMappingURL=validation.js.map
@@ -1,7 +1 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/helpers/validation.js"],
4
- "sourcesContent": ["import validateFactory from '@natlibfi/marc-record-validate';\nimport {\n FieldStructure as fieldStructure\n} from '@natlibfi/marc-record-validators-melinda';\nimport {createLogger} from '@natlibfi/melinda-commons';\n\nexport default async () => {\n const logger = createLogger();\n\n logger.verbose('Running inbuilt record validations');\n const validate = validateFactory([await fieldStructure([{tag: /^003$/u, valuePattern: /^FI-MELINDA$/u}])]);\n\n return async unvalidRecord => {\n const {record, valid, report} = await validate(unvalidRecord, {fix: false, validateFixes: false}, {subfieldValues: false});\n\n return {\n record,\n failed: valid === false,\n messages: report\n };\n };\n};\n"],
5
- "mappings": "AAAA,OAAO,qBAAqB;AAC5B;AAAA,EACE,kBAAkB;AAAA,OACb;AACP,SAAQ,oBAAmB;AAE3B,eAAe,YAAY;AACzB,QAAM,SAAS,aAAa;AAE5B,SAAO,QAAQ,oCAAoC;AACnD,QAAM,WAAW,gBAAgB,CAAC,MAAM,eAAe,CAAC,EAAC,KAAK,UAAU,cAAc,gBAAe,CAAC,CAAC,CAAC,CAAC;AAEzG,SAAO,OAAM,kBAAiB;AAC5B,UAAM,EAAC,QAAQ,OAAO,OAAM,IAAI,MAAM,SAAS,eAAe,EAAC,KAAK,OAAO,eAAe,MAAK,GAAG,EAAC,gBAAgB,MAAK,CAAC;AAEzH,WAAO;AAAA,MACL;AAAA,MACA,QAAQ,UAAU;AAAA,MAClB,UAAU;AAAA,IACZ;AAAA,EACF;AACF;",
6
- "names": []
7
- }
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/helpers/validation.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EACL,cAAc,IAAI,cAAc,EACjC,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAC,YAAY,EAAC,MAAM,2BAA2B,CAAC;AAYvD,eAAe,KAAK,IAA0F,EAAE;IAC9G,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAE9B,MAAM,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,MAAM,cAAc,CAAC,CAAC,EAAC,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAG3G,OAAO,KAAK,EAAE,aAA4C,EAAE,EAAE;QAC5D,MAAM,EAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAC,GAAG,MAAM,QAAQ,CAAC,aAAa,EAAE,EAAC,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAC,EAAE,EAAC,cAAc,EAAE,KAAK,EAAC,CAAC,CAAC;QAE3H,OAAO;YACL,MAAM;YACN,MAAM,EAAE,KAAK,KAAK,KAAK;YACvB,QAAQ,EAAE,MAAM;SACjB,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import mongoFactory from './mongo.ts';
2
+ import mongoLogFactory from './mongoLog.ts';
3
+ import amqpFactory from './amqp.ts';
4
+ import conversions from './helpers/conversion.ts';
5
+ import validations from './helpers/validation.ts';
6
+ import * as fixes from './helpers/fix.ts';
7
+ import { logError, createImportJobState, createRecordResponseItem, addRecordResponseItem, addRecordResponseItems } from './utils.ts';
8
+ export { mongoFactory, mongoLogFactory, amqpFactory, conversions, validations, fixes, logError, createImportJobState, createRecordResponseItem, addRecordResponseItem, addRecordResponseItems };
9
+ export * from './constants.ts';
10
+ export type { AmqpOperator, QueueItemMessagePayload, QueueItemRecordPayload } from './amqp.ts';
11
+ export type { ImportJobStateValue, MongoOperator, QueueItem } from './mongo.ts';
12
+ export type { LogItem, LogItemType, MongoLogOperator } from './mongoLog.ts';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,YAAY,CAAC;AACtC,OAAO,eAAe,MAAM,eAAe,CAAC;AAC5C,OAAO,WAAW,MAAM,WAAW,CAAC;AACpC,OAAO,WAAW,MAAM,yBAAyB,CAAC;AAClD,OAAO,WAAW,MAAM,yBAAyB,CAAC;AAClD,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAC,QAAQ,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,sBAAsB,EAAC,MAAM,YAAY,CAAC;AAEnI,OAAO,EAAC,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,sBAAsB,EAAC,CAAC;AAC9L,cAAc,gBAAgB,CAAC;AAK/B,YAAY,EAAC,YAAY,EAAE,uBAAuB,EAAE,sBAAsB,EAAC,MAAM,WAAW,CAAC;AAC7F,YAAY,EAAC,mBAAmB,EAAE,aAAa,EAAE,SAAS,EAAC,MAAM,YAAY,CAAC;AAC9E,YAAY,EAAC,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAC,MAAM,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -7,4 +7,4 @@ import * as fixes from "./helpers/fix.js";
7
7
  import { logError, createImportJobState, createRecordResponseItem, addRecordResponseItem, addRecordResponseItems } from "./utils.js";
8
8
  export { mongoFactory, mongoLogFactory, amqpFactory, conversions, validations, fixes, logError, createImportJobState, createRecordResponseItem, addRecordResponseItem, addRecordResponseItems };
9
9
  export * from "./constants.js";
10
- //# sourceMappingURL=index.js.map
10
+ //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1,7 +1 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/index.js"],
4
- "sourcesContent": ["\n\nimport mongoFactory from './mongo.js';\nimport mongoLogFactory from './mongoLog.js';\nimport amqpFactory from './amqp.js';\nimport conversions from './helpers/conversion.js';\nimport validations from './helpers/validation.js';\nimport * as fixes from './helpers/fix.js';\nimport {logError, createImportJobState, createRecordResponseItem, addRecordResponseItem, addRecordResponseItems} from './utils.js';\n\nexport {mongoFactory, mongoLogFactory, amqpFactory, conversions, validations, fixes, logError, createImportJobState, createRecordResponseItem, addRecordResponseItem, addRecordResponseItems};\nexport * from './constants.js';\n"],
5
- "mappings": "AAEA,OAAO,kBAAkB;AACzB,OAAO,qBAAqB;AAC5B,OAAO,iBAAiB;AACxB,OAAO,iBAAiB;AACxB,OAAO,iBAAiB;AACxB,YAAY,WAAW;AACvB,SAAQ,UAAU,sBAAsB,0BAA0B,uBAAuB,8BAA6B;AAEtH,SAAQ,cAAc,iBAAiB,aAAa,aAAa,aAAa,OAAO,UAAU,sBAAsB,0BAA0B,uBAAuB;AACtK,cAAc;",
6
- "names": []
7
- }
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,YAAY,CAAC;AACtC,OAAO,eAAe,MAAM,eAAe,CAAC;AAC5C,OAAO,WAAW,MAAM,WAAW,CAAC;AACpC,OAAO,WAAW,MAAM,yBAAyB,CAAC;AAClD,OAAO,WAAW,MAAM,yBAAyB,CAAC;AAClD,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAC,QAAQ,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,sBAAsB,EAAC,MAAM,YAAY,CAAC;AAEnI,OAAO,EAAC,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,sBAAsB,EAAC,CAAC;AAC9L,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,165 @@
1
+ import type { WithId } from 'mongodb';
2
+ import type { Readable } from 'stream';
3
+ import { IMPORT_JOB_STATE } from './constants.ts';
4
+ export type ImportJobStateValue = (typeof IMPORT_JOB_STATE)[keyof typeof IMPORT_JOB_STATE];
5
+ export interface QueueItem {
6
+ correlationId: string;
7
+ cataloger?: string;
8
+ oCatalogerIn?: string;
9
+ operation?: string;
10
+ operations: string[];
11
+ contentType?: string;
12
+ recordLoadParams?: unknown;
13
+ operationSettings: {
14
+ prio?: boolean;
15
+ noStream?: boolean;
16
+ };
17
+ queueItemState: string;
18
+ importJobState: {
19
+ CREATE: ImportJobStateValue;
20
+ UPDATE: ImportJobStateValue;
21
+ FIX: ImportJobStateValue;
22
+ };
23
+ blobSize?: number;
24
+ records?: unknown[];
25
+ handledIds?: string[];
26
+ rejectedIds?: string[];
27
+ messages?: unknown[];
28
+ errorMessage?: string;
29
+ errorStatus?: string | number;
30
+ creationTime?: Date;
31
+ modificationTime?: Date;
32
+ }
33
+ export interface CreatePrioParams {
34
+ correlationId: string;
35
+ cataloger: string;
36
+ oCatalogerIn: string;
37
+ operation: string;
38
+ operationSettings?: Record<string, unknown>;
39
+ }
40
+ export interface CreateBulkParams {
41
+ correlationId: string;
42
+ cataloger: string;
43
+ oCatalogerIn: string;
44
+ operation: string;
45
+ contentType: string;
46
+ recordLoadParams: unknown;
47
+ stream?: Readable;
48
+ operationSettings?: Record<string, unknown>;
49
+ }
50
+ export interface CreateBulkResult {
51
+ correlationId: string;
52
+ acknowledged: boolean;
53
+ queueItemState: string;
54
+ }
55
+ export interface CheckAndSetStateParams {
56
+ correlationId: string;
57
+ state: string;
58
+ errorMessage?: unknown;
59
+ errorStatus?: unknown;
60
+ }
61
+ export interface CheckAndSetImportJobStateParams {
62
+ correlationId: string;
63
+ operation: string;
64
+ importJobState: string;
65
+ }
66
+ export interface CheckAndSetResult {
67
+ status: 'updated' | 'timeout' | 'unchanged';
68
+ queueItem: WithId<QueueItem> | null;
69
+ }
70
+ export interface QueryParams {
71
+ limit?: number | string;
72
+ skip?: number | string;
73
+ [key: string]: unknown;
74
+ }
75
+ export interface ShowParams {
76
+ showAll?: boolean | 0;
77
+ showOperations?: boolean | 0;
78
+ showOperationSettings?: boolean | 0;
79
+ showRecordLoadParams?: boolean | 0;
80
+ showImportJobState?: boolean | 0;
81
+ }
82
+ export interface QueryByIdParams {
83
+ correlationId: string;
84
+ checkModTime?: boolean;
85
+ }
86
+ export interface CheckTimeOutParams {
87
+ correlationId: string;
88
+ operation?: string;
89
+ importJobState?: string;
90
+ }
91
+ export interface GetOneParams {
92
+ queueItemState?: string;
93
+ importJobState?: Record<string, unknown>;
94
+ }
95
+ export interface SetStateParams {
96
+ correlationId: string;
97
+ state: string;
98
+ errorMessage?: unknown;
99
+ errorStatus?: unknown;
100
+ }
101
+ export interface SetImportJobStateParams {
102
+ correlationId: string;
103
+ operation: string;
104
+ importJobState: string;
105
+ }
106
+ export interface PushIdsParams {
107
+ correlationId: string;
108
+ handledIds: string[];
109
+ rejectedIds: string[];
110
+ }
111
+ export interface PushMessagesParams {
112
+ correlationId: string;
113
+ messages: unknown[];
114
+ messageField?: string;
115
+ }
116
+ export interface MongoOperator {
117
+ createPrio: (params: CreatePrioParams) => Promise<void>;
118
+ createBulk: (params: CreateBulkParams) => Promise<CreateBulkResult | undefined>;
119
+ checkAndSetState: (params: CheckAndSetStateParams) => Promise<CheckAndSetResult>;
120
+ checkAndSetImportJobState: (params: CheckAndSetImportJobStateParams) => Promise<CheckAndSetResult>;
121
+ query: (params: QueryParams, showParams?: ShowParams) => Promise<WithId<QueueItem>[]>;
122
+ createProjection: (showParams?: ShowParams) => Record<string, number>;
123
+ queryById: (params: QueryByIdParams) => Promise<WithId<QueueItem> | null>;
124
+ checkTimeOut: (params: CheckTimeOutParams) => Promise<boolean>;
125
+ remove: (params: {
126
+ correlationId: string;
127
+ }) => Promise<{
128
+ removed: boolean;
129
+ deletedContent: boolean;
130
+ }>;
131
+ readContent: (correlationId: string) => Promise<{
132
+ contentType: string | undefined;
133
+ readStream: Readable;
134
+ }>;
135
+ removeContent: (params: {
136
+ correlationId: string;
137
+ }) => Promise<boolean>;
138
+ getOne: (params: GetOneParams) => Promise<WithId<QueueItem> | null>;
139
+ getStream: (correlationId: string) => Promise<Readable>;
140
+ setState: (params: SetStateParams) => Promise<WithId<QueueItem> | null>;
141
+ setImportJobState: (params: SetImportJobStateParams) => Promise<WithId<QueueItem> | null>;
142
+ pushIds: (params: PushIdsParams) => Promise<void>;
143
+ pushMessages: (params: PushMessagesParams) => Promise<void>;
144
+ setOperation: (params: {
145
+ correlationId: string;
146
+ operation: string;
147
+ }) => Promise<WithId<QueueItem>>;
148
+ setOperations: (params: {
149
+ correlationId: string;
150
+ addOperation: string;
151
+ removeOperation?: string;
152
+ }) => Promise<WithId<QueueItem>>;
153
+ addBlobSize: (params: {
154
+ correlationId: string;
155
+ }) => Promise<WithId<QueueItem> | null>;
156
+ setBlobSize: (params: {
157
+ correlationId: string;
158
+ blobSize: number;
159
+ }) => Promise<WithId<QueueItem> | null>;
160
+ }
161
+ export default function (MONGO_URI: string, collection: string, db?: string, deps?: {
162
+ operator?: unknown;
163
+ gridFSBucket?: unknown;
164
+ }): Promise<MongoOperator>;
165
+ //# sourceMappingURL=mongo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongo.d.ts","sourceRoot":"","sources":["../src/mongo.ts"],"names":[],"mappings":"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"}