@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.
- package/.github/workflows/melinda-node-tests-and-publish.yml +4 -2
- package/README.md +211 -14
- package/dist/amqp.d.ts +41 -0
- package/dist/amqp.d.ts.map +1 -0
- package/dist/amqp.js +251 -235
- package/dist/amqp.js.map +1 -7
- package/dist/constants.d.ts +49 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +38 -38
- package/dist/constants.js.map +1 -7
- package/dist/helpers/conversion.d.ts +8 -0
- package/dist/helpers/conversion.d.ts.map +1 -0
- package/dist/helpers/conversion.js +70 -64
- package/dist/helpers/conversion.js.map +1 -7
- package/dist/helpers/fix-constants.d.ts +76 -0
- package/dist/helpers/fix-constants.d.ts.map +1 -0
- package/dist/helpers/fix-constants.js +41 -41
- package/dist/helpers/fix-constants.js.map +1 -7
- package/dist/helpers/fix-handle-tempurns.d.ts +3 -0
- package/dist/helpers/fix-handle-tempurns.d.ts.map +1 -0
- package/dist/helpers/fix-handle-tempurns.js +73 -71
- package/dist/helpers/fix-handle-tempurns.js.map +1 -7
- package/dist/helpers/fix-strip-f884s.d.ts +10 -0
- package/dist/helpers/fix-strip-f884s.d.ts.map +1 -0
- package/dist/helpers/fix-strip-f884s.js +161 -163
- package/dist/helpers/fix-strip-f884s.js.map +1 -7
- package/dist/helpers/fix.d.ts +6 -0
- package/dist/helpers/fix.d.ts.map +1 -0
- package/dist/helpers/fix.js +133 -121
- package/dist/helpers/fix.js.map +1 -7
- package/dist/helpers/validation.d.ts +9 -0
- package/dist/helpers/validation.d.ts.map +1 -0
- package/dist/helpers/validation.js +14 -16
- package/dist/helpers/validation.js.map +1 -7
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -7
- package/dist/mongo.d.ts +165 -0
- package/dist/mongo.d.ts.map +1 -0
- package/dist/mongo.js +595 -547
- package/dist/mongo.js.map +1 -7
- package/dist/mongoError.d.ts +2 -0
- package/dist/mongoError.d.ts.map +1 -0
- package/dist/mongoError.js +19 -0
- package/dist/mongoError.js.map +1 -0
- package/dist/mongoLog.d.ts +50 -0
- package/dist/mongoLog.d.ts.map +1 -0
- package/dist/mongoLog.js +274 -242
- package/dist/mongoLog.js.map +1 -7
- package/dist/utils.d.ts +36 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +112 -110
- package/dist/utils.js.map +1 -7
- package/eslint.config.ts +66 -0
- package/package.json +17 -11
- package/{tests/amqp-error-branches.test.js → test/amqp-error-branches.test.ts} +135 -61
- package/{tests/amqp.healthtest.js → test/amqp.healthtest.ts} +19 -11
- package/{tests/amqp.tests.localtest.js → test/amqp.tests.localtest.ts} +54 -35
- package/{tests/helpers/conversion.test.js → test/helpers/conversion.test.ts} +26 -14
- package/{tests/helpers/fix-edge.test.js → test/helpers/fix-edge.test.ts} +16 -12
- package/{tests/helpers/fix.test.js → test/helpers/fix.test.ts} +14 -8
- package/{tests/helpers/validation.test.js → test/helpers/validation.test.ts} +7 -6
- package/{tests/mongo-add-blob-size.test.js → test/mongo-add-blob-size.test.ts} +14 -15
- package/{tests/mongo-check-and-check-state.test.js → test/mongo-check-and-check-state.test.ts} +6 -8
- package/{tests/mongo-check-and-set-import-job-state.test.js → test/mongo-check-and-set-import-job-state.test.ts} +6 -9
- package/{tests/mongo-check-timeout.test.js → test/mongo-check-timeout.test.ts} +6 -9
- package/{tests/mongo-create-bulk.test.js → test/mongo-create-bulk.test.ts} +6 -7
- package/{tests/mongo-create-prio.test.js → test/mongo-create-prio.test.ts} +6 -6
- package/{tests/mongo-error-branches.test.js → test/mongo-error-branches.test.ts} +166 -65
- package/{tests/mongo-get-one.test.js → test/mongo-get-one.test.ts} +6 -6
- package/{tests/mongo-get-stream.test.js → test/mongo-get-stream.test.ts} +6 -8
- package/{tests/mongo-push-ids.test.js → test/mongo-push-ids.test.ts} +6 -6
- package/{tests/mongo-push-messages.test.js → test/mongo-push-messages.test.ts} +6 -6
- package/{tests/mongo-query-by-id.test.js → test/mongo-query-by-id.test.ts} +6 -9
- package/{tests/mongo-query.test.js → test/mongo-query.test.ts} +6 -7
- package/{tests/mongo-read-content.test.js → test/mongo-read-content.test.ts} +6 -9
- package/{tests/mongo-remove.test.js → test/mongo-remove.test.ts} +6 -8
- package/{tests/mongo-set-blob-size.test.js → test/mongo-set-blob-size.test.ts} +6 -6
- package/{tests/mongo-set-import-job-state.test.js → test/mongo-set-import-job-state.test.ts} +6 -6
- package/{tests/mongo-set-operation.test.js → test/mongo-set-operation.test.ts} +6 -6
- package/{tests/mongo-set-operations.test.js → test/mongo-set-operations.test.ts} +6 -6
- package/{tests/mongo-set-state.test.js → test/mongo-set-state.test.ts} +6 -6
- package/{tests/mongoLog-protect.test.js → test/mongoLog-protect.test.ts} +18 -17
- package/{tests/mongoLog.test.js → test/mongoLog.test.ts} +8 -8
- package/{tests/testUtils.js → test/testUtils.ts} +49 -15
- package/{tests/utils.test.js → test/utils.test.ts} +5 -5
- package/tsconfig.json +62 -0
- package/tsconfig.test.json +17 -0
- package/dist/helpers/fix-utils.js +0 -39
- package/dist/helpers/fix-utils.js.map +0 -7
- package/eslint.config.js +0 -53
package/dist/mongo.js.map
CHANGED
|
@@ -1,7 +1 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/mongo.js"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable max-lines */\n\nimport {MongoClient, GridFSBucket, MongoDriverError} from 'mongodb';\nimport httpStatus from 'http-status';\nimport createDebugLogger from 'debug';\nimport {createLogger, Error as ApiError, parseBoolean} from '@natlibfi/melinda-commons';\nimport {QUEUE_ITEM_STATE, IMPORT_JOB_STATE, OPERATIONS} from './constants.js';\nimport {logError, assertString, assertNumber, assertImportJobStateFilter} from './utils.js';\n\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, db = 'rest-api', deps = {}) {\n const logger = createLogger();\n // the checkTimeOut \"no progress\" window used to be a hardcoded\n // 1 minute, which is too short for large bulk imports (README benchmark:\n // ~9248 records can take ~10 minutes). Now configurable via the\n // MONGO_TIMEOUT_MINUTES env var (default: 1 minute). Each importer chunk\n // that writes (pushMessages / pushIds / setImportJobState / addBlobSize /\n // setBlobSize / setState ...) refreshes modificationTime, so the timeout\n // only triggers when there is genuinely no progress.\n const timeoutMinutes = Number.parseInt(process.env.MONGO_TIMEOUT_MINUTES, 10) || 1;\n logger.debug(`checkTimeOut window: ${timeoutMinutes} minute(s) (override with MONGO_TIMEOUT_MINUTES)`);\n const debug = createDebugLogger('@natlibfi/melinda-rest-api-commons/mongo');\n const debugDev = debug.extend(':dev');\n\n // Connect to mongo (MONGO), unless operator and gridFSBucket are both\n // injected via deps (used by unit tests to avoid a real connection)\n const stubbed = Boolean(deps.operator) && Boolean(deps.gridFSBucket);\n let gridFSBucket = deps.gridFSBucket;\n let operator = deps.operator;\n if (!stubbed) {\n const client = await MongoClient.connect(MONGO_URI);\n const realDb = client.db(db);\n gridFSBucket = gridFSBucket ?? new GridFSBucket(realDb, {bucketName: collection});\n operator = operator ?? realDb.collection(collection);\n }\n debugDev(`mongo: ${MONGO_URI}, db: ${db}, collection: ${collection}`);\n\n return {createPrio, createBulk, checkAndSetState, checkAndSetImportJobState, query, createProjection, queryById, checkTimeOut, remove, readContent, removeContent, getOne, getStream, setState, setImportJobState, pushIds, pushMessages, setOperation, setOperations, addBlobSize, setBlobSize};\n\n async function createPrio({correlationId, cataloger, oCatalogerIn, operation, operationSettings}) {\n debugDev('createPrio');\n const time = new Date();\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 debugDev(`Inserting: ${JSON.stringify(newQueueItem)} to ${collection}}`);\n const result = await operator.insertOne(newQueueItem);\n debugDev(JSON.stringify(result));\n if (result.acknowledged) {\n logger.info(`New PRIO queue item for ${operation} ${correlationId} has been made in ${collection}`);\n return;\n }\n // TEST-COVERAGE: this error is not (currently) tested\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR);\n } catch (error) {\n // TEST-COVERAGE: this error is not (currently) tested\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 createBulk({correlationId, cataloger, oCatalogerIn, operation, contentType, recordLoadParams, stream, operationSettings}) {\n const time = new Date();\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 if (stream) {\n debug(`Creating streamBulk`);\n try {\n // NOTE: on success this returns the SAME normalized shape as\n // the no-stream path below: {correlationId, acknowledged, queueItemState}\n await new Promise((resolve, reject) => {\n const outputStream = gridFSBucket.openUploadStream(correlationId);\n\n // an upload stream error used to hang the promise forever\n // (no error handler on outputStream) -> wire it to reject\n outputStream.on('error', (error) => {\n outputStream.destroy();\n reject(error);\n });\n\n stream\n .on('error', (error) => {\n // input failed mid-upload -> abort, do not leave the\n // partial GridFS upload stream running\n outputStream.destroy();\n reject(error);\n })\n .on('data', chunk => outputStream.write(chunk))\n .on('end', () => outputStream.end(undefined, undefined, () => {\n resolve(correlationId);\n }));\n });\n logger.info(`New BULK queue item for ${operation} ${correlationId} has been made in ${collection}!`);\n debug(`New BULK queue item for ${operation} ${correlationId} has been made in ${collection}!`);\n const result = await operator.insertOne(newQueueItem);\n if (!result.acknowledged) {\n // TEST-COVERAGE: this error is not (currently) tested\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR);\n }\n // normalize the return shape to the same one the no-stream\n // path returns - do not leak the driver InsertOneResult\n return {correlationId, acknowledged: result.acknowledged, queueItemState: newQueueItem.queueItemState};\n } catch (error) {\n const errorMessage = error.payload || error.message || '';\n logError(error);\n // best-effort cleanup of a partial GridFS file\n await removePartialContent(correlationId);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);\n }\n }\n\n async function removePartialContent(correlationId) {\n try {\n const files = await gridFSBucket.find({filename: correlationId}).toArray();\n for (const file of files) {\n await gridFSBucket.delete(file._id);\n logger.debug(`mongo/createBulk: removed partial GridFS file for ${correlationId}`);\n }\n } catch (cleanupError) {\n logger.debug(`mongo/createBulk: partial GridFS cleanup failed for ${correlationId}: ${cleanupError.message}`);\n }\n }\n\n logger.debug(`No stream`);\n debug(`Creating noStreamBulk`);\n if (!stream) {\n try {\n const result = await operator.insertOne(newQueueItem);\n if (result.acknowledged) {\n logger.info(`New noStream BULK queue item for ${operation} ${correlationId} has been made in ${collection}`);\n debug(`New noStream BULK queue item for ${operation} ${correlationId} has been made in ${collection}`);\n // same normalized shape as the stream path above\n return {correlationId, acknowledged: result.acknowledged, queueItemState: QUEUE_ITEM_STATE.VALIDATOR.WAITING_FOR_RECORDS};\n }\n // TEST-COVERAGE: this error is not (currently) tested\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR);\n } catch (error) {\n // TEST-COVERAGE: this error is not (currently) tested\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 // Optionally set also queueItems errorStatus & errorMessage\n //\n // returns a discriminated result instead of a bare boolean so\n // callers can tell the three outcomes apart:\n // {status: 'updated', queueItem} - state was set\n // {status: 'timeout', queueItem} - item was aborted by checkTimeOut\n // {status: 'unchanged', queueItem} - state was ABORT/ERROR/DONE already,\n // or the item no longer exists\n async function checkAndSetState({correlationId, state, errorMessage = undefined, errorStatus = undefined}) {\n assertString(correlationId, 'correlationId');\n // checkTimeOut returns true, if queueItem is fresher than the configured\n // timeout window and it's state is not ABORT/ERROR/DONE\n // otherwise it sets queueItem and importJobStates to state ABORT and add errorStatus and errorMessage (408, 'Timeout')\n const timeOut = await checkTimeOut({correlationId});\n if (timeOut) {\n const queueItem = await setState({correlationId, state, errorMessage, errorStatus});\n return {status: 'updated', queueItem};\n }\n // Read the current item so the caller can tell \"aborted by timeout\"\n // apart from \"unchanged\" and see the resulting document\n const queueItem = await operator.findOne({correlationId}, {projection: {_id: 0}});\n const status = queueItem && queueItem.queueItemState === QUEUE_ITEM_STATE.ABORT ? 'timeout' : 'unchanged';\n return {status, queueItem};\n }\n\n // Check state that the queueItem has not waited too long and set importJobState\n // Note: checkAndSetImportJobState cannot be used to set queueItems errorStatus & errorMessage (expect in case of a TimeOut)\n //\n // returns a discriminated result, see checkAndSetState\n async function checkAndSetImportJobState({correlationId, operation, importJobState}) {\n assertString(correlationId, 'correlationId');\n // checkTimeOut returns true, if queueItem is fresher than the configured\n // timeout window and it's state is not ABORT/ERROR/DONE\n // otherwise it sets queueItem and importJobStates to state ABORT and errorStatue and errorMessage (408, 'Timeout')\n logger.debug(`${correlationId}, ${importJobState}, ${operation}`);\n const timeOut = await checkTimeOut({correlationId, operation, importJobState});\n if (timeOut) {\n const queueItem = await setImportJobState({correlationId, operation, importJobState});\n return {status: 'updated', queueItem};\n }\n const queueItem = await operator.findOne({correlationId}, {projection: {_id: 0}});\n const status = queueItem && queueItem.queueItemState === QUEUE_ITEM_STATE.ABORT ? 'timeout' : 'unchanged';\n return {status, queueItem};\n }\n\n async function query(params, showParams = {}) {\n logger.debug(`Querying: ${JSON.stringify(params)}, ${JSON.stringify(showParams)}`);\n debug(`Querying: ${JSON.stringify(params)}, ${JSON.stringify(showParams)}`);\n const {limit = 1000, skip = 0, ...rest} = params;\n\n // rest is an internal, trusted query object built by the calling service:\n // callers must not splice raw user input into it. Its keys may legitimately\n // use dot notation and $-operators, which is why rest is not\n // field-sanitized here.\n const result = await operator.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 debug(`${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 debug(`Creating projection for query: ${JSON.stringify(showParams)}`);\n const {showAll = 0, showOperations = 0, showOperationSettings = 0, showRecordLoadParams = 0, showImportJobState = 0} = showParams;\n const combinedShowParams = {\n showAll,\n showOperations,\n showOperationSettings,\n showRecordLoadParams,\n showImportJobState\n };\n logger.debug(`showAll: ${showAll}, showOperations: ${showOperations}, showOperationSettings: ${showOperationSettings}, showRecordLoadParams: ${showRecordLoadParams}, showImportJobState: ${showImportJobState}`);\n debug(`showAll: ${showAll}, showOperations: ${showOperations}, showOperationSettings: ${showOperationSettings}, showRecordLoadParams: ${showRecordLoadParams}, showImportJobState: ${showImportJobState}`);\n debug(`${JSON.stringify(combinedShowParams)}`);\n\n // NOTE: the show-* params are parsed with the shared parseBoolean, whose\n // semantics are: undefined -> false, numeric strings via Boolean(Number(v))\n // ('0' -> false, '1' -> true), other non-empty non-'false' strings -> true.\n if (parseBoolean(showAll)) {\n //if (showAll === true || showAll === '1' || showAll === 1) {\n debug(`ShowAll: ${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(combinedShowParams)\n //.filter(param => param !== 'showAll' && combinedShowParams[param] !== true && combinedShowParams[param] !== 1 && combinedShowParams[param] !== '1')\n .filter(param => param !== 'showAll' && !parseBoolean(combinedShowParams[param]))\n .filter(param => showParamToField[param])\n .map((param) => showParamToField[param]);\n logger.silly(`We want to exclude from projection: ${JSON.stringify(result)}`);\n debug(`We want to exclude from projection: ${JSON.stringify(result)}`);\n\n\n const excludeObject = Object.fromEntries(result.map(param => [param, 0]));\n logger.silly(`We want to exclude from projection: ${JSON.stringify(excludeObject)}`);\n debug(`We want to exclude from projection: ${JSON.stringify(excludeObject)}`);\n\n\n return {\n _id: 0,\n ...excludeObject\n };\n }\n\n // Note: edited in v4.2.4 to return queueItem *after* possible timout has aborted it\n // Note: previous versions returned queueItem *before* its state/queueItemState is timeOuted\n async function queryById({correlationId, checkModTime = false}) {\n assertString(correlationId, 'correlationId');\n if (checkModTime) {\n debug(`queryById checkModTime: ${checkModTime}`);\n await checkTimeOut({correlationId});\n return queryById({correlationId});\n }\n const result = await operator.findOne({correlationId}, {projection: {_id: 0}});\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 the\n // configured window (MONGO_TIMEOUT_MINUTES, default 1 minute)\n // set state to ABORT and return false, otherwise return true\n // If the state is already ABORT or ERROR or DONE return false\n // if the item does not exist (deleted concurrently) return false\n // instead of crashing on destructuring of null\n\n async function checkTimeOut({correlationId}) {\n assertString(correlationId, 'correlationId');\n const queueItem = await operator.findOne({correlationId});\n if (!queueItem) {\n logger.silly(`${correlationId} not found in ${collection} - not a timeout`);\n return false;\n }\n // coalesce a missing importJobState (legacy rows written before the\n // importJobState shape existed) to all-EMPTY so .CREATE/.UPDATE/.FIX never\n // read off undefined and crash the pipeline.\n const {modificationTime, queueItemState: oldState, importJobState = {CREATE: IMPORT_JOB_STATE.EMPTY, UPDATE: IMPORT_JOB_STATE.EMPTY, FIX: IMPORT_JOB_STATE.EMPTY}} = queueItem;\n //debug(`${modificationTime} - oldState: ${oldState}`);\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 // configurable \"no progress\" window (default 1 minute)\n const timeoutTime = new Date(new Date(modificationTime).getTime() + timeoutMinutes * 60000);\n logger.silly(`${correlationId} timeOut @ ${timeoutTime}`);\n\n if (timeoutTime < new Date()) {\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)) {\n await setImportJobState({correlationId, operation: 'CREATE', importJobState: IMPORT_JOB_STATE.ABORT});\n }\n\n if (!finalImportJobStates.includes(importJobState.UPDATE)) {\n await setImportJobState({correlationId, operation: 'UPDATE', importJobState: IMPORT_JOB_STATE.ABORT});\n }\n\n if (!finalImportJobStates.includes(importJobState.FIX)) {\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 debug(`${JSON.stringify(params)}`);\n debug(`Removing from Mongo (${collection}) id: ${params.correlationId}`);\n assertString(params.correlationId, 'correlationId');\n\n\n try {\n // true only when a GridFS file was actually deleted, false when there\n // was no content to delete\n const removedContent = await removeContent({correlationId: params.correlationId});\n debug(`removedContent (removeContent result): ${JSON.stringify(removedContent)}`);\n const deleteResult = await operator.deleteOne({correlationId: params.correlationId});\n debug(`deleteResult: ${JSON.stringify(deleteResult)}`);\n // callers need to tell \"nothing was there\" apart from \"a queueItem was\n // deleted\" (the old bare `true` said both)\n return {removed: deleteResult.deletedCount > 0, deletedContent: removedContent};\n } catch (err) {\n // TEST-COVERAGE: this error is not (currently) tested\n if (err instanceof MongoDriverError) {\n debug(err);\n if (err.message.indexOf('File not found for id') !== -1) {\n logger.silly(`mongo/remove: File not found, removing queueItem ${JSON.stringify(params.correlationId)} from ${collection}`);\n debug(`mongo/remove: File not found, removing queueItem ${JSON.stringify(params.correlationId)} from ${collection}`);\n const deleteResult = await operator.deleteOne({correlationId: params.correlationId});\n return {removed: deleteResult.deletedCount > 0, deletedContent: false};\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 debug(`Reading content from mongo for id: ${correlationId} in ${collection}`);\n assertString(correlationId, 'correlationId');\n\n const result = await operator.findOne({correlationId}); // njsscan-ignore: node_nosqli_injection\n debug(result);\n if (result) {\n const {operationSettings} = result;\n // createBulk never sets operationSettings.noStream (phantom flag,\n // always undefined). Derive the condition from the GridFS file instead:\n // bulk content is available only when a file was actually uploaded.\n let files = [];\n if (operationSettings.prio === false) {\n files = await gridFSBucket.find({filename: correlationId}).toArray();\n }\n const hasContent = files.length > 0;\n if (hasContent) {\n return {\n contentType: result.contentType,\n // the file existence was verified by the find() above; a\n // 'error' event on the returned stream (e.g. file deleted\n // concurrently) is an unhandled event for the caller -> the\n // contract is: the caller MUST attach an 'error' handler.\n readStream: gridFSBucket.openDownloadStreamByName(correlationId)\n };\n }\n logger.debug(`OperationSettings for ${correlationId}: ${JSON.stringify(operationSettings)}`);\n debug(`OperationSettings for ${correlationId}: ${JSON.stringify(operationSettings)}`);\n debug(`Content is only available for streamBulk jobs. ${correlationId} is not a streamBulk job.`);\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 debug(`Removing content from mongo for id: ${params.correlationId} in ${collection}`);\n assertString(params.correlationId, 'correlationId');\n\n const result = await gridFSBucket.find({filename: params.correlationId}).toArray();\n debug(`mongo/removeContent: find bucket result ${JSON.stringify(result)}`);\n\n\n if (result.length > 0) {\n // Note: we assume and handle just one file for filename!\n const [firstBucketResult] = result;\n const fileId = firstBucketResult._id;\n\n await gridFSBucket.delete(fileId);\n return true;\n }\n\n logger.debug(`No files for ${params.correlationId} to delete`);\n // false: there was no content to delete (the old `true` here made callers\n // unable to tell \"file deleted\" apart from \"no file existed\")\n return false;\n }\n\n // async so the entry-point guard below rejects (400) instead of throwing\n // synchronously before any promise is returned\n async function getOne({queueItemState, importJobState = undefined}) {\n //params example: \"queueItemState\": \"IMPORTER.IN_QUEUE\", \"importJobState\":{\"importJobState.UPDATE\": \"IN_QUEUE\"}\n logger.silly(`queueItemState: ${queueItemState}, importJobState: ${JSON.stringify(importJobState)}`);\n //debug(`queueItemState: ${queueItemState}, importJobState: ${JSON.stringify(importJobState)}`);\n // guard is outside the try so the 400 is not re-wrapped as a 500\n if (queueItemState) {\n assertString(queueItemState, 'queueItemState');\n }\n if (importJobState) {\n assertImportJobStateFilter(importJobState, 'importJobState');\n }\n const cleanQueueItemState = queueItemState ? {queueItemState} : undefined;\n const options = {projection: {_id: 0}};\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 //debug(`Checking DB ${collection} for just ${JSON.stringify(cleanQueueItemState.queueItemState)}`);\n return operator.findOne({...cleanQueueItemState}, options);\n }\n\n // importJobState\n if (importJobState && queueItemState === undefined) {\n logger.silly(`Checking DB ${collection} for ${JSON.stringify(importJobState)}`);\n //debug(`Checking DB ${collection} for ${JSON.stringify(importJobState)}`);\n return operator.findOne({...importJobState}, options);\n }\n\n // importJobState and queueItemState\n if (importJobState && queueItemState) {\n logger.silly(`Checking DB ${collection} for ${queueItemState} and ${JSON.stringify(importJobState)}`);\n //debug(`Checking DB ${collection} for ${queueItemState} and ${JSON.stringify(importJobState)}`);\n return operator.findOne({...cleanQueueItemState, ...importJobState}, options);\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 // a missing GridFS file is reported by openDownloadStreamByName as an\n // async 'error' event, which would be an unhandled error event (a process\n // crash) if the caller never attaches a handler. Pre-check the file\n // existence here and throw NOT_FOUND synchronously instead. Note: this\n // makes getStream async (callers must await it). The contract for the\n // returned stream is the same as readContent: the caller MUST attach an\n // 'error' handler.\n async function getStream(correlationId) {\n logger.info(`Forming stream from mongo for ${correlationId} in ${collection}`);\n assertString(correlationId, 'correlationId');\n try {\n const files = await gridFSBucket.find({filename: correlationId}).toArray();\n if (files.length === 0) {\n logger.info(`getStream: file ${correlationId} not found in ${collection}`);\n throw new ApiError(httpStatus.NOT_FOUND, {message: `File ${correlationId} not found in ${collection}`});\n }\n // Return content stream\n return gridFSBucket.openDownloadStreamByName(correlationId);\n } catch (error) {\n // TEST-COVERAGE: this error is not (currently) tested\n if (error instanceof ApiError) {\n throw error;\n }\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 // validate array inputs before dereferencing .length (guard is\n // outside the try so the 400 is not re-wrapped as a 500)\n if (!Array.isArray(handledIds) || !Array.isArray(rejectedIds)) {\n throw new ApiError(httpStatus.BAD_REQUEST, 'pushIds: handledIds and rejectedIds must be arrays');\n }\n assertString(correlationId, 'correlationId');\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 try {\n await operator.updateOne({\n correlationId\n }, {\n $set: {\n modificationTime: new Date()\n },\n $push: {\n handledIds: {$each: handledIds},\n rejectedIds: {$each: rejectedIds}\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 async function pushMessages({correlationId, messages, messageField = 'messages'}) {\n // validate array input before dereferencing .length (guard is\n // outside the try so the 400 is not re-wrapped as a 500)\n if (!Array.isArray(messages)) {\n throw new ApiError(httpStatus.BAD_REQUEST, 'pushMessages: messages must be an array');\n }\n assertString(correlationId, 'correlationId');\n assertString(messageField, 'messageField');\n logger.verbose(`Push messages (${messages.length}) to ${messageField} ${correlationId} to ${collection}`);\n logger.silly(`Messages (${messages.length}): ${JSON.stringify(messages)}`);\n try {\n await operator.updateOne({\n correlationId\n }, {\n $set: {\n modificationTime: new Date()\n },\n $push: {\n [messageField]: {$each: messages}\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 function setState({correlationId, state, errorMessage = undefined, errorStatus = undefined}) {\n assertString(correlationId, 'correlationId');\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 debug(`Trying to set invalid state ${state}`);\n throw new ApiError(httpStatus.BAD_REQUEST, 'Trying to set invalid state');\n }\n\n const updateValues = {\n queueItemState: state,\n modificationTime: new Date(),\n errorMessage,\n errorStatus\n };\n\n // errorMessage/errorStatus are sticky: transitions that do not set them\n // (undefined) drop the keys from the $set instead of clearing the fields,\n // so a later state change intentionally keeps the previous values and the\n // last error stays visible on the queueItem.\n // Do not update value that are undefined\n Object.keys(updateValues).forEach(key => updateValues[key] === undefined && delete updateValues[key]);\n\n return operator\n .findOneAndUpdate(\n {correlationId},\n {$set: updateValues},\n {projection: {_id: 0}, returnDocument: 'after'}\n );\n }\n\n function setImportJobState({correlationId, operation, importJobState}) {\n\n // should this also get importJobState as previously created object? {}\n assertString(correlationId, 'correlationId');\n logger.info(`Setting queue-item importJobState: {${operation}: ${importJobState}} for ${correlationId}`);\n debug(`Setting queue-item importJobState: {${operation}: ${importJobState}} for ${correlationId}`);\n\n if (!(operation in OPERATIONS)) {\n debug(`Error: ${operation} is not in ${JSON.stringify(OPERATIONS)}`);\n throw new ApiError(httpStatus.BAD_REQUEST, 'Invalid operation for import job state');\n }\n\n if (!(importJobState in IMPORT_JOB_STATE)) {\n debug(`Error: ${importJobState} is not in ${JSON.stringify(IMPORT_JOB_STATE)}`);\n throw new ApiError(httpStatus.BAD_REQUEST, 'Invalid import job state');\n }\n\n const newJobState = getNewJobState(operation, importJobState);\n\n\n function getNewJobState(operation, importJobState) {\n if (operation === OPERATIONS.CREATE) {\n return {'importJobState.CREATE': importJobState};\n }\n if (operation === OPERATIONS.UPDATE) {\n return {'importJobState.UPDATE': importJobState};\n }\n if (operation === OPERATIONS.FIX) {\n return {'importJobState.FIX': importJobState};\n }\n // Unreachable in practice: setImportJobState validates operation\n // against OPERATIONS before calling; kept defensively.\n throw new ApiError('400', 'Invalid operation for import job state');\n }\n\n return operator.findOneAndUpdate({\n correlationId\n }, {\n $set: {\n ...newJobState,\n modificationTime: new Date()\n }\n }, {projection: {_id: 0}, returnDocument: 'after'});\n }\n\n // `findOneAndUpdate` (mongodb v6) returns the resulting document\n // directly, or `null` when nothing matched. The old `result.ok || result`\n // was v3 debris: a non-matching correlationId came back as a silent `null`\n // and callers could not tell \"no match\" from success. Now a `null` result\n // is mapped to an ApiError 404, and the document itself is returned on\n // success (no more `{ok, value}` shape to worry about).\n function unwrapAndUpdateResult(result, correlationId) {\n if (result === null || result === undefined) {\n logger.info(`Queue item ${correlationId} not found in ${collection}`);\n throw new ApiError(httpStatus.NOT_FOUND, {message: `Job ${correlationId} not found.`});\n }\n return result;\n }\n\n async function setOperation({correlationId, operation}) {\n assertString(correlationId, 'correlationId');\n const newOperation = operation;\n const existing = await operator.findOne({correlationId});\n if (!existing) {\n logger.info(`Setting queue-item operation: queue item ${correlationId} not found in ${collection}`);\n throw new ApiError(httpStatus.NOT_FOUND, {message: `Job ${correlationId} not found.`});\n }\n const {operation: oldOperation} = existing;\n logger.info(`Setting queue-item operation from ${oldOperation} to ${newOperation} for ${correlationId} to ${collection}`);\n\n const result = await operator.findOneAndUpdate({\n correlationId\n }, {\n $set: {\n operation: newOperation,\n modificationTime: new Date()\n }\n }, {projection: {_id: 0}, returnDocument: 'after'});\n debugDev(`${JSON.stringify(result)}`);\n return unwrapAndUpdateResult(result, correlationId);\n // logger.debug(JSON.stringify(result));\n }\n\n async function setOperations({correlationId, addOperation, removeOperation = undefined}) {\n assertString(correlationId, 'correlationId');\n\n const queueItem = await operator.findOne({correlationId});\n logger.silly(`We found a queueItem: ${JSON.stringify(queueItem)}`);\n if (!queueItem) {\n logger.info(`Setting queue-item operations: queue item ${correlationId} not found in ${collection}`);\n throw new ApiError(httpStatus.NOT_FOUND, {message: `Job ${correlationId} not found.`});\n }\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 operator.findOneAndUpdate({\n correlationId\n }, {\n $set: {\n operations: operationsAfterRemoveAndAdd,\n modificationTime: new Date()\n }\n }, {projection: {_id: 0}, returnDocument: 'after'});\n debugDev(`${JSON.stringify(result)}`);\n return unwrapAndUpdateResult(result, correlationId);\n // logger.debug(JSON.stringify(result));\n }\n\n async function addBlobSize({correlationId}) {\n assertString(correlationId, 'correlationId');\n\n const result = await operator.findOneAndUpdate({\n correlationId,\n queueItemState: QUEUE_ITEM_STATE.VALIDATOR.WAITING_FOR_RECORDS\n }, {\n $inc: {\n blobSize: 1\n },\n $set: {\n modificationTime: new Date()\n }\n }, {projection: {_id: 0}, returnDocument: 'after'});\n\n logger.verbose(`AddBlobSizeResult in mongo: ${JSON.stringify(result)}`);\n debugDev(`${JSON.stringify(result)}`);\n return result;\n }\n\n async function setBlobSize({correlationId, blobSize}) {\n assertString(correlationId, 'correlationId');\n assertNumber(blobSize, 'blobSize');\n\n const result = await operator.findOneAndUpdate({\n correlationId\n }, {\n $set: {\n blobSize,\n modificationTime: new Date()\n }\n }, {projection: {_id: 0}, returnDocument: 'after'});\n\n logger.verbose(`SetBlobSizeResult in mongo: ${JSON.stringify(result)}`);\n debugDev(`${JSON.stringify(result)}`);\n return result;\n }\n\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["correlationId", "queueItem", "operation", "importJobState"]
|
|
7
|
-
}
|
|
1
|
+
{"version":3,"file":"mongo.js","sourceRoot":"","sources":["../src/mongo.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAC,MAAM,SAAS,CAAC;AAGpE,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,iBAAiB,MAAM,OAAO,CAAC;AACtC,OAAO,EAAC,YAAY,EAAE,KAAK,IAAI,QAAQ,EAAE,YAAY,EAAC,MAAM,2BAA2B,CAAC;AACxF,OAAO,EAAC,gBAAgB,EAAE,gBAAgB,EAAE,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,0BAA0B,EAAC,MAAM,YAAY,CAAC;AAC5F,OAAO,EAAC,cAAc,EAAC,MAAM,iBAAiB,CAAC;AAiO/C,MAAM,CAAC,OAAO,CAAC,KAAK,WAAW,SAAiB,EAAE,UAAkB,EAAE,EAAE,GAAG,UAAU,EAAE,OAAqD,EAAE;IAC5I,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAQ9B,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAW,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAChG,MAAM,CAAC,KAAK,CAAC,wBAAwB,cAAc,kDAAkD,CAAC,CAAC;IACvG,MAAM,KAAK,GAAG,iBAAiB,CAAC,0CAA0C,CAAC,CAAC;IAC5E,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAOtC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACrE,IAAI,YAAY,GAAiB,IAAI,CAAC,YAA4B,CAAC;IACnE,IAAI,QAAQ,GAA0B,IAAI,CAAC,QAAiC,CAAC;IAC7E,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC7B,YAAY,GAAG,YAAY,IAAI,IAAI,YAAY,CAAC,MAAM,EAAE,EAAC,UAAU,EAAE,UAAU,EAAC,CAAC,CAAC;QAClF,QAAQ,GAAG,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAY,UAAU,CAAC,CAAC;IAClE,CAAC;IACD,QAAQ,CAAC,UAAU,SAAS,SAAS,EAAE,iBAAiB,UAAU,EAAE,CAAC,CAAC;IAQtE,OAAO;QACL,UAAU;QACV,UAAU;QACV,gBAAgB,EAAE,CAAC,MAA8B,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACpG,yBAAyB,EAAE,CAAC,MAAuC,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC;QAC/H,KAAK,EAAE,CAAC,MAAmB,EAAE,UAAuB,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACxG,gBAAgB;QAChB,SAAS,EAAE,CAAC,MAAuB,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC/E,YAAY,EAAE,CAAC,MAA0B,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACxF,MAAM;QACN,WAAW,EAAE,CAAC,aAAqB,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QACxF,aAAa,EAAE,CAAC,MAA+B,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC/F,MAAM;QACN,SAAS;QACT,QAAQ,EAAE,CAAC,MAAsB,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC5E,iBAAiB,EAAE,CAAC,MAA+B,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACvG,OAAO;QACP,YAAY;QACZ,YAAY,EAAE,CAAC,MAAkD,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAChH,aAAa,EAAE,CAAC,MAA+E,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC/I,WAAW,EAAE,CAAC,MAA+B,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC3F,WAAW,EAAE,CAAC,MAAiD,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;KAC9G,CAAC;IAMF,KAAK,UAAU,UAAU,CAAC,EAAC,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAmB;QAChH,QAAQ,CAAC,YAAY,CAAC,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,YAAY,GAAG;YACnB,aAAa;YACb,SAAS;YACT,SAAS;YACT,UAAU,EAAE,CAAC,SAAS,CAAC;YACvB,YAAY;YACZ,iBAAiB,EAAE;gBACjB,IAAI,EAAE,IAAI;gBACV,GAAG,iBAAiB;aACa;YACnC,cAAc,EAAE,gBAAgB,CAAC,SAAS,CAAC,kBAAkB;YAC7D,QAAQ,EAAE,CAAC;YACX,cAAc,EAAE;gBACd,MAAM,EAAE,gBAAgB,CAAC,KAAK;gBAC9B,MAAM,EAAE,gBAAgB,CAAC,KAAK;gBAC9B,GAAG,EAAE,gBAAgB,CAAC,KAAK;aAC5B;YACD,OAAO,EAAE,EAAE;YACX,YAAY,EAAE,EAAE;YAChB,WAAW,EAAE,EAAE;YACf,YAAY,EAAE,IAAI;YAClB,gBAAgB,EAAE,IAAI;SACvB,CAAC;QACF,IAAI,CAAC;YACH,QAAQ,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,UAAU,GAAG,CAAC,CAAC;YACzE,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YACtD,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;YACjC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;gBACxB,MAAM,CAAC,IAAI,CAAC,2BAA2B,SAAS,IAAI,aAAa,qBAAqB,UAAU,EAAE,CAAC,CAAC;gBACpG,OAAO;YACT,CAAC;YACD,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;QAClE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,KAAiB,CAAC;YACnC,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;YAChE,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChB,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,qBAAqB,EAAE,kBAAkB,YAAY,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IAOD,KAAK,UAAU,UAAU,CAAC,EAAC,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,EAAE,iBAAiB,EAAmB;QACvJ,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,YAAY,GAAG;YACnB,aAAa;YACb,SAAS;YACT,YAAY;YACZ,SAAS;YACT,UAAU,EAAE,CAAC,SAAS,CAAC;YACvB,iBAAiB,EAAE;gBACjB,IAAI,EAAE,KAAK;gBACX,GAAG,iBAAiB;aACa;YACnC,WAAW;YACX,gBAAgB;YAChB,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,mBAAmB;YAC9G,QAAQ,EAAE,CAAC;YACX,cAAc,EAAE;gBACd,MAAM,EAAE,gBAAgB,CAAC,KAAK;gBAC9B,MAAM,EAAE,gBAAgB,CAAC,KAAK;gBAC9B,GAAG,EAAE,gBAAgB,CAAC,KAAK;aAC5B;YACD,OAAO,EAAE,EAAE;YACX,YAAY,EAAE,EAAE;YAChB,WAAW,EAAE,EAAE;YACf,YAAY,EAAE,IAAI;YAClB,gBAAgB,EAAE,IAAI;SACvB,CAAC;QAEF,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAC7B,IAAI,CAAC;gBAGH,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;oBACpC,MAAM,YAAY,GAAG,YAAY,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;oBAIlE,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;wBACjC,YAAY,CAAC,OAAO,EAAE,CAAC;wBACvB,MAAM,CAAC,KAAK,CAAC,CAAC;oBAChB,CAAC,CAAC,CAAC;oBAEH,MAAM;yBACH,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;wBAGrB,YAAY,CAAC,OAAO,EAAE,CAAC;wBACvB,MAAM,CAAC,KAAK,CAAC,CAAC;oBAChB,CAAC,CAAC;yBACD,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;yBAC9C,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE;wBAChD,OAAO,CAAC,aAAa,CAAC,CAAC;oBACzB,CAAC,CAAC,CAAC,CAAC;gBACR,CAAC,CAAC,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,2BAA2B,SAAS,IAAI,aAAa,qBAAqB,UAAU,GAAG,CAAC,CAAC;gBACrG,KAAK,CAAC,2BAA2B,SAAS,IAAI,aAAa,qBAAqB,UAAU,GAAG,CAAC,CAAC;gBAC/F,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;gBACtD,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;oBACzB,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;gBAClE,CAAC;gBAGD,OAAO,EAAC,aAAa,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,cAAc,EAAE,YAAY,CAAC,cAAc,EAAC,CAAC;YACzG,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,QAAQ,GAAG,KAAiB,CAAC;gBACnC,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;gBAChE,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAEhB,MAAM,oBAAoB,CAAC,aAAa,CAAC,CAAC;gBAC1C,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,qBAAqB,EAAE,kBAAkB,YAAY,EAAE,CAAC,CAAC;YACzF,CAAC;QACH,CAAC;QAMD,KAAK,UAAU,oBAAoB,CAAC,aAAqB;YACvD,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAE,aAAa,EAAC,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC3E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,MAAM,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACpC,MAAM,CAAC,KAAK,CAAC,qDAAqD,aAAa,EAAE,CAAC,CAAC;gBACrF,CAAC;YACH,CAAC;YAAC,OAAO,YAAY,EAAE,CAAC;gBACtB,MAAM,QAAQ,GAAG,YAAwB,CAAC;gBAC1C,MAAM,CAAC,KAAK,CAAC,uDAAuD,aAAa,KAAK,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5G,CAAC;QACH,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC1B,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;gBACtD,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;oBACxB,MAAM,CAAC,IAAI,CAAC,oCAAoC,SAAS,IAAI,aAAa,qBAAqB,UAAU,EAAE,CAAC,CAAC;oBAC7G,KAAK,CAAC,oCAAoC,SAAS,IAAI,aAAa,qBAAqB,UAAU,EAAE,CAAC,CAAC;oBAEvG,OAAO,EAAC,aAAa,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,cAAc,EAAE,gBAAgB,CAAC,SAAS,CAAC,mBAAmB,EAAC,CAAC;gBAC5H,CAAC;gBACD,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;YAClE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,QAAQ,GAAG,KAAiB,CAAC;gBACnC,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;gBAChE,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAChB,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,qBAAqB,EAAE,kBAAkB,YAAY,EAAE,CAAC,CAAC;YACzF,CAAC;QACH,CAAC;QAID,OAAO,SAAS,CAAC;IACnB,CAAC;IAgBD,KAAK,UAAU,gBAAgB,CAAC,EAAC,aAAa,EAAE,KAAK,EAAE,YAAY,GAAG,SAAS,EAAE,WAAW,GAAG,SAAS,EAAyB;QAC/H,YAAY,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QAI7C,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,EAAC,aAAa,EAAC,CAAC,CAAC;QACpD,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,EAAC,aAAa,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAC,CAAC,CAAC;YACpF,OAAO,EAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAC,CAAC;QACxC,CAAC;QAGD,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,EAAC,aAAa,EAAC,EAAE,EAAC,UAAU,EAAE,EAAC,GAAG,EAAE,CAAC,EAAC,EAAC,CAAC,CAAC;QAClF,MAAM,MAAM,GAAG,SAAS,IAAI,SAAS,CAAC,cAAc,KAAK,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;QAC1G,OAAO,EAAC,MAAM,EAAE,SAAS,EAAC,CAAC;IAC7B,CAAC;IAWD,KAAK,UAAU,yBAAyB,CAAC,EAAC,aAAa,EAAE,SAAS,EAAE,cAAc,EAAkC;QAClH,YAAY,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QAI7C,MAAM,CAAC,KAAK,CAAC,GAAG,aAAa,KAAK,cAAc,KAAK,SAAS,EAAE,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,EAAC,aAAa,EAAE,SAAS,EAAE,cAAc,EAAC,CAAC,CAAC;QAC/E,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,EAAC,aAAa,EAAE,SAAS,EAAE,cAAc,EAAC,CAAC,CAAC;YACtF,OAAO,EAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAC,CAAC;QACxC,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,EAAC,aAAa,EAAC,EAAE,EAAC,UAAU,EAAE,EAAC,GAAG,EAAE,CAAC,EAAC,EAAC,CAAC,CAAC;QAClF,MAAM,MAAM,GAAG,SAAS,IAAI,SAAS,CAAC,cAAc,KAAK,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;QAC1G,OAAO,EAAC,MAAM,EAAE,SAAS,EAAC,CAAC;IAC7B,CAAC;IAQD,KAAK,UAAU,KAAK,CAAC,MAAmB,EAAE,aAAyB,EAAE;QACnE,MAAM,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACnF,KAAK,CAAC,aAAa,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC5E,MAAM,EAAC,KAAK,GAAG,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE,GAAG,IAAI,EAAC,GAAG,MAAM,CAAC;QAMjD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAiC,EAAE,EAAC,UAAU,EAAE,gBAAgB,CAAC,UAAU,CAAC,EAAC,CAAC;aAC9G,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;aAClC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;aAChC,OAAO,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,iBAAiB,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;QAC7E,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1C,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACnC,OAAO,MAAM,CAAC;IAChB,CAAC;IAWD,SAAS,gBAAgB,CAAC,aAAyB,EAAE;QACnD,MAAM,CAAC,KAAK,CAAC,kCAAkC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC7E,KAAK,CAAC,kCAAkC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACtE,MAAM,EAAC,OAAO,GAAG,CAAC,EAAE,cAAc,GAAG,CAAC,EAAE,qBAAqB,GAAG,CAAC,EAAE,oBAAoB,GAAG,CAAC,EAAE,kBAAkB,GAAG,CAAC,EAAC,GAAG,UAAU,CAAC;QAClI,MAAM,kBAAkB,GAAgC;YACtD,OAAO;YACP,cAAc;YACd,qBAAqB;YACrB,oBAAoB;YACpB,kBAAkB;SACnB,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,YAAY,OAAO,qBAAqB,cAAc,4BAA4B,qBAAqB,2BAA2B,oBAAoB,yBAAyB,kBAAkB,EAAE,CAAC,CAAC;QAClN,KAAK,CAAC,YAAY,OAAO,qBAAqB,cAAc,4BAA4B,qBAAqB,2BAA2B,oBAAoB,yBAAyB,kBAAkB,EAAE,CAAC,CAAC;QAC3M,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;QAQ/C,IAAI,YAAY,CAAC,OAAwC,CAAC,EAAE,CAAC;YAC3D,KAAK,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC;YAC7B,OAAO;gBACL,GAAG,EAAE,CAAC;aACP,CAAC;QACJ,CAAC;QAED,MAAM,gBAAgB,GAAG;YACvB,gBAAgB,EAAE,YAAY;YAC9B,uBAAuB,EAAE,mBAAmB;YAC5C,sBAAsB,EAAE,kBAAkB;YAC1C,oBAAoB,EAAE,gBAAgB;SAC9B,CAAC;QAEX,MAAM,MAAM,GAAa,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC;aAErD,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,KAAK,CAAkC,CAAC,CAAC;aACjH,MAAM,CAAC,CAAC,KAAK,EAA0C,EAAE,CAAC,KAAK,IAAI,gBAAgB,CAAC;aACpF,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,uCAAuC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC9E,KAAK,CAAC,uCAAuC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAGvE,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,CAAC,KAAK,CAAC,uCAAuC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACrF,KAAK,CAAC,uCAAuC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAG9E,OAAO;YACL,GAAG,EAAE,CAAC;YACN,GAAG,aAAa;SACjB,CAAC;IACJ,CAAC;IASD,KAAK,UAAU,SAAS,CAAC,EAAC,aAAa,EAAE,YAAY,GAAG,KAAK,EAAkB;QAC7E,YAAY,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QAC7C,IAAI,YAAY,EAAE,CAAC;YACjB,KAAK,CAAC,2BAA2B,YAAY,EAAE,CAAC,CAAC;YACjD,MAAM,YAAY,CAAC,EAAC,aAAa,EAAC,CAAC,CAAC;YACpC,OAAO,SAAS,CAAC,EAAC,aAAa,EAAC,CAAC,CAAC;QACpC,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,EAAC,aAAa,EAAC,EAAE,EAAC,UAAU,EAAE,EAAC,GAAG,EAAE,CAAC,EAAC,EAAC,CAAC,CAAC;QAC/E,OAAO,MAAM,CAAC;IAChB,CAAC;IAeD,KAAK,UAAU,YAAY,CAAC,EAAC,aAAa,EAAqB;QAC7D,YAAY,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QAC7C,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,EAAC,aAAa,EAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,GAAG,aAAa,iBAAiB,UAAU,kBAAkB,CAAC,CAAC;YAC5E,OAAO,KAAK,CAAC;QACf,CAAC;QAID,MAAM,EAAC,gBAAgB,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc,GAAG,EAAC,MAAM,EAAE,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,CAAC,KAAK,EAAE,GAAG,EAAE,gBAAgB,CAAC,KAAK,EAAC,EAAC,GAAG,SAAS,CAAC;QAG/K,IAAI,QAAQ,KAAK,gBAAgB,CAAC,KAAK,IAAI,QAAQ,KAAK,gBAAgB,CAAC,KAAK,IAAI,QAAQ,KAAK,gBAAgB,CAAC,IAAI,EAAE,CAAC;YACrH,MAAM,CAAC,KAAK,CAAC,GAAG,aAAa,uBAAuB,QAAQ,EAAE,CAAC,CAAC;YAChE,OAAO,KAAK,CAAC;QACf,CAAC;QAGD,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,gBAAwB,CAAC,CAAC,OAAO,EAAE,GAAG,cAAc,GAAG,KAAK,CAAC,CAAC;QACpG,MAAM,CAAC,KAAK,CAAC,GAAG,aAAa,cAAc,WAAW,EAAE,CAAC,CAAC;QAE1D,IAAI,WAAW,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;YAI7B,MAAM,oBAAoB,GAAa,CAAC,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACvI,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1D,MAAM,iBAAiB,CAAC,EAAC,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,CAAC,KAAK,EAAC,CAAC,CAAC;YACxG,CAAC;YAED,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1D,MAAM,iBAAiB,CAAC,EAAC,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,CAAC,KAAK,EAAC,CAAC,CAAC;YACxG,CAAC;YAED,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvD,MAAM,iBAAiB,CAAC,EAAC,aAAa,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,gBAAgB,CAAC,KAAK,EAAC,CAAC,CAAC;YACrG,CAAC;YAED,MAAM,QAAQ,CAAC,EAAC,aAAa,EAAE,KAAK,EAAE,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,CAAC,eAAe,EAAE,YAAY,EAAE,cAAc,QAAQ,EAAE,EAAC,CAAC,CAAC;YAEhJ,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAOD,KAAK,UAAU,MAAM,CAAC,MAA+B;QACnD,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,wBAAwB,UAAU,SAAS,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;QAC/E,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACnC,KAAK,CAAC,wBAAwB,UAAU,SAAS,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;QACzE,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QAGpD,IAAI,CAAC;YAGH,MAAM,cAAc,GAAG,MAAM,aAAa,CAAC,EAAC,aAAa,EAAE,MAAM,CAAC,aAAa,EAAC,CAAC,CAAC;YAClF,KAAK,CAAC,0CAA0C,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YAClF,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,EAAC,aAAa,EAAE,MAAM,CAAC,aAAa,EAAC,CAAC,CAAC;YACrF,KAAK,CAAC,iBAAiB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YAGvD,OAAO,EAAC,OAAO,EAAE,YAAY,CAAC,YAAY,GAAG,CAAC,EAAE,cAAc,EAAE,cAAc,EAAC,CAAC;QAClF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,gBAAgB,EAAE,CAAC;gBACpC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACX,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;oBACxD,MAAM,CAAC,KAAK,CAAC,oDAAoD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,UAAU,EAAE,CAAC,CAAC;oBAC5H,KAAK,CAAC,oDAAoD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,UAAU,EAAE,CAAC,CAAC;oBACrH,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,EAAC,aAAa,EAAE,MAAM,CAAC,aAAa,EAAC,CAAC,CAAC;oBACrF,OAAO,EAAC,OAAO,EAAE,YAAY,CAAC,YAAY,GAAG,CAAC,EAAE,cAAc,EAAE,KAAK,EAAC,CAAC;gBACzE,CAAC;gBACD,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC1B,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,qBAAqB,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YACpE,CAAC;YACD,MAAM,WAAW,GAAG,GAAY,CAAC;YACjC,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,qBAAqB,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAOD,KAAK,UAAU,WAAW,CAAC,aAAqB;QAC9C,MAAM,CAAC,IAAI,CAAC,sCAAsC,aAAa,OAAO,UAAU,EAAE,CAAC,CAAC;QACpF,KAAK,CAAC,sCAAsC,aAAa,OAAO,UAAU,EAAE,CAAC,CAAC;QAC9E,YAAY,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QAE7C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,EAAC,aAAa,EAAC,CAAC,CAAC;QACvD,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,EAAC,iBAAiB,EAAC,GAAG,MAAM,CAAC;YAInC,IAAI,KAAK,GAAiB,EAAE,CAAC;YAC7B,IAAI,iBAAiB,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;gBACrC,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAE,aAAa,EAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACvE,CAAC;YACD,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YACpC,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO;oBACL,WAAW,EAAE,MAAM,CAAC,WAAW;oBAK/B,UAAU,EAAE,YAAY,CAAC,wBAAwB,CAAC,aAAa,CAAC;iBACjE,CAAC;YACJ,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,yBAAyB,aAAa,KAAK,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;YAC7F,KAAK,CAAC,yBAAyB,aAAa,KAAK,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;YACtF,KAAK,CAAC,kDAAkD,aAAa,2BAA2B,CAAC,CAAC;YAClG,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,EAAC,OAAO,EAAE,kDAAkD,aAAa,2BAA2B,EAAC,CAAC,CAAC;QACpJ,CAAC;QAED,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,SAAS,EAAE,EAAC,OAAO,EAAE,OAAO,aAAa,aAAa,EAAC,CAAC,CAAC;IACzF,CAAC;IAOD,KAAK,UAAU,aAAa,CAAC,MAA+B;QAC1D,MAAM,CAAC,IAAI,CAAC,uCAAuC,MAAM,CAAC,aAAa,OAAO,UAAU,EAAE,CAAC,CAAC;QAC5F,KAAK,CAAC,uCAAuC,MAAM,CAAC,aAAa,OAAO,UAAU,EAAE,CAAC,CAAC;QACtF,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QAEpD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAE,MAAM,CAAC,aAAa,EAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACnF,KAAK,CAAC,2CAA2C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAG3E,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAGtB,MAAM,CAAC,iBAAiB,CAAC,GAAG,MAAM,CAAC;YACnC,MAAM,MAAM,GAAI,iBAAgC,CAAC,GAAG,CAAC;YAErD,MAAM,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,gBAAgB,MAAM,CAAC,aAAa,YAAY,CAAC,CAAC;QAG/D,OAAO,KAAK,CAAC;IACf,CAAC;IASD,KAAK,UAAU,MAAM,CAAC,EAAC,cAAc,EAAE,cAAc,GAAG,SAAS,EAAe;QAE9E,MAAM,CAAC,KAAK,CAAC,mBAAmB,cAAc,qBAAqB,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QAGrG,IAAI,cAAc,EAAE,CAAC;YACnB,YAAY,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,cAAc,EAAE,CAAC;YACnB,0BAA0B,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;QAC/D,CAAC;QACD,MAAM,mBAAmB,GAAG,cAAc,CAAC,CAAC,CAAC,EAAC,cAAc,EAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1E,MAAM,OAAO,GAAG,EAAC,UAAU,EAAE,EAAC,GAAG,EAAE,CAAC,EAAC,EAAC,CAAC;QAEvC,IAAI,CAAC;YAGH,IAAI,cAAc,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;gBACnD,MAAM,CAAC,KAAK,CAAC,eAAe,UAAU,aAAa,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;gBAErF,OAAO,QAAQ,CAAC,OAAO,CAAC,EAAC,cAAc,EAAC,EAAE,OAAO,CAAC,CAAC;YACrD,CAAC;YAGD,IAAI,cAAc,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;gBACnD,MAAM,CAAC,KAAK,CAAC,eAAe,UAAU,QAAQ,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;gBAEhF,OAAO,QAAQ,CAAC,OAAO,CAAC,EAAC,GAAG,cAAc,EAA8B,EAAE,OAAO,CAAC,CAAC;YACrF,CAAC;YAGD,IAAI,cAAc,IAAI,cAAc,EAAE,CAAC;gBACrC,MAAM,CAAC,KAAK,CAAC,eAAe,UAAU,QAAQ,cAAc,QAAQ,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;gBAEtG,OAAO,QAAQ,CAAC,OAAO,CAAC,EAAC,GAAG,mBAAmB,EAAE,GAAG,cAAc,EAA8B,EAAE,OAAO,CAAC,CAAC;YAC7G,CAAC;YAED,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACpC,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,qBAAqB,EAAE,0CAA0C,CAAC,CAAC;QAEnG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,KAAiB,CAAC;YACnC,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;YAChE,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChB,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,qBAAqB,EAAE,kBAAkB,YAAY,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IAcD,KAAK,UAAU,SAAS,CAAC,aAAqB;QAC5C,MAAM,CAAC,IAAI,CAAC,iCAAiC,aAAa,OAAO,UAAU,EAAE,CAAC,CAAC;QAC/E,YAAY,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QAC7C,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAE,aAAa,EAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YAC3E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,MAAM,CAAC,IAAI,CAAC,mBAAmB,aAAa,iBAAiB,UAAU,EAAE,CAAC,CAAC;gBAC3E,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,SAAS,EAAE,EAAC,OAAO,EAAE,QAAQ,aAAa,iBAAiB,UAAU,EAAE,EAAC,CAAC,CAAC;YAC1G,CAAC;YAED,OAAO,YAAY,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;gBAC9B,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,QAAQ,GAAG,KAAiB,CAAC;YACnC,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;YAChE,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChB,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,qBAAqB,EAAE,kBAAkB,YAAY,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IAMD,KAAK,UAAU,OAAO,CAAC,EAAC,aAAa,EAAE,UAAU,EAAE,WAAW,EAAgB;QAG5E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9D,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,oDAAoD,CAAC,CAAC;QACnG,CAAC;QACD,YAAY,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QAC7C,MAAM,CAAC,OAAO,CAAC,aAAa,UAAU,CAAC,MAAM,sBAAsB,WAAW,CAAC,MAAM,KAAK,aAAa,OAAO,UAAU,EAAE,CAAC,CAAC;QAC5H,MAAM,CAAC,KAAK,CAAC,QAAQ,UAAU,CAAC,MAAM,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,iBAAiB,WAAW,CAAC,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC7I,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,SAAS,CAAC;gBACvB,aAAa;aACd,EAAE;gBACD,IAAI,EAAE;oBACJ,gBAAgB,EAAE,IAAI,IAAI,EAAE;iBAC7B;gBACD,KAAK,EAAE;oBACL,UAAU,EAAE,EAAC,KAAK,EAAE,UAAU,EAAC;oBAC/B,WAAW,EAAE,EAAC,KAAK,EAAE,WAAW,EAAC;iBAClC;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,KAAiB,CAAC;YACnC,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;YAChE,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChB,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,qBAAqB,EAAE,kBAAkB,YAAY,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IAMD,KAAK,UAAU,YAAY,CAAC,EAAC,aAAa,EAAE,QAAQ,EAAE,YAAY,GAAG,UAAU,EAAqB;QAGlG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,yCAAyC,CAAC,CAAC;QACxF,CAAC;QACD,YAAY,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QAC7C,YAAY,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;QAC3C,MAAM,CAAC,OAAO,CAAC,kBAAkB,QAAQ,CAAC,MAAM,QAAQ,YAAY,IAAI,aAAa,OAAO,UAAU,EAAE,CAAC,CAAC;QAC1G,MAAM,CAAC,KAAK,CAAC,aAAa,QAAQ,CAAC,MAAM,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC3E,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,SAAS,CAAC;gBACvB,aAAa;aACd,EAAE;gBACD,IAAI,EAAE;oBACJ,gBAAgB,EAAE,IAAI,IAAI,EAAE;iBAC7B;gBACD,KAAK,EAAE;oBACL,CAAC,YAAY,CAAC,EAAE,EAAC,KAAK,EAAE,QAAQ,EAAC;iBAClC;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,KAAiB,CAAC;YACnC,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;YAChE,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChB,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,qBAAqB,EAAE,kBAAkB,YAAY,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IAOD,SAAS,QAAQ,CAAC,EAAC,aAAa,EAAE,KAAK,EAAE,YAAY,GAAG,SAAS,EAAE,WAAW,GAAG,SAAS,EAAiB;QACzG,YAAY,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QAC7C,MAAM,WAAW,GAAG,YAAY,IAAI,WAAW,CAAC,CAAC,CAAC,qBAAqB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,qBAAqB,WAAW,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACxJ,MAAM,CAAC,IAAI,CAAC,4BAA4B,KAAK,QAAQ,aAAa,GAAG,WAAW,OAAO,UAAU,EAAE,CAAC,CAAC;QAMrG,MAAM,kBAAkB,GAAa;YACnC,gBAAgB,CAAC,IAAI;YACrB,gBAAgB,CAAC,KAAK;YACtB,gBAAgB,CAAC,KAAK;YACtB,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC;YAC5C,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC;SAC5C,CAAC;QACF,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACxC,KAAK,CAAC,+BAA+B,KAAK,EAAE,CAAC,CAAC;YAC9C,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,6BAA6B,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,YAAY,GAA4B;YAC5C,cAAc,EAAE,KAAK;YACrB,gBAAgB,EAAE,IAAI,IAAI,EAAE;YAC5B,YAAY;YACZ,WAAW;SACZ,CAAC;QAOF,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;QAEtG,OAAO,QAAQ;aACZ,gBAAgB,CACf,EAAC,aAAa,EAAC,EACf,EAAC,IAAI,EAAE,YAAY,EAAoC,EACvD,EAAC,UAAU,EAAE,EAAC,GAAG,EAAE,CAAC,EAAC,EAAE,cAAc,EAAE,OAAO,EAAC,CAChD,CAAC;IACN,CAAC;IAOD,SAAS,iBAAiB,CAAC,EAAC,aAAa,EAAE,SAAS,EAAE,cAAc,EAA0B;QAG5F,YAAY,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,uCAAuC,SAAS,KAAK,cAAc,SAAS,aAAa,EAAE,CAAC,CAAC;QACzG,KAAK,CAAC,uCAAuC,SAAS,KAAK,cAAc,SAAS,aAAa,EAAE,CAAC,CAAC;QAEnG,IAAI,CAAC,CAAC,SAAS,IAAI,UAAU,CAAC,EAAE,CAAC;YAC/B,KAAK,CAAC,UAAU,SAAS,cAAc,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YACrE,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,wCAAwC,CAAC,CAAC;QACvF,CAAC;QAED,IAAI,CAAC,CAAC,cAAc,IAAI,gBAAgB,CAAC,EAAE,CAAC;YAC1C,KAAK,CAAC,UAAU,cAAc,cAAc,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;YAChF,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,0BAA0B,CAAC,CAAC;QACzE,CAAC;QAED,MAAM,WAAW,GAAG,cAAc,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QAE9D,OAAO,QAAQ,CAAC,gBAAgB,CAAC;YAC/B,aAAa;SACd,EAAE;YACD,IAAI,EAAE;gBACJ,GAAG,WAAW;gBACd,gBAAgB,EAAE,IAAI,IAAI,EAAE;aAC7B;SACF,EAAE,EAAC,UAAU,EAAE,EAAC,GAAG,EAAE,CAAC,EAAC,EAAE,cAAc,EAAE,OAAO,EAAC,CAAC,CAAC;IACtD,CAAC;IAQD,SAAS,cAAc,CAAC,SAAiB,EAAE,cAAsB;QAK/D,IAAI,SAAS,KAAK,UAAU,CAAC,MAAM,EAAE,CAAC;YACpC,OAAO,EAAC,uBAAuB,EAAE,cAAc,EAAC,CAAC;QACnD,CAAC;QACD,IAAI,SAAS,KAAK,UAAU,CAAC,MAAM,EAAE,CAAC;YACpC,OAAO,EAAC,uBAAuB,EAAE,cAAc,EAAC,CAAC;QACnD,CAAC;QACD,IAAI,SAAS,KAAK,UAAU,CAAC,GAAG,EAAE,CAAC;YACjC,OAAO,EAAC,oBAAoB,EAAE,cAAc,EAAC,CAAC;QAChD,CAAC;QAKD,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,wCAAwC,CAAC,CAAC;IACvF,CAAC;IAcD,SAAS,qBAAqB,CAAC,MAAgC,EAAE,aAAqB;QACpF,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC,cAAc,aAAa,iBAAiB,UAAU,EAAE,CAAC,CAAC;YACtE,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,SAAS,EAAE,EAAC,OAAO,EAAE,OAAO,aAAa,aAAa,EAAC,CAAC,CAAC;QACzF,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAOD,KAAK,UAAU,YAAY,CAAC,EAAC,aAAa,EAAE,SAAS,EAA6C;QAChG,YAAY,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QAC7C,MAAM,YAAY,GAAG,SAAS,CAAC;QAC/B,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,EAAC,aAAa,EAAC,CAAC,CAAC;QACzD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,CAAC,IAAI,CAAC,4CAA4C,aAAa,iBAAiB,UAAU,EAAE,CAAC,CAAC;YACpG,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,SAAS,EAAE,EAAC,OAAO,EAAE,OAAO,aAAa,aAAa,EAAC,CAAC,CAAC;QACzF,CAAC;QACD,MAAM,EAAC,SAAS,EAAE,YAAY,EAAC,GAAG,QAAQ,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,qCAAqC,YAAY,OAAO,YAAY,QAAQ,aAAa,OAAO,UAAU,EAAE,CAAC,CAAC;QAE1H,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC;YAC7C,aAAa;SACd,EAAE;YACD,IAAI,EAAE;gBACJ,SAAS,EAAE,YAAY;gBACvB,gBAAgB,EAAE,IAAI,IAAI,EAAE;aAC7B;SACF,EAAE,EAAC,UAAU,EAAE,EAAC,GAAG,EAAE,CAAC,EAAC,EAAE,cAAc,EAAE,OAAO,EAAC,CAAC,CAAC;QACpD,QAAQ,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACtC,OAAO,qBAAqB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAEtD,CAAC;IAOD,KAAK,UAAU,aAAa,CAAC,EAAC,aAAa,EAAE,YAAY,EAAE,eAAe,GAAG,SAAS,EAA0E;QAC9J,YAAY,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QAE7C,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,EAAC,aAAa,EAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,CAAC,yBAAyB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACnE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,6CAA6C,aAAa,iBAAiB,UAAU,EAAE,CAAC,CAAC;YACrG,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,SAAS,EAAE,EAAC,OAAO,EAAE,OAAO,aAAa,aAAa,EAAC,CAAC,CAAC;QACzF,CAAC;QAED,MAAM,aAAa,GAAG,SAAS,CAAC,UAAU,CAAC;QAE3C,MAAM,CAAC,IAAI,CAAC,sCAAsC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,cAAc,YAAY,iBAAiB,eAAe,QAAQ,aAAa,OAAO,UAAU,EAAE,CAAC,CAAC;QAEnL,MAAM,qBAAqB,GAAG,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,KAAK,eAAe,CAAC,CAAC;QAC/F,MAAM,2BAA2B,GAAG,qBAAqB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,GAAG,qBAAqB,EAAE,YAAY,CAAC,CAAC;QAEpJ,MAAM,CAAC,KAAK,CAAC,0BAA0B,qBAAqB,EAAE,CAAC,CAAC;QAChE,MAAM,CAAC,KAAK,CAAC,+BAA+B,2BAA2B,EAAE,CAAC,CAAC;QAE3E,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC;YAC7C,aAAa;SACd,EAAE;YACD,IAAI,EAAE;gBACJ,UAAU,EAAE,2BAA2B;gBACvC,gBAAgB,EAAE,IAAI,IAAI,EAAE;aAC7B;SACF,EAAE,EAAC,UAAU,EAAE,EAAC,GAAG,EAAE,CAAC,EAAC,EAAE,cAAc,EAAE,OAAO,EAAC,CAAC,CAAC;QACpD,QAAQ,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACtC,OAAO,qBAAqB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAEtD,CAAC;IAOD,KAAK,UAAU,WAAW,CAAC,EAAC,aAAa,EAA0B;QACjE,YAAY,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QAE7C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC;YAC7C,aAAa;YACb,cAAc,EAAE,gBAAgB,CAAC,SAAS,CAAC,mBAAmB;SAC/D,EAAE;YACD,IAAI,EAAE;gBACJ,QAAQ,EAAE,CAAC;aACZ;YACD,IAAI,EAAE;gBACJ,gBAAgB,EAAE,IAAI,IAAI,EAAE;aAC7B;SACF,EAAE,EAAC,UAAU,EAAE,EAAC,GAAG,EAAE,CAAC,EAAC,EAAE,cAAc,EAAE,OAAO,EAAC,CAAC,CAAC;QAEpD,MAAM,CAAC,OAAO,CAAC,+BAA+B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxE,QAAQ,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACtC,OAAO,MAAM,CAAC;IAChB,CAAC;IAOD,KAAK,UAAU,WAAW,CAAC,EAAC,aAAa,EAAE,QAAQ,EAA4C;QAC7F,YAAY,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QAC7C,YAAY,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAEnC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC;YAC7C,aAAa;SACd,EAAE;YACD,IAAI,EAAE;gBACJ,QAAQ;gBACR,gBAAgB,EAAE,IAAI,IAAI,EAAE;aAC7B;SACF,EAAE,EAAC,UAAU,EAAE,EAAC,GAAG,EAAE,CAAC,EAAC,EAAE,cAAc,EAAE,OAAO,EAAC,CAAC,CAAC;QAEpD,MAAM,CAAC,OAAO,CAAC,+BAA+B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxE,QAAQ,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACtC,OAAO,MAAM,CAAC;IAChB,CAAC;AAEH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongoError.d.ts","sourceRoot":"","sources":["../src/mongoError.ts"],"names":[],"mappings":"AAgBA,wBAAsB,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAYxE"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { MongoDriverError } from 'mongodb';
|
|
2
|
+
import httpStatus from 'http-status';
|
|
3
|
+
import { Error as ApiError } from '@natlibfi/melinda-commons';
|
|
4
|
+
import { logError } from "./utils.js";
|
|
5
|
+
export async function withMongoError(fn) {
|
|
6
|
+
try {
|
|
7
|
+
return await fn();
|
|
8
|
+
}
|
|
9
|
+
catch (error) {
|
|
10
|
+
if (!(error instanceof MongoDriverError)) {
|
|
11
|
+
throw error;
|
|
12
|
+
}
|
|
13
|
+
const apiError = error;
|
|
14
|
+
const errorMessage = apiError.payload || apiError.message || '';
|
|
15
|
+
logError(error);
|
|
16
|
+
throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=mongoError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongoError.js","sourceRoot":"","sources":["../src/mongoError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAC,MAAM,SAAS,CAAC;AACzC,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,EAAC,KAAK,IAAI,QAAQ,EAAC,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AAapC,MAAM,CAAC,KAAK,UAAU,cAAc,CAAI,EAAoB;IAC1D,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,KAAK,YAAY,gBAAgB,CAAC,EAAE,CAAC;YACzC,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,QAAQ,GAAG,KAA4B,CAAC;QAC9C,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;QAChE,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChB,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,qBAAqB,EAAE,kBAAkB,YAAY,EAAE,CAAC,CAAC;IACzF,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { DeleteResult, UpdateResult, WithId } from 'mongodb';
|
|
2
|
+
import { LOG_ITEM_TYPE } from './constants.ts';
|
|
3
|
+
export type LogItemType = (typeof LOG_ITEM_TYPE)[keyof typeof LOG_ITEM_TYPE];
|
|
4
|
+
export interface LogItem {
|
|
5
|
+
logItemType: string;
|
|
6
|
+
correlationId: string;
|
|
7
|
+
cataloger?: string;
|
|
8
|
+
blobSequence?: number;
|
|
9
|
+
blobSequenceStart?: number;
|
|
10
|
+
blobSequenceEnd?: number;
|
|
11
|
+
protected?: boolean;
|
|
12
|
+
creationTime?: Date;
|
|
13
|
+
modificationTime?: Date;
|
|
14
|
+
}
|
|
15
|
+
export interface LogQueryParams {
|
|
16
|
+
limit?: number | string;
|
|
17
|
+
skip?: number | string;
|
|
18
|
+
[key: string]: unknown;
|
|
19
|
+
}
|
|
20
|
+
export interface ExpandedLogListParams {
|
|
21
|
+
logItemTypes?: unknown;
|
|
22
|
+
catalogers?: string[];
|
|
23
|
+
dateBefore?: string | Date;
|
|
24
|
+
dateAfter?: string | Date;
|
|
25
|
+
test?: boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface ExpandedLogListItem {
|
|
28
|
+
correlationId: string;
|
|
29
|
+
logItemType: string;
|
|
30
|
+
cataloger: string;
|
|
31
|
+
creationTime: string | Date;
|
|
32
|
+
logCount: number;
|
|
33
|
+
}
|
|
34
|
+
export interface MongoLogOperator {
|
|
35
|
+
addLogItem: (logItem: LogItem) => Promise<void>;
|
|
36
|
+
query: (params: LogQueryParams) => Promise<WithId<LogItem>[]>;
|
|
37
|
+
queryById: (correlationId: string, logItemType?: string, skip?: number, limit?: number) => Promise<WithId<LogItem>[]>;
|
|
38
|
+
getListOfLogs: (logItemType?: string) => Promise<string[]>;
|
|
39
|
+
getListOfCatalogers: () => Promise<string[]>;
|
|
40
|
+
getListOfCorrelationIds: () => Promise<string[]>;
|
|
41
|
+
getExpandedListOfLogs: (params: ExpandedLogListParams) => Promise<ExpandedLogListItem[]>;
|
|
42
|
+
protect: (correlationId: string, blobSequence?: number | string) => Promise<UpdateResult>;
|
|
43
|
+
unprotect: (correlationId: string, blobSequence?: number | string) => Promise<UpdateResult>;
|
|
44
|
+
remove: (correlationId: string, force?: boolean) => Promise<DeleteResult>;
|
|
45
|
+
removeBySequences: (correlationId: string, sequences?: (number | string)[], force?: boolean) => Promise<DeleteResult>;
|
|
46
|
+
}
|
|
47
|
+
export default function (MONGO_URI: string, dbName?: string, deps?: {
|
|
48
|
+
collection?: unknown;
|
|
49
|
+
}): Promise<MongoLogOperator>;
|
|
50
|
+
//# sourceMappingURL=mongoLog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongoLog.d.ts","sourceRoot":"","sources":["../src/mongoLog.ts"],"names":[],"mappings":"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"}
|