@natlibfi/melinda-rest-api-commons 4.1.4-alpha.4 → 4.1.5
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.yml +2 -2
- package/README.md +1 -1
- package/dist/amqp.health.spec.js.map +1 -1
- package/dist/amqp.js.map +1 -1
- package/dist/amqp.tests.spec.js.map +1 -1
- package/dist/constants.js +1 -2
- package/dist/constants.js.map +1 -1
- package/dist/helpers/conversion.js.map +1 -1
- package/dist/helpers/conversion.spec.js.map +1 -1
- package/dist/helpers/fix-constants.js.map +1 -1
- package/dist/helpers/fix-handle-tempurns.js.map +1 -1
- package/dist/helpers/fix-strip-f884s.js.map +1 -1
- package/dist/helpers/fix-utils.js.map +1 -1
- package/dist/helpers/fix.js.map +1 -1
- package/dist/helpers/fix.spec.js +1 -1
- package/dist/helpers/fix.spec.js.map +1 -1
- package/dist/helpers/validation.js.map +1 -1
- package/dist/helpers/validation.spec.js +1 -1
- package/dist/helpers/validation.spec.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mongo.js +8 -32
- package/dist/mongo.js.map +1 -1
- package/dist/mongoLog.js.map +1 -1
- package/dist/mongoLog.spec.js.map +1 -1
- package/dist/utils.js +1 -1
- package/dist/utils.js.map +1 -1
- package/package.json +18 -18
package/dist/helpers/fix.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fix.js","names":["_marcRecord","require","_melindaBackendCommons","_debug","_interopRequireDefault","_fixHandleTempurns","_fixStripF884s","_marcRecordValidatorsMelinda","_fixConstants","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","logger","createLogger","debug","createDebugLogger","debugData","extend","fixRecord","record","settings","verbose","JSON","stringify","newRecord","MarcRecord","clone","subfieldValues","generateMissingSIDsOptions","generateMissingSIDs","undefined","newRecord1","replacePrefixesOptions","replacePrefixes","newRecord2","replaceAllPrefixes","newRecord3","handleTempUrns","newRecord4","stripF884s","newRecord5","stripF984s","toObject","length","options","replacePrefix","oldPrefix","newPrefix","prefixReplaceCodes","pattern","replacement","getDatafields","field","subfields","filter","code","includes","subfield","value","replace","f035Filters","fSIDFilters","f035s","f035ToSidInfo","fSIDs","sidsToSidInfo","sidsToBeAdded","genNewSids","f035SidInfo","some","fSIDInfo","SID","sidField","insertField","map","sidInfo","tag","ind1","ind2","SIDs","flatMap","sub","wantedSub","regexp","test","findIndex","slice","indexOf","stripF984sSettings","F984A_PATTERN","config","toString","validator","FieldExclusion","fix"],"sources":["../../src/helpers/fix.js"],"sourcesContent":["import {MarcRecord} from '@natlibfi/marc-record';\nimport {createLogger} from '@natlibfi/melinda-backend-commons';\nimport createDebugLogger from 'debug';\n\nimport {handleTempUrns} from './fix-handle-tempurns';\nimport {stripF884s} from './fix-strip-f884s';\n\nimport {FieldExclusion} from '@natlibfi/marc-record-validators-melinda';\n\nexport * from './fix-constants';\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 debugData(newRecord5);\n\n return newRecord5.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); // eslint-disable-line functional/immutable-data\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 || f035Filters.length < 1 || fSIDFilters.length < 1) {\n debug(`NOT running generateMissingsSIDs, 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 const [wantedSub] = subfields.filter(sub => sub.code === 'a' && f035Filters.some(regexp => regexp.test(sub.value)));\n\n if (wantedSub) {\n return {\n SID: fSIDFilters[f035Filters.findIndex(regexp => regexp.test(wantedSub.value))],\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 debug(`Running removeF984AFields`);\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 // eslint-disable-next-line new-cap\n const validator = FieldExclusion(config);\n validator.fix(record);\n return record;\n\n}\n\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fix.js","names":["_marcRecord","require","_melindaBackendCommons","_debug","_interopRequireDefault","_fixHandleTempurns","_fixStripF884s","_marcRecordValidatorsMelinda","_fixConstants","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","logger","createLogger","debug","createDebugLogger","debugData","extend","fixRecord","record","settings","verbose","JSON","stringify","newRecord","MarcRecord","clone","subfieldValues","generateMissingSIDsOptions","generateMissingSIDs","undefined","newRecord1","replacePrefixesOptions","replacePrefixes","newRecord2","replaceAllPrefixes","newRecord3","handleTempUrns","newRecord4","stripF884s","newRecord5","stripF984s","toObject","length","options","replacePrefix","oldPrefix","newPrefix","prefixReplaceCodes","pattern","replacement","getDatafields","field","subfields","filter","code","includes","subfield","value","replace","f035Filters","fSIDFilters","f035s","f035ToSidInfo","fSIDs","sidsToSidInfo","sidsToBeAdded","genNewSids","f035SidInfo","some","fSIDInfo","SID","sidField","insertField","map","sidInfo","tag","ind1","ind2","SIDs","flatMap","sub","wantedSub","regexp","test","findIndex","slice","indexOf","stripF984sSettings","F984A_PATTERN","config","toString","validator","FieldExclusion","fix"],"sources":["../../src/helpers/fix.js"],"sourcesContent":["import {MarcRecord} from '@natlibfi/marc-record';\nimport {createLogger} from '@natlibfi/melinda-backend-commons';\nimport createDebugLogger from 'debug';\n\nimport {handleTempUrns} from './fix-handle-tempurns';\nimport {stripF884s} from './fix-strip-f884s';\n\nimport {FieldExclusion} from '@natlibfi/marc-record-validators-melinda';\n\nexport * from './fix-constants';\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 debugData(newRecord5);\n\n return newRecord5.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); // eslint-disable-line functional/immutable-data\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 || f035Filters.length < 1 || fSIDFilters.length < 1) {\n debug(`NOT running generateMissingsSIDs, 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 const [wantedSub] = subfields.filter(sub => sub.code === 'a' && f035Filters.some(regexp => regexp.test(sub.value)));\n\n if (wantedSub) {\n return {\n SID: fSIDFilters[f035Filters.findIndex(regexp => regexp.test(wantedSub.value))],\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 debug(`Running removeF984AFields`);\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 // eslint-disable-next-line new-cap\n const validator = FieldExclusion(config);\n validator.fix(record);\n return record;\n\n}\n\n"],"mappings":";;;;;;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,sBAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAC,sBAAA,CAAAH,OAAA;AAEA,IAAAI,kBAAA,GAAAJ,OAAA;AACA,IAAAK,cAAA,GAAAL,OAAA;AAEA,IAAAM,4BAAA,GAAAN,OAAA;AAEA,IAAAO,aAAA,GAAAP,OAAA;AAAAQ,MAAA,CAAAC,IAAA,CAAAF,aAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,aAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,aAAA,CAAAI,GAAA;IAAA;EAAA;AAAA;AAEA,MAAMS,MAAM,GAAG,IAAAC,mCAAY,EAAC,CAAC;AAC7B,MAAMC,KAAK,GAAG,IAAAC,cAAiB,EAAC,8CAA8C,CAAC;AAC/E,MAAMC,SAAS,GAAGF,KAAK,CAACG,MAAM,CAAC,MAAM,CAAC;AAE/B,SAASC,SAASA,CAACC,MAAM,EAAEC,QAAQ,GAAG,CAAC,CAAC,EAAE;EAE/CR,MAAM,CAACS,OAAO,CAAE,iEAAgEC,IAAI,CAACC,SAAS,CAACH,QAAQ,CAAE,EAAC,CAAC;EAC3G,MAAMI,SAAS,GAAGC,sBAAU,CAACC,KAAK,CAACP,MAAM,EAAE;IAACQ,cAAc,EAAE;EAAK,CAAC,CAAC;EACnEX,SAAS,CAAE,aAAYM,IAAI,CAACC,SAAS,CAACH,QAAQ,CAAE,EAAC,CAAC;;EAElD;;EAEA;EACA,MAAMQ,0BAA0B,GAAGR,QAAQ,CAACS,mBAAmB,IAAIC,SAAS;EAC5E,MAAMC,UAAU,GAAGF,mBAAmB,CAACL,SAAS,EAAEI,0BAA0B,CAAC;;EAE7E;EACA,MAAMI,sBAAsB,GAAGZ,QAAQ,CAACa,eAAe,IAAI,EAAE;EAC7D,MAAMC,UAAU,GAAGC,kBAAkB,CAACJ,UAAU,EAAEC,sBAAsB,CAAC;;EAEzE;EACA,MAAMI,UAAU,GAAG,IAAAC,iCAAc,EAACH,UAAU,EAAEd,QAAQ,CAACiB,cAAc,CAAC;;EAEtE;EACA,MAAMC,UAAU,GAAG,IAAAC,yBAAU,EAACH,UAAU,EAAEhB,QAAQ,CAACmB,UAAU,CAAC;;EAE9D;EACA,MAAMC,UAAU,GAAGC,UAAU,CAACH,UAAU,EAAElB,QAAQ,CAACqB,UAAU,IAAI,KAAK,CAAC;EACvEzB,SAAS,CAACwB,UAAU,CAAC;EAErB,OAAOA,UAAU,CAACE,QAAQ,CAAC,CAAC;AAE9B;AAGA,SAASP,kBAAkBA,CAAChB,MAAM,EAAEa,sBAAsB,EAAE;EAC1D,IAAIA,sBAAsB,CAACW,MAAM,GAAG,CAAC,EAAE;IACrC7B,KAAK,CAAE,yCAAwC,CAAC;IAChD,OAAOK,MAAM;EACf;EAEAL,KAAK,CAAE,+BAA8B,CAAC;EACtCE,SAAS,CAAE,2BAA0BM,IAAI,CAACC,SAAS,CAACS,sBAAsB,CAAE,EAAC,CAAC;EAE9EA,sBAAsB,CAAC9B,OAAO,CAAC0C,OAAO,IAAI;IACxCC,aAAa,CAAC1B,MAAM,EAAEyB,OAAO,CAAC;EAChC,CAAC,CAAC;EACF,OAAOzB,MAAM;AACf;;AAGA;AACA,SAAS0B,aAAaA,CAAC1B,MAAM,EAAEyB,OAAO,EAAE;EACtC,MAAM;IAACE,SAAS;IAAEC,SAAS;IAAEC;EAAkB,CAAC,GAAGJ,OAAO;EAC1D9B,KAAK,CAAE,aAAYgC,SAAU,SAAQC,SAAU,iBAAgBC,kBAAmB,EAAC,CAAC;EACpF,MAAMC,OAAO,GAAI,IAAGH,SAAU,GAAE;EAChC,MAAMI,WAAW,GAAI,IAAGH,SAAU,GAAE;EACpC5B,MAAM,CAACgC,aAAa,CAAC,CAAC,CACnBjD,OAAO,CAACkD,KAAK,IAAI;IAChBA,KAAK,CAACC,SAAS,CACZC,MAAM,CAAC,CAAC;MAACC;IAAI,CAAC,KAAKP,kBAAkB,CAACQ,QAAQ,CAACD,IAAI,CAAC,CAAC,CACrDrD,OAAO,CAACuD,QAAQ,IAAI;MACnBA,QAAQ,CAACC,KAAK,GAAGD,QAAQ,CAACC,KAAK,CAACC,OAAO,CAACV,OAAO,EAAEC,WAAW,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC;EACN,CAAC,CAAC;EACJ,OAAO/B,MAAM;AACf;AAGA,SAASU,mBAAmBA,CAACV,MAAM,EAAEyB,OAAO,EAAE;EAE5C,MAAMgB,WAAW,GAAGhB,OAAO,IAAIA,OAAO,CAACgB,WAAW,GAAGhB,OAAO,CAACgB,WAAW,GAAG,EAAE;EAC7E,MAAMC,WAAW,GAAGjB,OAAO,IAAIA,OAAO,CAACiB,WAAW,GAAGjB,OAAO,CAACiB,WAAW,GAAG,EAAE;EAE7E,IAAID,WAAW,CAACjB,MAAM,KAAKkB,WAAW,CAAClB,MAAM,IAAIiB,WAAW,CAACjB,MAAM,GAAG,CAAC,IAAIkB,WAAW,CAAClB,MAAM,GAAG,CAAC,EAAE;IACjG7B,KAAK,CAAE,8CAA6C,CAAC;IACrD,OAAOK,MAAM;EACf;EAEAL,KAAK,CAAE,mCAAkC,CAAC;EAC1CE,SAAS,CAAE,gCAA+BM,IAAI,CAACC,SAAS,CAACqB,OAAO,CAAE,EAAC,CAAC;EAEpE,MAAMkB,KAAK,GAAGC,aAAa,CAAC5C,MAAM,CAACR,GAAG,CAAC,QAAQ,CAAC,CAAC;EACjD,MAAMqD,KAAK,GAAGC,aAAa,CAAC9C,MAAM,CAACR,GAAG,CAAC,QAAQ,CAAC,CAAC;EAEjD,MAAMuD,aAAa,GAAGC,UAAU,CAACH,KAAK,CAACrB,MAAM,KAAK,CAAC,GAC/CmB;EACJ;EAAA,EACIA,KAAK,CAACR,MAAM,CAACc,WAAW,IAAI,CAACJ,KAAK,CAACK,IAAI,CAACC,QAAQ,IAAIF,WAAW,CAACG,GAAG,KAAKD,QAAQ,CAACC,GAAG,IAAIH,WAAW,CAACV,KAAK,KAAKY,QAAQ,CAACZ,KAAK,CAAC,CAAC,CAAC;EAEnI1C,SAAS,CAAE,WAAUkD,aAAa,CAACvB,MAAO,WAAUrB,IAAI,CAACC,SAAS,CAAC2C,aAAa,CAAE,EAAC,CAAC;;EAEpF;EACAA,aAAa,CAAChE,OAAO,CAACsE,QAAQ,IAAIrD,MAAM,CAACsD,WAAW,CAACD,QAAQ,CAAC,CAAC;EAC/D,OAAOrD,MAAM;EAEb,SAASgD,UAAUA,CAACD,aAAa,EAAE;IACjC,OAAOA,aAAa,CAACQ,GAAG,CAACC,OAAO,KAAK;MAACC,GAAG,EAAE,KAAK;MAAEC,IAAI,EAAE,GAAG;MAAEC,IAAI,EAAE,GAAG;MAAEzB,SAAS,EAAE,CAAC;QAACE,IAAI,EAAE,GAAG;QAAEG,KAAK,EAAEiB,OAAO,CAACjB;MAAK,CAAC,EAAE;QAACH,IAAI,EAAE,GAAG;QAAEG,KAAK,EAAEiB,OAAO,CAACJ;MAAG,CAAC;IAAC,CAAC,CAAC,CAAC;EAC5J;EAEA,SAASN,aAAaA,CAACc,IAAI,EAAE;IAC3B,OAAOA,IAAI,CAACC,OAAO,CAAC,CAAC;MAAC3B;IAAS,CAAC,KAAK;MACnC,MAAM,CAACkB,GAAG,CAAC,GAAGlB,SAAS,CAACC,MAAM,CAAC2B,GAAG,IAAIA,GAAG,CAAC1B,IAAI,KAAK,GAAG,IAAIM,WAAW,CAACL,QAAQ,CAACyB,GAAG,CAACvB,KAAK,CAAC,CAAC,CAACgB,GAAG,CAACO,GAAG,IAAIA,GAAG,CAACvB,KAAK,CAAC;MAChH,MAAM,CAACA,KAAK,CAAC,GAAGL,SAAS,CAACC,MAAM,CAAC2B,GAAG,IAAIA,GAAG,CAAC1B,IAAI,KAAK,GAAG,IAAI0B,GAAG,CAACvB,KAAK,KAAK5B,SAAS,CAAC,CAAC4C,GAAG,CAACO,GAAG,IAAIA,GAAG,CAACvB,KAAK,CAAC;MAE1G,IAAIa,GAAG,IAAIb,KAAK,EAAE;QAChB,OAAO;UACLa,GAAG;UACHb;QACF,CAAC;MACH;MAEA,OAAO5B,SAAS;IAClB,CAAC,CAAC,CAACwB,MAAM,CAACI,KAAK,IAAIA,KAAK,KAAK5B,SAAS,CAAC;EACzC;EAEA,SAASiC,aAAaA,CAACD,KAAK,EAAE;IAC5B,OAAOA,KAAK,CAACkB,OAAO,CAAC,CAAC;MAAC3B;IAAS,CAAC,KAAK;MACpC,MAAM,CAAC6B,SAAS,CAAC,GAAG7B,SAAS,CAACC,MAAM,CAAC2B,GAAG,IAAIA,GAAG,CAAC1B,IAAI,KAAK,GAAG,IAAIK,WAAW,CAACS,IAAI,CAACc,MAAM,IAAIA,MAAM,CAACC,IAAI,CAACH,GAAG,CAACvB,KAAK,CAAC,CAAC,CAAC;MAEnH,IAAIwB,SAAS,EAAE;QACb,OAAO;UACLX,GAAG,EAAEV,WAAW,CAACD,WAAW,CAACyB,SAAS,CAACF,MAAM,IAAIA,MAAM,CAACC,IAAI,CAACF,SAAS,CAACxB,KAAK,CAAC,CAAC,CAAC;UAC/EA,KAAK,EAAEwB,SAAS,CAACxB,KAAK,CAAC4B,KAAK,CAACJ,SAAS,CAACxB,KAAK,CAAC6B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;QAC/D,CAAC;MACH;MAEA,OAAOzD,SAAS;IAClB,CAAC,CAAC,CAACwB,MAAM,CAACI,KAAK,IAAIA,KAAK,KAAK5B,SAAS,CAAC;EACzC;AACF;AAGA,SAASW,UAAUA,CAACtB,MAAM,EAAEqE,kBAAkB,EAAE;EAC9C,MAAMC,aAAa,GAAG,qCAAqC;EAC3D,MAAMC,MAAM,GAAG,CACb;IACEd,GAAG,EAAE,QAAQ;IACbvB,SAAS,EAAE,CACT;MACEE,IAAI,EAAE,IAAI;MACVG,KAAK,EAAE+B;IACT,CAAC;EAEL,CAAC,CACF;EAED3E,KAAK,CAAE,2BAA0B,CAAC;EAClCE,SAAS,CAAE,8BAA6BM,IAAI,CAACC,SAAS,CAACiE,kBAAkB,CAAE,EAAC,CAAC;EAE7E,IAAI,CAACA,kBAAkB,IAAI,CAACC,aAAa,IAAItE,MAAM,CAACR,GAAG,CAAC,KAAK,CAAC,CAACgC,MAAM,GAAG,CAAC,EAAE;IACzE7B,KAAK,CAAE,gEAA+D,CAAC;IACvE,OAAOK,MAAM;EACf;EAEAL,KAAK,CAAE,2DAA0D2E,aAAa,CAACE,QAAQ,CAAC,CAAE,EAAC,CAAC;EAC5F;EACA,MAAMC,SAAS,GAAG,IAAAC,2CAAc,EAACH,MAAM,CAAC;EACxCE,SAAS,CAACE,GAAG,CAAC3E,MAAM,CAAC;EACrB,OAAOA,MAAM;AAEf","ignoreList":[]}
|
package/dist/helpers/fix.spec.js
CHANGED
|
@@ -9,7 +9,7 @@ var _fix = require("./fix");
|
|
|
9
9
|
var fixSettings = _interopRequireWildcard(require("./fix-constants"));
|
|
10
10
|
var _debug = _interopRequireDefault(require("debug"));
|
|
11
11
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
12
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u &&
|
|
12
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
13
13
|
// import inspect from 'util';
|
|
14
14
|
|
|
15
15
|
const debug = (0, _debug.default)('@natlibfi/melinda-rest-api-commons:fix:test');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fix.spec.js","names":["_chai","require","_marcRecord","_fixura","_fixugen","_interopRequireDefault","_fix","fixSettings","_interopRequireWildcard","_debug","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","
|
|
1
|
+
{"version":3,"file":"fix.spec.js","names":["_chai","require","_marcRecord","_fixura","_fixugen","_interopRequireDefault","_fix","fixSettings","_interopRequireWildcard","_debug","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","debug","createDebugLogger","debugData","extend","generateTests","callback","path","__dirname","recurse","useMetadataFile","fixura","failWhenNotFound","reader","READERS","JSON","getFixture","settings","undefined","Error","runSettings","record","MarcRecord","subfieldValues","expectedRecord","stringify","resultRecord","fixRecord","expect","to","eql"],"sources":["../../src/helpers/fix.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\nimport {fixRecord} from './fix';\nimport * as fixSettings from './fix-constants';\nimport createDebugLogger from 'debug';\n// import inspect from 'util';\n\nconst debug = createDebugLogger('@natlibfi/melinda-rest-api-commons:fix:test');\nconst debugData = debug.extend('data');\n\ngenerateTests({\n callback,\n path: [__dirname, '..', '..', 'test-fixtures', 'fix'],\n recurse: true,\n useMetadataFile: true,\n fixura: {\n failWhenNotFound: false,\n reader: READERS.JSON\n }\n});\n\nfunction callback({getFixture, settings = undefined}) {\n if (settings !== undefined && fixSettings[settings] === undefined) {\n throw new Error(`There are no settings ${settings} defined!`);\n }\n const runSettings = fixSettings[settings] || settings;\n\n const record = new MarcRecord(getFixture('record.json'), {subfieldValues: false});\n const expectedRecord = getFixture('expectedRecord.json');\n\n debug(`Running fixer with settings ${settings}.`);\n debugData(JSON.stringify(runSettings, null, 2));\n\n const resultRecord = fixRecord(record, runSettings);\n debugData(`Result: ${JSON.stringify(resultRecord)}`);\n debugData(`Expected: ${JSON.stringify(expectedRecord)}`);\n expect(resultRecord).to.eql(expectedRecord);\n\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","names":["_marcRecordValidate","_interopRequireDefault","require","_marcRecordValidatorsMelinda","_melindaBackendCommons","_default","logger","createLogger","verbose","validate","validateFactory","fieldStructure","tag","valuePattern","unvalidRecord","record","valid","report","fix","validateFixes","subfieldValues","failed","messages","exports","default"],"sources":["../../src/helpers/validation.js"],"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-backend-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"],"mappings":";;;;;;;AAAA,IAAAA,mBAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,4BAAA,GAAAD,OAAA;AAGA,IAAAE,sBAAA,GAAAF,OAAA;AAA+D,IAAAG,QAAA,GAEhD,MAAAA,CAAA,KAAY;EACzB,MAAMC,MAAM,GAAG,IAAAC,mCAAY,EAAC,CAAC;EAE7BD,MAAM,CAACE,OAAO,CAAC,oCAAoC,CAAC;EACpD,MAAMC,QAAQ,GAAG,IAAAC,2BAAe,EAAC,CAAC,MAAM,IAAAC,2CAAc,EAAC,CAAC;IAACC,GAAG,EAAE,QAAQ;IAAEC,YAAY,EAAE;EAAe,CAAC,CAAC,CAAC,CAAC,CAAC;EAE1G,OAAO,MAAMC,aAAa,IAAI;IAC5B,MAAM;MAACC,MAAM;MAAEC,KAAK;MAAEC;IAAM,CAAC,GAAG,MAAMR,QAAQ,CAACK,aAAa,EAAE;MAACI,GAAG,EAAE,KAAK;MAAEC,aAAa,EAAE;IAAK,CAAC,EAAE;MAACC,cAAc,EAAE;IAAK,CAAC,CAAC;IAE1H,OAAO;MACLL,MAAM;MACNM,MAAM,EAAEL,KAAK,KAAK,KAAK;MACvBM,QAAQ,EAAEL;IACZ,CAAC;EACH,CAAC;AACH,CAAC;AAAAM,OAAA,CAAAC,OAAA,GAAAnB,QAAA"}
|
|
1
|
+
{"version":3,"file":"validation.js","names":["_marcRecordValidate","_interopRequireDefault","require","_marcRecordValidatorsMelinda","_melindaBackendCommons","_default","logger","createLogger","verbose","validate","validateFactory","fieldStructure","tag","valuePattern","unvalidRecord","record","valid","report","fix","validateFixes","subfieldValues","failed","messages","exports","default"],"sources":["../../src/helpers/validation.js"],"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-backend-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"],"mappings":";;;;;;;AAAA,IAAAA,mBAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,4BAAA,GAAAD,OAAA;AAGA,IAAAE,sBAAA,GAAAF,OAAA;AAA+D,IAAAG,QAAA,GAEhD,MAAAA,CAAA,KAAY;EACzB,MAAMC,MAAM,GAAG,IAAAC,mCAAY,EAAC,CAAC;EAE7BD,MAAM,CAACE,OAAO,CAAC,oCAAoC,CAAC;EACpD,MAAMC,QAAQ,GAAG,IAAAC,2BAAe,EAAC,CAAC,MAAM,IAAAC,2CAAc,EAAC,CAAC;IAACC,GAAG,EAAE,QAAQ;IAAEC,YAAY,EAAE;EAAe,CAAC,CAAC,CAAC,CAAC,CAAC;EAE1G,OAAO,MAAMC,aAAa,IAAI;IAC5B,MAAM;MAACC,MAAM;MAAEC,KAAK;MAAEC;IAAM,CAAC,GAAG,MAAMR,QAAQ,CAACK,aAAa,EAAE;MAACI,GAAG,EAAE,KAAK;MAAEC,aAAa,EAAE;IAAK,CAAC,EAAE;MAACC,cAAc,EAAE;IAAK,CAAC,CAAC;IAE1H,OAAO;MACLL,MAAM;MACNM,MAAM,EAAEL,KAAK,KAAK,KAAK;MACvBM,QAAQ,EAAEL;IACZ,CAAC;EACH,CAAC;AACH,CAAC;AAAAM,OAAA,CAAAC,OAAA,GAAAnB,QAAA","ignoreList":[]}
|
|
@@ -6,7 +6,7 @@ var _fixura = _interopRequireWildcard(require("@natlibfi/fixura"));
|
|
|
6
6
|
var _marcRecord = require("@natlibfi/marc-record");
|
|
7
7
|
var _validation = _interopRequireDefault(require("./validation"));
|
|
8
8
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
9
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u &&
|
|
9
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
10
10
|
describe('services/validate', () => {
|
|
11
11
|
const FIXTURES_PATH = [__dirname, '..', '..', 'test-fixtures', 'validation'];
|
|
12
12
|
const {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.spec.js","names":["_chai","require","_fixura","_interopRequireWildcard","_marcRecord","_validation","_interopRequireDefault","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","
|
|
1
|
+
{"version":3,"file":"validation.spec.js","names":["_chai","require","_fixura","_interopRequireWildcard","_marcRecord","_validation","_interopRequireDefault","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","describe","FIXTURES_PATH","__dirname","getFixture","fixtureFactory","root","reader","READERS","JSON","it","validator","createValidator","record","MarcRecord","components","result","toObject","expected","expect","to","eql","failed","equal"],"sources":["../../src/helpers/validation.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport fixtureFactory, {READERS} from '@natlibfi/fixura';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport createValidator from './validation';\n\ndescribe('services/validate', () => {\n const FIXTURES_PATH = [\n __dirname,\n '..',\n '..',\n 'test-fixtures',\n 'validation'\n ];\n const {getFixture} = fixtureFactory({root: FIXTURES_PATH, reader: READERS.JSON});\n\n describe('f003-fi-melinda', () => {\n it('Should have failed: false', async () => {\n const validator = await createValidator();\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'f003-fi-melinda.json'\n ]\n }));\n const result = await validator(record.toObject());\n const expected = getFixture({\n components: [\n 'out',\n 'f003-fi-melinda.json'\n ]\n });\n expect(result).to.eql(expected);\n expect(result.failed).to.equal(false);\n });\n });\n\n describe('f003-not-fi-melinda', () => {\n it('Should have failed: true', async () => {\n const validator = await createValidator();\n const record = new MarcRecord(getFixture({\n components: [\n 'in',\n 'f003-not-fi-melinda.json'\n ]\n }));\n const result = await validator(record.toObject());\n const expected = getFixture({\n components: [\n 'out',\n 'f003-not-fi-melinda.json'\n ]\n });\n expect(result).to.eql(expected);\n expect(result.failed).to.equal(true);\n });\n });\n});\n\n"],"mappings":"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","ignoreList":[]}
|
package/dist/index.js
CHANGED
|
@@ -106,5 +106,5 @@ Object.keys(_constants).forEach(function (key) {
|
|
|
106
106
|
});
|
|
107
107
|
});
|
|
108
108
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
109
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u &&
|
|
109
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
110
110
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_mongo","_interopRequireDefault","require","_mongoLog","_amqp","_conversion","_validation","fixes","_interopRequireWildcard","exports","_utils","_constants","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","defineProperty","enumerable","get","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","n","__proto__","a","getOwnPropertyDescriptor","u","i","set"],"sources":["../src/index.js"],"sourcesContent":["\n\nimport mongoFactory from './mongo';\nimport mongoLogFactory from './mongoLog';\nimport amqpFactory from './amqp';\nimport conversions from './helpers/conversion';\nimport validations from './helpers/validation';\nimport * as fixes from './helpers/fix';\nimport {logError, createImportJobState, createImportJobStateForQuery, createRecordResponseItem, addRecordResponseItem, addRecordResponseItems} from './utils';\n\nexport {mongoFactory, mongoLogFactory, amqpFactory, conversions, validations, fixes, logError, createImportJobState, createImportJobStateForQuery, createRecordResponseItem, addRecordResponseItem, addRecordResponseItems};\nexport * from './constants';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,SAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,KAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,WAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,WAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,KAAA,GAAAC,uBAAA,CAAAN,OAAA;AAAuCO,OAAA,CAAAF,KAAA,GAAAA,KAAA;AACvC,IAAAG,MAAA,GAAAR,OAAA;AAGA,IAAAS,UAAA,GAAAT,OAAA;AAAAU,MAAA,CAAAC,IAAA,CAAAF,UAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAN,OAAA,IAAAA,OAAA,CAAAM,GAAA,MAAAJ,UAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAQ,cAAA,CAAAX,OAAA,EAAAM,GAAA;IAAAM,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAX,UAAA,CAAAI,GAAA;IAAA;EAAA;AAAA;AAA4B,SAAAQ,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAhB,wBAAAgB,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAL,GAAA,CAAAE,CAAA,OAAAO,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAArB,MAAA,CAAAQ,cAAA,IAAAR,MAAA,CAAAsB,wBAAA,WAAAC,CAAA,IAAAX,CAAA,oBAAAW,CAAA,
|
|
1
|
+
{"version":3,"file":"index.js","names":["_mongo","_interopRequireDefault","require","_mongoLog","_amqp","_conversion","_validation","fixes","_interopRequireWildcard","exports","_utils","_constants","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","defineProperty","enumerable","get","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","n","__proto__","a","getOwnPropertyDescriptor","u","i","set"],"sources":["../src/index.js"],"sourcesContent":["\n\nimport mongoFactory from './mongo';\nimport mongoLogFactory from './mongoLog';\nimport amqpFactory from './amqp';\nimport conversions from './helpers/conversion';\nimport validations from './helpers/validation';\nimport * as fixes from './helpers/fix';\nimport {logError, createImportJobState, createImportJobStateForQuery, createRecordResponseItem, addRecordResponseItem, addRecordResponseItems} from './utils';\n\nexport {mongoFactory, mongoLogFactory, amqpFactory, conversions, validations, fixes, logError, createImportJobState, createImportJobStateForQuery, createRecordResponseItem, addRecordResponseItem, addRecordResponseItems};\nexport * from './constants';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,SAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,KAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,WAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,WAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,KAAA,GAAAC,uBAAA,CAAAN,OAAA;AAAuCO,OAAA,CAAAF,KAAA,GAAAA,KAAA;AACvC,IAAAG,MAAA,GAAAR,OAAA;AAGA,IAAAS,UAAA,GAAAT,OAAA;AAAAU,MAAA,CAAAC,IAAA,CAAAF,UAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAN,OAAA,IAAAA,OAAA,CAAAM,GAAA,MAAAJ,UAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAQ,cAAA,CAAAX,OAAA,EAAAM,GAAA;IAAAM,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAX,UAAA,CAAAI,GAAA;IAAA;EAAA;AAAA;AAA4B,SAAAQ,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAhB,wBAAAgB,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAL,GAAA,CAAAE,CAAA,OAAAO,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAArB,MAAA,CAAAQ,cAAA,IAAAR,MAAA,CAAAsB,wBAAA,WAAAC,CAAA,IAAAX,CAAA,oBAAAW,CAAA,OAAAlB,cAAA,CAAAC,IAAA,CAAAM,CAAA,EAAAW,CAAA,SAAAC,CAAA,GAAAH,CAAA,GAAArB,MAAA,CAAAsB,wBAAA,CAAAV,CAAA,EAAAW,CAAA,UAAAC,CAAA,KAAAA,CAAA,CAAAd,GAAA,IAAAc,CAAA,CAAAC,GAAA,IAAAzB,MAAA,CAAAQ,cAAA,CAAAW,CAAA,EAAAI,CAAA,EAAAC,CAAA,IAAAL,CAAA,CAAAI,CAAA,IAAAX,CAAA,CAAAW,CAAA,YAAAJ,CAAA,CAAAF,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAU,GAAA,CAAAb,CAAA,EAAAO,CAAA,GAAAA,CAAA","ignoreList":[]}
|
package/dist/mongo.js
CHANGED
|
@@ -101,8 +101,7 @@ async function _default(MONGO_URI, collection) {
|
|
|
101
101
|
blobSize: 1,
|
|
102
102
|
importJobState: {
|
|
103
103
|
CREATE: _constants.IMPORT_JOB_STATE.EMPTY,
|
|
104
|
-
UPDATE: _constants.IMPORT_JOB_STATE.EMPTY
|
|
105
|
-
FIX: _constants.IMPORT_JOB_STATE.EMPTY
|
|
104
|
+
UPDATE: _constants.IMPORT_JOB_STATE.EMPTY
|
|
106
105
|
},
|
|
107
106
|
records: [],
|
|
108
107
|
errorMessage: '',
|
|
@@ -152,8 +151,7 @@ async function _default(MONGO_URI, collection) {
|
|
|
152
151
|
blobSize: 0,
|
|
153
152
|
importJobState: {
|
|
154
153
|
CREATE: _constants.IMPORT_JOB_STATE.EMPTY,
|
|
155
|
-
UPDATE: _constants.IMPORT_JOB_STATE.EMPTY
|
|
156
|
-
FIX: _constants.IMPORT_JOB_STATE.EMPTY
|
|
154
|
+
UPDATE: _constants.IMPORT_JOB_STATE.EMPTY
|
|
157
155
|
},
|
|
158
156
|
records: [],
|
|
159
157
|
errorMessage: '',
|
|
@@ -343,7 +341,7 @@ async function _default(MONGO_URI, collection) {
|
|
|
343
341
|
return false;
|
|
344
342
|
}
|
|
345
343
|
const timeoutTime = (0, _moment.default)(modificationTime).add(1, 'm');
|
|
346
|
-
logger.silly(
|
|
344
|
+
logger.silly(`timeOut @ ${timeoutTime}`);
|
|
347
345
|
if (timeoutTime.isBefore()) {
|
|
348
346
|
const finalImportJobStates = [_constants.IMPORT_JOB_STATE.ABORT, _constants.IMPORT_JOB_STATE.DONE, _constants.IMPORT_JOB_STATE.EMPTY, _constants.IMPORT_JOB_STATE.ERROR];
|
|
349
347
|
if (!finalImportJobStates.includes(importJobState.CREATE)) {
|
|
@@ -362,14 +360,6 @@ async function _default(MONGO_URI, collection) {
|
|
|
362
360
|
importJobState: _constants.IMPORT_JOB_STATE.ABORT
|
|
363
361
|
});
|
|
364
362
|
}
|
|
365
|
-
if (!finalImportJobStates.includes(importJobState.FIX)) {
|
|
366
|
-
// eslint-disable-line
|
|
367
|
-
await setImportJobState({
|
|
368
|
-
correlationId,
|
|
369
|
-
operation: 'FIX',
|
|
370
|
-
importJobState: _constants.IMPORT_JOB_STATE.ABORT
|
|
371
|
-
});
|
|
372
|
-
}
|
|
373
363
|
await setState({
|
|
374
364
|
correlationId,
|
|
375
365
|
state: _constants.QUEUE_ITEM_STATE.ABORT,
|
|
@@ -601,25 +591,11 @@ async function _default(MONGO_URI, collection) {
|
|
|
601
591
|
if (!(cleanImportJobState in _constants.IMPORT_JOB_STATE)) {
|
|
602
592
|
throw new _melindaCommons.Error('400', 'Invalid import job state');
|
|
603
593
|
}
|
|
604
|
-
const newJobState =
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
};
|
|
610
|
-
}
|
|
611
|
-
if (operation === _constants.OPERATIONS.UPDATE) {
|
|
612
|
-
return {
|
|
613
|
-
'importJobState.UPDATE': cleanImportJobState
|
|
614
|
-
};
|
|
615
|
-
}
|
|
616
|
-
if (operation === _constants.OPERATIONS.FIX) {
|
|
617
|
-
return {
|
|
618
|
-
'importJobState.FIX': cleanImportJobState
|
|
619
|
-
};
|
|
620
|
-
}
|
|
621
|
-
throw new _melindaCommons.Error('400', 'Invalid operation for import job state');
|
|
622
|
-
}
|
|
594
|
+
const newJobState = operation === _constants.OPERATIONS.CREATE ? {
|
|
595
|
+
'importJobState.CREATE': cleanImportJobState
|
|
596
|
+
} : {
|
|
597
|
+
'importJobState.UPDATE': cleanImportJobState
|
|
598
|
+
};
|
|
623
599
|
return db.collection(collection).findOneAndUpdate({
|
|
624
600
|
correlationId: cleanCorrelationId
|
|
625
601
|
}, {
|
package/dist/mongo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mongo.js","names":["_mongodb","require","_melindaBackendCommons","_melindaCommons","_constants","_utils","_moment","_interopRequireDefault","_httpStatus","_mongoSanitize","_default","MONGO_URI","collection","logger","createLogger","client","MongoClient","connect","useNewUrlParser","useUnifiedTopology","db","gridFSBucket","GridFSBucket","bucketName","createPrio","createBulk","checkAndSetState","checkAndSetImportJobState","query","queryById","remove","readContent","removeContent","getOne","getStream","setState","setImportJobState","pushIds","pushMessages","setOperation","setOperations","addBlobSize","setBlobSize","correlationId","cataloger","oCatalogerIn","operation","operationSettings","time","moment","toDate","newQueueItem","operations","prio","queueItemState","QUEUE_ITEM_STATE","VALIDATOR","PENDING_VALIDATION","blobSize","importJobState","CREATE","IMPORT_JOB_STATE","EMPTY","UPDATE","FIX","records","errorMessage","errorStatus","creationTime","modificationTime","result","insertOne","acknowledged","info","ApiError","httpStatus","INTERNAL_SERVER_ERROR","error","payload","message","logError","contentType","recordLoadParams","stream","UPLOADING","WAITING_FOR_RECORDS","Promise","resolve","reject","outputStream","openUploadStream","on","chunk","write","end","undefined","debug","state","timeOut","checkTimeOut","params","showParams","JSON","stringify","limit","skip","rest","find","projection","createProjection","parseInt","toArray","length","silly","showAll","showOperations","showOperationSettings","showRecordLoadParams","showImportJobState","_id","showParamToField","Object","keys","filter","param","map","excludeObject","fromEntries","checkModTime","findOne","queueitemState","oldState","ABORT","ERROR","DONE","includes","timeoutTime","add","isBefore","finalImportJobStates","REQUEST_TIMEOUT","clean","sanitize","noContent","deleteOne","err","MongoDriverError","indexOf","noStream","readStream","openDownloadStreamByName","BAD_REQUEST","NOT_FOUND","delete","cleanQueueItemState","handledIds","rejectedIds","verbose","updateOne","$set","$push","$each","messages","messageField","cleanMessageField","errorString","stateInQueueItemStates","values","stateInQueueItemStatesValidator","stateInQueueItemStatesImporter","IMPORTER","updateValues","forEach","key","findOneAndUpdate","returnNewDocument","cleanCorrelationId","cleanImportJobState","OPERATIONS","newJobState","getNewJobState","newOperation","oldOperation","cleanNewOperation","ok","addOperation","removeOperation","queueItem","oldOperations","operationsAfterRemove","operationsAfterRemoveAndAdd","$inc","cleanBlobSize"],"sources":["../src/mongo.js"],"sourcesContent":["/* eslint-disable max-lines */\n\n\nimport {MongoClient, GridFSBucket, MongoDriverError} from 'mongodb';\nimport {createLogger} from '@natlibfi/melinda-backend-commons';\nimport {Error as ApiError} from '@natlibfi/melinda-commons';\nimport {QUEUE_ITEM_STATE, IMPORT_JOB_STATE, OPERATIONS} from './constants';\nimport {logError} from './utils.js';\nimport moment from 'moment';\nimport httpStatus from 'http-status';\nimport sanitize from 'mongo-sanitize';\n//import isDeepStrictEqual from 'util';\n\n/* QueueItem:\n{\n \"correlationId\":\"FOO\",\n \"cataloger\":\"xxx0000\",\n \"oCatalogerIn\":\"xxx0000\"\n \"operation\":\"UPDATE\",\n \"operations\":[\"UPDATE\", \"CREATE\"]\n \"contentType\":\"application/json\",\n \"recordLoadParams\": {\n \"pActiveLibrary\": \"XXX00\",\n \"pInputFile\": \"filename.seq\",\n \"pRejectFile\": \"filename.rej\",\n \"pLogFile\": \"filename.syslog\",\n \"pOldNew\": \"NEW\"\n },\n \"queueItemState\":\"PENDING_QUEUING\",\n \"importJobState\": {\n \"CREATE\": \"EMPTY\",\n \"UPDATE\": \"EMPTY\"\n },\n blobSize: 1,\n records: [],\n errorMessage: '',\n errorStatus: '',\n \"creationTime\":\"2020-01-01T00:00:00.000Z\",\n \"modificationTime\":\"2020-01-01T00:00:01.000Z\",\n}\n*/\n\nexport default async function (MONGO_URI, collection) {\n const logger = createLogger();\n\n // Connect to mongo (MONGO)\n const client = await MongoClient.connect(MONGO_URI, {useNewUrlParser: true, useUnifiedTopology: true});\n const db = client.db('rest-api');\n const gridFSBucket = new GridFSBucket(db, {bucketName: collection});\n\n return {createPrio, createBulk, checkAndSetState, checkAndSetImportJobState, query, queryById, remove, readContent, removeContent, getOne, getStream, setState, setImportJobState, pushIds, pushMessages, setOperation, setOperations, addBlobSize, setBlobSize};\n\n async function createPrio({correlationId, cataloger, oCatalogerIn, operation, operationSettings}) {\n const time = moment().toDate();\n const newQueueItem = {\n correlationId,\n cataloger,\n operation,\n operations: [operation],\n oCatalogerIn,\n operationSettings: {\n prio: true,\n ...operationSettings\n },\n queueItemState: QUEUE_ITEM_STATE.VALIDATOR.PENDING_VALIDATION,\n blobSize: 1,\n importJobState: {\n CREATE: IMPORT_JOB_STATE.EMPTY,\n UPDATE: IMPORT_JOB_STATE.EMPTY,\n FIX: IMPORT_JOB_STATE.EMPTY\n },\n records: [],\n errorMessage: '',\n errorStatus: '',\n creationTime: time,\n modificationTime: time\n };\n try {\n const result = await db.collection(collection).insertOne(newQueueItem);\n if (result.acknowledged) {\n logger.info(`New PRIO queue item for ${operation} ${correlationId} has been made in ${collection}`);\n return;\n }\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR);\n } catch (error) {\n const errorMessage = error.payload || error.message || '';\n logError(error);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);\n }\n }\n\n // eslint-disable-next-line max-statements\n async function createBulk({correlationId, cataloger, oCatalogerIn, operation, contentType, recordLoadParams, stream, operationSettings}) {\n const time = moment().toDate();\n const newQueueItem = {\n correlationId,\n cataloger,\n oCatalogerIn,\n operation,\n operations: [operation],\n operationSettings: {\n prio: false,\n ...operationSettings\n },\n contentType,\n recordLoadParams,\n queueItemState: stream ? QUEUE_ITEM_STATE.VALIDATOR.UPLOADING : QUEUE_ITEM_STATE.VALIDATOR.WAITING_FOR_RECORDS,\n blobSize: 0,\n importJobState: {\n CREATE: IMPORT_JOB_STATE.EMPTY,\n UPDATE: IMPORT_JOB_STATE.EMPTY,\n FIX: IMPORT_JOB_STATE.EMPTY\n },\n records: [],\n errorMessage: '',\n errorStatus: '',\n creationTime: time,\n modificationTime: time\n };\n\n // eslint-disable-next-line functional/no-conditional-statements\n if (stream) {\n try {\n // No await here, promises later\n db.collection(collection).insertOne(newQueueItem);\n logger.info(`New BULK queue item for ${operation} ${correlationId} has been made in ${collection}!`);\n return new Promise((resolve, reject) => {\n const outputStream = gridFSBucket.openUploadStream(correlationId);\n\n stream\n .on('error', reject)\n .on('data', chunk => outputStream.write(chunk))\n .on('end', () => outputStream.end(undefined, undefined, () => {\n resolve(correlationId);\n }));\n });\n } catch (error) {\n const errorMessage = error.payload || error.message || '';\n logError(error);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);\n }\n }\n\n logger.debug(`No stream`);\n // eslint-disable-next-line functional/no-conditional-statements\n if (!stream) {\n try {\n const result = await db.collection(collection).insertOne(newQueueItem);\n if (result.acknowledged) {\n logger.info(`New noStream BULK queue item for ${operation} ${correlationId} has been made in ${collection}`);\n return {correlationId, queueItemState: QUEUE_ITEM_STATE.VALIDATOR.WAITING_FOR_RECORDS};\n }\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR);\n } catch (error) {\n const errorMessage = error.payload || error.message || '';\n logError(error);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);\n }\n }\n }\n\n // Check state that the queueItem has not waited too long and set state\n async function checkAndSetState({correlationId, state, errorMessage = undefined, errorStatus = undefined}) {\n // checkTimeOut returns true, if queueItem is fresher than 1 minute and it's state is not ABORT/ERROR\n // otherwise it sets queueItem to state ABORT (408, 'Timeout')\n const timeOut = await checkTimeOut({correlationId});\n if (timeOut) {\n return setState({correlationId, state, errorMessage, errorStatus});\n }\n return false;\n }\n\n // Check state that the queueItem has not waited too long and set state\n async function checkAndSetImportJobState({correlationId, operation, importJobState, errorMessage = '', errorStatus = ''}) {\n // checkTimeOut returns true, if queueItem is fresher than 1 minute and it's state is not ABORT/ERROR\n // otherwise it sets queueItem to state ABORT (408, 'Timeout')\n logger.debug(`${correlationId}, ${importJobState}, ${operation}`);\n const timeOut = await checkTimeOut({correlationId, operation, importJobState});\n if (timeOut) {\n return setImportJobState({correlationId, operation, importJobState, errorMessage, errorStatus});\n }\n return false;\n }\n\n async function query(params, showParams = {}) {\n logger.debug(`Querying: ${JSON.stringify(params)}, ${JSON.stringify(showParams)}`);\n const {limit = 1000, skip = 0, ...rest} = params;\n\n const result = await db.collection(collection).find(rest, {projection: createProjection(showParams)})\n .limit(parseInt(limit, 10))\n .skip(parseInt(skip, 10))\n .toArray();\n logger.debug(`Query result: ${result.length > 0 ? 'Found!' : 'Not found!'}`);\n logger.silly(`${JSON.stringify(result)}`);\n return result;\n }\n\n // We default to NOT showing operations, operationSettings, recordLoadParams and importJobState when a queueItem is queried\n // These can all be shown with showAll\n // Single fields can be shown by showOperation, showOperationSettings, showRecordLoadParams and showImportJobState\n\n function createProjection(showParams = {}) {\n logger.silly(`Creating projection for query: ${JSON.stringify(showParams)}`);\n const {showAll = 0, showOperations = 0, showOperationSettings = 0, showRecordLoadParams = 0, showImportJobState = 0} = showParams;\n logger.debug(`showAll: ${showAll}, showOperations: ${showOperations}, showOperationSettings: ${showOperationSettings}, showRecordLoadParams: ${showRecordLoadParams}, showImportJobState: ${showImportJobState}`);\n\n if (showAll) {\n return {\n _id: 0\n };\n }\n\n const showParamToField = {\n 'showOperations': 'operations',\n 'showOperationSettings': 'operationSettings',\n 'showRecordLoadParams': 'recordLoadParams',\n 'showImportJobState': 'importJobState'\n };\n\n const result = Object.keys(showParams)\n .filter(param => param !== 'showAll' && showParams[param] !== true && showParams[param] !== 1)\n .filter(param => showParamToField[param])\n .map((param) => showParamToField[param]);\n logger.silly(`We want to exclude from projection: ${JSON.stringify(result)}`);\n\n const excludeObject = Object.fromEntries(result.map(param => [param, 0]));\n logger.silly(`We want to exclude from projection: ${JSON.stringify(excludeObject)}`);\n\n return {\n _id: 0,\n ...excludeObject\n };\n }\n\n async function queryById({correlationId, checkModTime = false}) {\n const result = await db.collection(collection).findOne({correlationId});\n if (checkModTime) {\n const timeOut = await checkTimeOut({correlationId});\n if (timeOut) {\n return queryById({correlationId});\n }\n return result;\n }\n\n return result;\n }\n\n // Check that if the item has waited too long\n // If the last modification time for the queueItem is older than 1 minute\n // set state to ABORT and return false, otherwise return true\n // If the state is already ABORT or ERROR return false\n\n async function checkTimeOut({correlationId}) {\n const {modificationTime, queueitemState: oldState, importJobState} = await db.collection(collection).findOne({correlationId});\n\n // should we check for DONE too?\n if ([QUEUE_ITEM_STATE.ABORT, QUEUE_ITEM_STATE.ERROR, QUEUE_ITEM_STATE.DONE].includes(oldState)) {\n logger.silly(`${correlationId} has already state: ${oldState}`);\n return false;\n }\n\n const timeoutTime = moment(modificationTime).add(1, 'm');\n logger.silly(`${correlationId} timeOut @ ${timeoutTime}`);\n\n if (timeoutTime.isBefore()) {\n const finalImportJobStates = [IMPORT_JOB_STATE.ABORT, IMPORT_JOB_STATE.DONE, IMPORT_JOB_STATE.EMPTY, IMPORT_JOB_STATE.ERROR];\n if (!finalImportJobStates.includes(importJobState.CREATE)) { // eslint-disable-line\n await setImportJobState({correlationId, operation: 'CREATE', importJobState: IMPORT_JOB_STATE.ABORT});\n }\n\n if (!finalImportJobStates.includes(importJobState.UPDATE)) { // eslint-disable-line\n await setImportJobState({correlationId, operation: 'UPDATE', importJobState: IMPORT_JOB_STATE.ABORT});\n }\n\n if (!finalImportJobStates.includes(importJobState.FIX)) { // eslint-disable-line\n await setImportJobState({correlationId, operation: 'FIX', importJobState: IMPORT_JOB_STATE.ABORT});\n }\n\n await setState({correlationId, state: QUEUE_ITEM_STATE.ABORT, errorStatus: httpStatus.REQUEST_TIMEOUT, errorMessage: `Timeout in ${oldState}`});\n\n return false;\n }\n\n return true;\n }\n\n async function remove(params) {\n logger.silly(`${JSON.stringify(params)}`);\n logger.info(`Removing from Mongo (${collection}) id: ${params.correlationId}`);\n const clean = sanitize(params.correlationId);\n logger.silly(`mongo/remove: clean: ${JSON.stringify(clean)}`);\n\n try {\n //const metadataResult = await getFileMetadata({filename: clean});\n //logger.debug(`mongo/remove: metadataResult: ${JSON.stringify(metadataResult)}`);\n const noContent = await removeContent(params);\n if (noContent) {\n await db.collection(collection).deleteOne({correlationId: clean});\n return true;\n }\n } catch (err) {\n if (err instanceof MongoDriverError) {\n if (err.message.indexOf('File not found for id') !== -1) {\n logger.silly(`mongo/remove: File not found, removing queueItem ${JSON.stringify(clean)} from ${collection}`);\n await db.collection(collection).deleteOne({correlationId: clean});\n return true;\n }\n logger.error(err.message);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, err.message);\n }\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, err.message);\n }\n }\n\n async function readContent(correlationId) {\n logger.info(`Reading content from mongo for id: ${correlationId} in ${collection}`);\n const clean = sanitize(correlationId);\n const result = await db.collection(collection).findOne({correlationId: clean}); // njsscan-ignore: node_nosqli_injection\n\n if (result) {\n const {operationSettings} = result;\n if (operationSettings.prio === false && operationSettings.noStream === false) {\n return {\n contentType: result.contentType,\n readStream: gridFSBucket.openDownloadStreamByName(clean)\n };\n }\n logger.debug(`OperationSettings for ${correlationId}: ${JSON.stringify(operationSettings)}`);\n throw new ApiError(httpStatus.BAD_REQUEST, {message: `Content is only available for streamBulk jobs. ${correlationId} is not a streamBulk job.`});\n }\n\n throw new ApiError(httpStatus.NOT_FOUND, {message: `Job ${correlationId} not found.`});\n }\n\n async function removeContent(params) {\n logger.info(`Removing content from mongo for id: ${params.correlationId} in ${collection}`);\n const clean = sanitize(params.correlationId);\n\n const result = await db.collection(collection).findOne({correlationId: clean}); // njsscan-ignore: node_nosqli_injection\n logger.silly(`mongo/removeContent: result ${JSON.stringify(result)}`);\n\n if (result) {\n await gridFSBucket.delete(clean);\n return true;\n }\n\n return true;\n }\n\n // eslint-disable-next-line max-statements\n function getOne({queueItemState, importJobState = undefined}) {\n\n logger.silly(`queueItemState: ${queueItemState}, importJobState: ${JSON.stringify(importJobState)}`);\n const cleanQueueItemState = queueItemState ? {queueItemState: sanitize(queueItemState)} : undefined;\n\n try {\n\n // Just queueItemState\n if (queueItemState && importJobState === undefined) {\n logger.silly(`Checking DB ${collection} for just ${JSON.stringify(cleanQueueItemState.queueItemState)}`);\n return db.collection(collection).findOne({...cleanQueueItemState});\n }\n\n // importJobState\n if (importJobState && queueItemState === undefined) {\n logger.silly(`Checking DB ${collection} for ${JSON.stringify(importJobState)}`);\n return db.collection(collection).findOne({...importJobState});\n }\n\n // importJobState and queueItemState\n if (importJobState && queueItemState) {\n logger.silly(`Checking DB ${collection} for ${queueItemState} and ${JSON.stringify(importJobState)}`);\n return db.collection(collection).findOne({...cleanQueueItemState, ...importJobState});\n }\n\n logger.debug(`getOne not working!`);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, 'Missing parameters, cannot get queueItem');\n\n } catch (error) {\n const errorMessage = error.payload || error.message || '';\n logError(error);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);\n }\n }\n\n function getStream(correlationId) {\n logger.info(`Forming stream from mongo for ${correlationId} in ${collection}`);\n const clean = sanitize(correlationId);\n try {\n // Return content stream\n return gridFSBucket.openDownloadStreamByName(clean);\n } catch (error) {\n const errorMessage = error.payload || error.message || '';\n logError(error);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);\n }\n }\n\n async function pushIds({correlationId, handledIds, rejectedIds}) {\n logger.verbose(`Push ids (${handledIds.length}) and rejectedIds (${rejectedIds.length}) ${correlationId} to ${collection}`);\n logger.debug(`ids (${handledIds.length}): ${JSON.stringify(handledIds)}, rejectedIds ${rejectedIds.length}: ${JSON.stringify(rejectedIds)}`);\n const clean = sanitize(correlationId);\n await db.collection(collection).updateOne({\n correlationId: clean\n }, {\n $set: {\n modificationTime: moment().toDate()\n },\n $push: {\n handledIds: {$each: handledIds},\n rejectedIds: {$each: rejectedIds}\n }\n });\n }\n\n async function pushMessages({correlationId, messages, messageField = 'messages'}) {\n logger.verbose(`Push messages (${messages.length}) to ${messageField} ${correlationId} to ${collection}`);\n logger.silly(`Messages (${messages.length}): ${JSON.stringify(messages)}}`);\n const clean = sanitize(correlationId);\n const cleanMessageField = sanitize(messageField);\n await db.collection(collection).updateOne({\n correlationId: clean\n }, {\n $set: {\n modificationTime: moment().toDate()\n },\n $push: {\n [cleanMessageField]: {$each: messages}\n }\n });\n }\n\n function setState({correlationId, state, errorMessage = undefined, errorStatus = undefined}) {\n const errorString = errorMessage || errorStatus ? `, Error message: '${JSON.stringify(errorMessage) || ''}', Error status: '${errorStatus || ''}'` : '';\n logger.info(`Setting queue-item state ${state} for ${correlationId}${errorString} to ${collection}`);\n\n const stateInQueueItemStates = Object.values(QUEUE_ITEM_STATE).indexOf(state) > -1;\n const stateInQueueItemStatesValidator = Object.values(QUEUE_ITEM_STATE.VALIDATOR).indexOf(state) > -1;\n const stateInQueueItemStatesImporter = Object.values(QUEUE_ITEM_STATE.IMPORTER).indexOf(state) > -1;\n if (!stateInQueueItemStates && !stateInQueueItemStatesValidator && !stateInQueueItemStatesImporter) {\n throw new ApiError(httpStatus.BAD_REQUEST, 'Trying to set invalid state');\n }\n\n const clean = sanitize(correlationId);\n const updateValues = {\n queueItemState: state,\n modificationTime: moment().toDate(),\n errorMessage,\n errorStatus\n };\n\n // Do not update value that are undefined\n // eslint-disable-next-line functional/immutable-data\n Object.keys(updateValues).forEach(key => updateValues[key] === undefined && delete updateValues[key]);\n\n return db.collection(collection)\n .findOneAndUpdate(\n {correlationId: clean},\n {$set: updateValues},\n {projection: {_id: 0}, returnNewDocument: true}\n );\n }\n\n function setImportJobState({correlationId, operation, importJobState}) {\n\n // should this also get importJobState as previously created object? {}\n logger.info(`Setting queue-item importJobState: {${operation}: ${importJobState}} for ${correlationId}`);\n const cleanCorrelationId = sanitize(correlationId);\n const cleanImportJobState = sanitize(importJobState);\n\n if (!(operation in OPERATIONS)) {\n throw new ApiError('400', 'Invalid operation for import job state');\n }\n\n if (!(cleanImportJobState in IMPORT_JOB_STATE)) {\n throw new ApiError('400', 'Invalid import job state');\n }\n\n const newJobState = getNewJobState(operation, cleanImportJobState);\n\n\n function getNewJobState(operation, cleanImportJobState) {\n if (operation === OPERATIONS.CREATE) {\n return {'importJobState.CREATE': cleanImportJobState};\n }\n if (operation === OPERATIONS.UPDATE) {\n return {'importJobState.UPDATE': cleanImportJobState};\n }\n if (operation === OPERATIONS.FIX) {\n return {'importJobState.FIX': cleanImportJobState};\n }\n throw new ApiError('400', 'Invalid operation for import job state');\n }\n\n return db.collection(collection).findOneAndUpdate({\n correlationId: cleanCorrelationId\n }, {\n $set: {\n ...newJobState,\n modificationTime: moment().toDate()\n }\n }, {projection: {_id: 0}, returnNewDocument: true});\n }\n\n async function setOperation({correlationId, operation}) {\n const newOperation = operation;\n const {operation: oldOperation} = await db.collection(collection).findOne({correlationId});\n logger.info(`Setting queue-item operation from ${oldOperation} to ${newOperation} for ${correlationId} to ${collection}`);\n const cleanCorrelationId = sanitize(correlationId);\n const cleanNewOperation = sanitize(newOperation);\n\n const result = await db.collection(collection).findOneAndUpdate({\n correlationId: cleanCorrelationId\n }, {\n $set: {\n operation: cleanNewOperation,\n modificationTime: moment().toDate()\n }\n }, {projection: {_id: 0}, returnNewDocument: true});\n\n return result.ok;\n // logger.debug(JSON.stringify(result));\n }\n\n async function setOperations({correlationId, addOperation, removeOperation = undefined}) {\n const cleanCorrelationId = sanitize(correlationId);\n\n const queueItem = await db.collection(collection).findOne({correlationId: cleanCorrelationId});\n logger.silly(`We found a queueItem: ${JSON.stringify(queueItem)}`);\n\n const oldOperations = queueItem.operations;\n\n logger.info(`Setting queue-item operations from ${JSON.stringify(oldOperations)} by adding ${addOperation} and removing ${removeOperation} for ${correlationId} to ${collection}`);\n\n const operationsAfterRemove = oldOperations.filter(operation => operation !== removeOperation);\n const operationsAfterRemoveAndAdd = operationsAfterRemove.includes(addOperation) ? operationsAfterRemove : [...operationsAfterRemove, addOperation];\n\n logger.silly(`operationsAfterRemove: ${operationsAfterRemove}`);\n logger.silly(`operationAfterRemoveAndAdd: ${operationsAfterRemoveAndAdd}`);\n\n const result = await db.collection(collection).findOneAndUpdate({\n correlationId: cleanCorrelationId\n }, {\n $set: {\n operations: operationsAfterRemoveAndAdd,\n modificationTime: moment().toDate()\n }\n }, {projection: {_id: 0}, returnNewDocument: true});\n\n return result.ok;\n // logger.debug(JSON.stringify(result));\n }\n\n async function addBlobSize({correlationId}) {\n const cleanCorrelationId = sanitize(correlationId);\n\n const result = await db.collection(collection).findOneAndUpdate({\n correlationId: cleanCorrelationId,\n queueItemState: QUEUE_ITEM_STATE.VALIDATOR.WAITING_FOR_RECORDS\n }, {\n $inc: {\n blobSize: 1\n },\n $set: {\n modificationTime: moment().toDate()\n }\n }, {projection: {_id: 0}, returnNewDocument: true});\n\n logger.verbose(`AddBlobSizeResult in mongo: ${JSON.stringify(result)}`);\n return result;\n }\n\n async function setBlobSize({correlationId, blobSize}) {\n const cleanCorrelationId = sanitize(correlationId);\n const cleanBlobSize = sanitize(blobSize);\n\n const result = await db.collection(collection).findOneAndUpdate({\n correlationId: cleanCorrelationId\n }, {\n $set: {\n blobSize: cleanBlobSize,\n modificationTime: moment().toDate()\n }\n }, {projection: {_id: 0}, returnNewDocument: true});\n\n logger.verbose(`SetBlobSizeResult in mongo: ${JSON.stringify(result)}`);\n return result;\n }\n\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mongo.js","names":["_mongodb","require","_melindaBackendCommons","_melindaCommons","_constants","_utils","_moment","_interopRequireDefault","_httpStatus","_mongoSanitize","_default","MONGO_URI","collection","logger","createLogger","client","MongoClient","connect","useNewUrlParser","useUnifiedTopology","db","gridFSBucket","GridFSBucket","bucketName","createPrio","createBulk","checkAndSetState","checkAndSetImportJobState","query","queryById","remove","readContent","removeContent","getOne","getStream","setState","setImportJobState","pushIds","pushMessages","setOperation","setOperations","addBlobSize","setBlobSize","correlationId","cataloger","oCatalogerIn","operation","operationSettings","time","moment","toDate","newQueueItem","operations","prio","queueItemState","QUEUE_ITEM_STATE","VALIDATOR","PENDING_VALIDATION","blobSize","importJobState","CREATE","IMPORT_JOB_STATE","EMPTY","UPDATE","records","errorMessage","errorStatus","creationTime","modificationTime","result","insertOne","acknowledged","info","ApiError","httpStatus","INTERNAL_SERVER_ERROR","error","payload","message","logError","contentType","recordLoadParams","stream","UPLOADING","WAITING_FOR_RECORDS","Promise","resolve","reject","outputStream","openUploadStream","on","chunk","write","end","undefined","debug","state","timeOut","checkTimeOut","params","showParams","JSON","stringify","limit","skip","rest","find","projection","createProjection","parseInt","toArray","length","silly","showAll","showOperations","showOperationSettings","showRecordLoadParams","showImportJobState","_id","showParamToField","Object","keys","filter","param","map","excludeObject","fromEntries","checkModTime","findOne","queueitemState","oldState","ABORT","ERROR","DONE","includes","timeoutTime","add","isBefore","finalImportJobStates","REQUEST_TIMEOUT","clean","sanitize","noContent","deleteOne","err","MongoDriverError","indexOf","noStream","readStream","openDownloadStreamByName","BAD_REQUEST","NOT_FOUND","delete","cleanQueueItemState","handledIds","rejectedIds","verbose","updateOne","$set","$push","$each","messages","messageField","cleanMessageField","errorString","stateInQueueItemStates","values","stateInQueueItemStatesValidator","stateInQueueItemStatesImporter","IMPORTER","updateValues","forEach","key","findOneAndUpdate","returnNewDocument","cleanCorrelationId","cleanImportJobState","OPERATIONS","newJobState","newOperation","oldOperation","cleanNewOperation","ok","addOperation","removeOperation","queueItem","oldOperations","operationsAfterRemove","operationsAfterRemoveAndAdd","$inc","cleanBlobSize"],"sources":["../src/mongo.js"],"sourcesContent":["/* eslint-disable max-lines */\n\n\nimport {MongoClient, GridFSBucket, MongoDriverError} from 'mongodb';\nimport {createLogger} from '@natlibfi/melinda-backend-commons';\nimport {Error as ApiError} from '@natlibfi/melinda-commons';\nimport {QUEUE_ITEM_STATE, IMPORT_JOB_STATE, OPERATIONS} from './constants';\nimport {logError} from './utils.js';\nimport moment from 'moment';\nimport httpStatus from 'http-status';\nimport sanitize from 'mongo-sanitize';\n//import isDeepStrictEqual from 'util';\n\n/* QueueItem:\n{\n \"correlationId\":\"FOO\",\n \"cataloger\":\"xxx0000\",\n \"oCatalogerIn\":\"xxx0000\"\n \"operation\":\"UPDATE\",\n \"operations\":[\"UPDATE\", \"CREATE\"]\n \"contentType\":\"application/json\",\n \"recordLoadParams\": {\n \"pActiveLibrary\": \"XXX00\",\n \"pInputFile\": \"filename.seq\",\n \"pRejectFile\": \"filename.rej\",\n \"pLogFile\": \"filename.syslog\",\n \"pOldNew\": \"NEW\"\n },\n \"queueItemState\":\"PENDING_QUEUING\",\n \"importJobState\": {\n \"CREATE\": \"EMPTY\",\n \"UPDATE\": \"EMPTY\"\n },\n blobSize: 1,\n records: [],\n errorMessage: '',\n errorStatus: '',\n \"creationTime\":\"2020-01-01T00:00:00.000Z\",\n \"modificationTime\":\"2020-01-01T00:00:01.000Z\",\n}\n*/\n\nexport default async function (MONGO_URI, collection) {\n const logger = createLogger();\n\n // Connect to mongo (MONGO)\n const client = await MongoClient.connect(MONGO_URI, {useNewUrlParser: true, useUnifiedTopology: true});\n const db = client.db('rest-api');\n const gridFSBucket = new GridFSBucket(db, {bucketName: collection});\n\n return {createPrio, createBulk, checkAndSetState, checkAndSetImportJobState, query, queryById, remove, readContent, removeContent, getOne, getStream, setState, setImportJobState, pushIds, pushMessages, setOperation, setOperations, addBlobSize, setBlobSize};\n\n async function createPrio({correlationId, cataloger, oCatalogerIn, operation, operationSettings}) {\n const time = moment().toDate();\n const newQueueItem = {\n correlationId,\n cataloger,\n operation,\n operations: [operation],\n oCatalogerIn,\n operationSettings: {\n prio: true,\n ...operationSettings\n },\n queueItemState: QUEUE_ITEM_STATE.VALIDATOR.PENDING_VALIDATION,\n blobSize: 1,\n importJobState: {\n CREATE: IMPORT_JOB_STATE.EMPTY,\n UPDATE: IMPORT_JOB_STATE.EMPTY\n },\n records: [],\n errorMessage: '',\n errorStatus: '',\n creationTime: time,\n modificationTime: time\n };\n try {\n const result = await db.collection(collection).insertOne(newQueueItem);\n if (result.acknowledged) {\n logger.info(`New PRIO queue item for ${operation} ${correlationId} has been made in ${collection}`);\n return;\n }\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR);\n } catch (error) {\n const errorMessage = error.payload || error.message || '';\n logError(error);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);\n }\n }\n\n // eslint-disable-next-line max-statements\n async function createBulk({correlationId, cataloger, oCatalogerIn, operation, contentType, recordLoadParams, stream, operationSettings}) {\n const time = moment().toDate();\n const newQueueItem = {\n correlationId,\n cataloger,\n oCatalogerIn,\n operation,\n operations: [operation],\n operationSettings: {\n prio: false,\n ...operationSettings\n },\n contentType,\n recordLoadParams,\n queueItemState: stream ? QUEUE_ITEM_STATE.VALIDATOR.UPLOADING : QUEUE_ITEM_STATE.VALIDATOR.WAITING_FOR_RECORDS,\n blobSize: 0,\n importJobState: {\n CREATE: IMPORT_JOB_STATE.EMPTY,\n UPDATE: IMPORT_JOB_STATE.EMPTY\n },\n records: [],\n errorMessage: '',\n errorStatus: '',\n creationTime: time,\n modificationTime: time\n };\n\n // eslint-disable-next-line functional/no-conditional-statements\n if (stream) {\n try {\n // No await here, promises later\n db.collection(collection).insertOne(newQueueItem);\n logger.info(`New BULK queue item for ${operation} ${correlationId} has been made in ${collection}!`);\n return new Promise((resolve, reject) => {\n const outputStream = gridFSBucket.openUploadStream(correlationId);\n\n stream\n .on('error', reject)\n .on('data', chunk => outputStream.write(chunk))\n .on('end', () => outputStream.end(undefined, undefined, () => {\n resolve(correlationId);\n }));\n });\n } catch (error) {\n const errorMessage = error.payload || error.message || '';\n logError(error);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);\n }\n }\n\n logger.debug(`No stream`);\n // eslint-disable-next-line functional/no-conditional-statements\n if (!stream) {\n try {\n const result = await db.collection(collection).insertOne(newQueueItem);\n if (result.acknowledged) {\n logger.info(`New noStream BULK queue item for ${operation} ${correlationId} has been made in ${collection}`);\n return {correlationId, queueItemState: QUEUE_ITEM_STATE.VALIDATOR.WAITING_FOR_RECORDS};\n }\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR);\n } catch (error) {\n const errorMessage = error.payload || error.message || '';\n logError(error);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);\n }\n }\n }\n\n // Check state that the queueItem has not waited too long and set state\n async function checkAndSetState({correlationId, state, errorMessage = undefined, errorStatus = undefined}) {\n // checkTimeOut returns true, if queueItem is fresher than 1 minute and it's state is not ABORT/ERROR\n // otherwise it sets queueItem to state ABORT (408, 'Timeout')\n const timeOut = await checkTimeOut({correlationId});\n if (timeOut) {\n return setState({correlationId, state, errorMessage, errorStatus});\n }\n return false;\n }\n\n // Check state that the queueItem has not waited too long and set state\n async function checkAndSetImportJobState({correlationId, operation, importJobState, errorMessage = '', errorStatus = ''}) {\n // checkTimeOut returns true, if queueItem is fresher than 1 minute and it's state is not ABORT/ERROR\n // otherwise it sets queueItem to state ABORT (408, 'Timeout')\n logger.debug(`${correlationId}, ${importJobState}, ${operation}`);\n const timeOut = await checkTimeOut({correlationId, operation, importJobState});\n if (timeOut) {\n return setImportJobState({correlationId, operation, importJobState, errorMessage, errorStatus});\n }\n return false;\n }\n\n async function query(params, showParams = {}) {\n logger.debug(`Querying: ${JSON.stringify(params)}, ${JSON.stringify(showParams)}`);\n const {limit = 1000, skip = 0, ...rest} = params;\n\n const result = await db.collection(collection).find(rest, {projection: createProjection(showParams)})\n .limit(parseInt(limit, 10))\n .skip(parseInt(skip, 10))\n .toArray();\n logger.debug(`Query result: ${result.length > 0 ? 'Found!' : 'Not found!'}`);\n logger.silly(`${JSON.stringify(result)}`);\n return result;\n }\n\n // We default to NOT showing operations, operationSettings, recordLoadParams and importJobState when a queueItem is queried\n // These can all be shown with showAll\n // Single fields can be shown by showOperation, showOperationSettings, showRecordLoadParams and showImportJobState\n\n function createProjection(showParams = {}) {\n logger.silly(`Creating projection for query: ${JSON.stringify(showParams)}`);\n const {showAll = 0, showOperations = 0, showOperationSettings = 0, showRecordLoadParams = 0, showImportJobState = 0} = showParams;\n logger.debug(`showAll: ${showAll}, showOperations: ${showOperations}, showOperationSettings: ${showOperationSettings}, showRecordLoadParams: ${showRecordLoadParams}, showImportJobState: ${showImportJobState}`);\n\n if (showAll) {\n return {\n _id: 0\n };\n }\n\n const showParamToField = {\n 'showOperations': 'operations',\n 'showOperationSettings': 'operationSettings',\n 'showRecordLoadParams': 'recordLoadParams',\n 'showImportJobState': 'importJobState'\n };\n\n const result = Object.keys(showParams)\n .filter(param => param !== 'showAll' && showParams[param] !== true && showParams[param] !== 1)\n .filter(param => showParamToField[param])\n .map((param) => showParamToField[param]);\n logger.silly(`We want to exclude from projection: ${JSON.stringify(result)}`);\n\n const excludeObject = Object.fromEntries(result.map(param => [param, 0]));\n logger.silly(`We want to exclude from projection: ${JSON.stringify(excludeObject)}`);\n\n return {\n _id: 0,\n ...excludeObject\n };\n }\n\n async function queryById({correlationId, checkModTime = false}) {\n const result = await db.collection(collection).findOne({correlationId});\n if (checkModTime) {\n const timeOut = await checkTimeOut({correlationId});\n if (timeOut) {\n return queryById({correlationId});\n }\n return result;\n }\n\n return result;\n }\n\n // Check that if the item has waited too long\n // If the last modification time for the queueItem is older than 1 minute\n // set state to ABORT and return false, otherwise return true\n // If the state is already ABORT or ERROR return false\n\n async function checkTimeOut({correlationId}) {\n const {modificationTime, queueitemState: oldState, importJobState} = await db.collection(collection).findOne({correlationId});\n\n // should we check for DONE too?\n if ([QUEUE_ITEM_STATE.ABORT, QUEUE_ITEM_STATE.ERROR, QUEUE_ITEM_STATE.DONE].includes(oldState)) {\n logger.silly(`${correlationId} has already state: ${oldState}`);\n return false;\n }\n\n const timeoutTime = moment(modificationTime).add(1, 'm');\n logger.silly(`timeOut @ ${timeoutTime}`);\n\n if (timeoutTime.isBefore()) {\n const finalImportJobStates = [IMPORT_JOB_STATE.ABORT, IMPORT_JOB_STATE.DONE, IMPORT_JOB_STATE.EMPTY, IMPORT_JOB_STATE.ERROR];\n if (!finalImportJobStates.includes(importJobState.CREATE)) { // eslint-disable-line\n await setImportJobState({correlationId, operation: 'CREATE', importJobState: IMPORT_JOB_STATE.ABORT});\n }\n\n if (!finalImportJobStates.includes(importJobState.UPDATE)) { // eslint-disable-line\n await setImportJobState({correlationId, operation: 'UPDATE', importJobState: IMPORT_JOB_STATE.ABORT});\n }\n\n await setState({correlationId, state: QUEUE_ITEM_STATE.ABORT, errorStatus: httpStatus.REQUEST_TIMEOUT, errorMessage: `Timeout in ${oldState}`});\n\n return false;\n }\n\n return true;\n }\n\n async function remove(params) {\n logger.silly(`${JSON.stringify(params)}`);\n logger.info(`Removing from Mongo (${collection}) id: ${params.correlationId}`);\n const clean = sanitize(params.correlationId);\n logger.silly(`mongo/remove: clean: ${JSON.stringify(clean)}`);\n\n try {\n //const metadataResult = await getFileMetadata({filename: clean});\n //logger.debug(`mongo/remove: metadataResult: ${JSON.stringify(metadataResult)}`);\n const noContent = await removeContent(params);\n if (noContent) {\n await db.collection(collection).deleteOne({correlationId: clean});\n return true;\n }\n } catch (err) {\n if (err instanceof MongoDriverError) {\n if (err.message.indexOf('File not found for id') !== -1) {\n logger.silly(`mongo/remove: File not found, removing queueItem ${JSON.stringify(clean)} from ${collection}`);\n await db.collection(collection).deleteOne({correlationId: clean});\n return true;\n }\n logger.error(err.message);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, err.message);\n }\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, err.message);\n }\n }\n\n async function readContent(correlationId) {\n logger.info(`Reading content from mongo for id: ${correlationId} in ${collection}`);\n const clean = sanitize(correlationId);\n const result = await db.collection(collection).findOne({correlationId: clean}); // njsscan-ignore: node_nosqli_injection\n\n if (result) {\n const {operationSettings} = result;\n if (operationSettings.prio === false && operationSettings.noStream === false) {\n return {\n contentType: result.contentType,\n readStream: gridFSBucket.openDownloadStreamByName(clean)\n };\n }\n logger.debug(`OperationSettings for ${correlationId}: ${JSON.stringify(operationSettings)}`);\n throw new ApiError(httpStatus.BAD_REQUEST, {message: `Content is only available for streamBulk jobs. ${correlationId} is not a streamBulk job.`});\n }\n\n throw new ApiError(httpStatus.NOT_FOUND, {message: `Job ${correlationId} not found.`});\n }\n\n async function removeContent(params) {\n logger.info(`Removing content from mongo for id: ${params.correlationId} in ${collection}`);\n const clean = sanitize(params.correlationId);\n\n const result = await db.collection(collection).findOne({correlationId: clean}); // njsscan-ignore: node_nosqli_injection\n logger.silly(`mongo/removeContent: result ${JSON.stringify(result)}`);\n\n if (result) {\n await gridFSBucket.delete(clean);\n return true;\n }\n\n return true;\n }\n\n // eslint-disable-next-line max-statements\n function getOne({queueItemState, importJobState = undefined}) {\n\n logger.silly(`queueItemState: ${queueItemState}, importJobState: ${JSON.stringify(importJobState)}`);\n const cleanQueueItemState = queueItemState ? {queueItemState: sanitize(queueItemState)} : undefined;\n\n try {\n\n // Just queueItemState\n if (queueItemState && importJobState === undefined) {\n logger.silly(`Checking DB ${collection} for just ${JSON.stringify(cleanQueueItemState.queueItemState)}`);\n return db.collection(collection).findOne({...cleanQueueItemState});\n }\n\n // importJobState\n if (importJobState && queueItemState === undefined) {\n logger.silly(`Checking DB ${collection} for ${JSON.stringify(importJobState)}`);\n return db.collection(collection).findOne({...importJobState});\n }\n\n // importJobState and queueItemState\n if (importJobState && queueItemState) {\n logger.silly(`Checking DB ${collection} for ${queueItemState} and ${JSON.stringify(importJobState)}`);\n return db.collection(collection).findOne({...cleanQueueItemState, ...importJobState});\n }\n\n logger.debug(`getOne not working!`);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, 'Missing parameters, cannot get queueItem');\n\n } catch (error) {\n const errorMessage = error.payload || error.message || '';\n logError(error);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);\n }\n }\n\n function getStream(correlationId) {\n logger.info(`Forming stream from mongo for ${correlationId} in ${collection}`);\n const clean = sanitize(correlationId);\n try {\n // Return content stream\n return gridFSBucket.openDownloadStreamByName(clean);\n } catch (error) {\n const errorMessage = error.payload || error.message || '';\n logError(error);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);\n }\n }\n\n async function pushIds({correlationId, handledIds, rejectedIds}) {\n logger.verbose(`Push ids (${handledIds.length}) and rejectedIds (${rejectedIds.length}) ${correlationId} to ${collection}`);\n logger.debug(`ids (${handledIds.length}): ${JSON.stringify(handledIds)}, rejectedIds ${rejectedIds.length}: ${JSON.stringify(rejectedIds)}`);\n const clean = sanitize(correlationId);\n await db.collection(collection).updateOne({\n correlationId: clean\n }, {\n $set: {\n modificationTime: moment().toDate()\n },\n $push: {\n handledIds: {$each: handledIds},\n rejectedIds: {$each: rejectedIds}\n }\n });\n }\n\n async function pushMessages({correlationId, messages, messageField = 'messages'}) {\n logger.verbose(`Push messages (${messages.length}) to ${messageField} ${correlationId} to ${collection}`);\n logger.silly(`Messages (${messages.length}): ${JSON.stringify(messages)}}`);\n const clean = sanitize(correlationId);\n const cleanMessageField = sanitize(messageField);\n await db.collection(collection).updateOne({\n correlationId: clean\n }, {\n $set: {\n modificationTime: moment().toDate()\n },\n $push: {\n [cleanMessageField]: {$each: messages}\n }\n });\n }\n\n function setState({correlationId, state, errorMessage = undefined, errorStatus = undefined}) {\n const errorString = errorMessage || errorStatus ? `, Error message: '${JSON.stringify(errorMessage) || ''}', Error status: '${errorStatus || ''}'` : '';\n logger.info(`Setting queue-item state ${state} for ${correlationId}${errorString} to ${collection}`);\n\n const stateInQueueItemStates = Object.values(QUEUE_ITEM_STATE).indexOf(state) > -1;\n const stateInQueueItemStatesValidator = Object.values(QUEUE_ITEM_STATE.VALIDATOR).indexOf(state) > -1;\n const stateInQueueItemStatesImporter = Object.values(QUEUE_ITEM_STATE.IMPORTER).indexOf(state) > -1;\n if (!stateInQueueItemStates && !stateInQueueItemStatesValidator && !stateInQueueItemStatesImporter) {\n throw new ApiError(httpStatus.BAD_REQUEST, 'Trying to set invalid state');\n }\n\n const clean = sanitize(correlationId);\n const updateValues = {\n queueItemState: state,\n modificationTime: moment().toDate(),\n errorMessage,\n errorStatus\n };\n\n // Do not update value that are undefined\n // eslint-disable-next-line functional/immutable-data\n Object.keys(updateValues).forEach(key => updateValues[key] === undefined && delete updateValues[key]);\n\n return db.collection(collection)\n .findOneAndUpdate(\n {correlationId: clean},\n {$set: updateValues},\n {projection: {_id: 0}, returnNewDocument: true}\n );\n }\n\n function setImportJobState({correlationId, operation, importJobState}) {\n\n // should this also get importJobState as previously created object? {}\n logger.info(`Setting queue-item importJobState: {${operation}: ${importJobState}} for ${correlationId}`);\n const cleanCorrelationId = sanitize(correlationId);\n const cleanImportJobState = sanitize(importJobState);\n\n if (!(operation in OPERATIONS)) {\n throw new ApiError('400', 'Invalid operation for import job state');\n }\n\n if (!(cleanImportJobState in IMPORT_JOB_STATE)) {\n throw new ApiError('400', 'Invalid import job state');\n }\n\n const newJobState = operation === OPERATIONS.CREATE ? {'importJobState.CREATE': cleanImportJobState} : {'importJobState.UPDATE': cleanImportJobState};\n return db.collection(collection).findOneAndUpdate({\n correlationId: cleanCorrelationId\n }, {\n $set: {\n ...newJobState,\n modificationTime: moment().toDate()\n }\n }, {projection: {_id: 0}, returnNewDocument: true});\n }\n\n async function setOperation({correlationId, operation}) {\n const newOperation = operation;\n const {operation: oldOperation} = await db.collection(collection).findOne({correlationId});\n logger.info(`Setting queue-item operation from ${oldOperation} to ${newOperation} for ${correlationId} to ${collection}`);\n const cleanCorrelationId = sanitize(correlationId);\n const cleanNewOperation = sanitize(newOperation);\n\n const result = await db.collection(collection).findOneAndUpdate({\n correlationId: cleanCorrelationId\n }, {\n $set: {\n operation: cleanNewOperation,\n modificationTime: moment().toDate()\n }\n }, {projection: {_id: 0}, returnNewDocument: true});\n\n return result.ok;\n // logger.debug(JSON.stringify(result));\n }\n\n async function setOperations({correlationId, addOperation, removeOperation = undefined}) {\n const cleanCorrelationId = sanitize(correlationId);\n\n const queueItem = await db.collection(collection).findOne({correlationId: cleanCorrelationId});\n logger.silly(`We found a queueItem: ${JSON.stringify(queueItem)}`);\n\n const oldOperations = queueItem.operations;\n\n logger.info(`Setting queue-item operations from ${JSON.stringify(oldOperations)} by adding ${addOperation} and removing ${removeOperation} for ${correlationId} to ${collection}`);\n\n const operationsAfterRemove = oldOperations.filter(operation => operation !== removeOperation);\n const operationsAfterRemoveAndAdd = operationsAfterRemove.includes(addOperation) ? operationsAfterRemove : [...operationsAfterRemove, addOperation];\n\n logger.silly(`operationsAfterRemove: ${operationsAfterRemove}`);\n logger.silly(`operationAfterRemoveAndAdd: ${operationsAfterRemoveAndAdd}`);\n\n const result = await db.collection(collection).findOneAndUpdate({\n correlationId: cleanCorrelationId\n }, {\n $set: {\n operations: operationsAfterRemoveAndAdd,\n modificationTime: moment().toDate()\n }\n }, {projection: {_id: 0}, returnNewDocument: true});\n\n return result.ok;\n // logger.debug(JSON.stringify(result));\n }\n\n async function addBlobSize({correlationId}) {\n const cleanCorrelationId = sanitize(correlationId);\n\n const result = await db.collection(collection).findOneAndUpdate({\n correlationId: cleanCorrelationId,\n queueItemState: QUEUE_ITEM_STATE.VALIDATOR.WAITING_FOR_RECORDS\n }, {\n $inc: {\n blobSize: 1\n },\n $set: {\n modificationTime: moment().toDate()\n }\n }, {projection: {_id: 0}, returnNewDocument: true});\n\n logger.verbose(`AddBlobSizeResult in mongo: ${JSON.stringify(result)}`);\n return result;\n }\n\n async function setBlobSize({correlationId, blobSize}) {\n const cleanCorrelationId = sanitize(correlationId);\n const cleanBlobSize = sanitize(blobSize);\n\n const result = await db.collection(collection).findOneAndUpdate({\n correlationId: cleanCorrelationId\n }, {\n $set: {\n blobSize: cleanBlobSize,\n modificationTime: moment().toDate()\n }\n }, {projection: {_id: 0}, returnNewDocument: true});\n\n logger.verbose(`SetBlobSizeResult in mongo: ${JSON.stringify(result)}`);\n return result;\n }\n\n}\n"],"mappings":"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","ignoreList":[]}
|