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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/.github/workflows/melinda-node-tests.yml +9 -6
  2. package/dist/conversion.js +70 -0
  3. package/dist/conversion.js.map +7 -0
  4. package/dist/fix-constants.js +63 -0
  5. package/dist/fix-constants.js.map +7 -0
  6. package/dist/fix-handle-tempurns.js +83 -0
  7. package/dist/fix-handle-tempurns.js.map +7 -0
  8. package/dist/fix-strip-f884s.js +160 -0
  9. package/dist/fix-strip-f884s.js.map +7 -0
  10. package/dist/fix-utils.js +39 -0
  11. package/dist/fix-utils.js.map +7 -0
  12. package/dist/fix.js +142 -0
  13. package/dist/fix.js.map +7 -0
  14. package/dist/validation.js +19 -0
  15. package/dist/validation.js.map +7 -0
  16. package/eslint.config.js +53 -0
  17. package/package.json +23 -96
  18. package/tests/{amqp.health.spec.js → amqp.healthtest.js} +2 -2
  19. package/tests/{amqp.tests.spec.js → amqp.tests.localtest.js} +46 -46
  20. package/tests/helpers/{conversion.spec.js → conversion.test.js} +38 -25
  21. package/tests/helpers/{fix.spec.js → fix.test.js} +6 -6
  22. package/tests/helpers/{validation.spec.js → validation.test.js} +12 -9
  23. package/tests/{mongo-add-blob-size.spec.js → mongo-add-blob-size.test.js} +6 -6
  24. package/tests/{mongo-check-and-check-state.spec.js → mongo-check-and-check-state.test.js} +7 -7
  25. package/tests/{mongo-check-and-set-import-job-state.spec.js → mongo-check-and-set-import-job-state.test.js} +7 -7
  26. package/tests/{mongo-check-timeout.spec.js → mongo-check-timeout.test.js} +7 -7
  27. package/tests/{mongo-create-bulk.spec.js → mongo-create-bulk.test.js} +5 -5
  28. package/tests/{mongo-create-prio.spec.js → mongo-create-prio.test.js} +6 -6
  29. package/tests/{mongo-get-one.spec.js → mongo-get-one.test.js} +7 -7
  30. package/tests/{mongo-get-stream.spec.js → mongo-get-stream.test.js} +7 -7
  31. package/tests/{mongo-push-ids.spec.js → mongo-push-ids.test.js} +5 -5
  32. package/tests/{mongo-push-messages.spec.js → mongo-push-messages.test.js} +6 -6
  33. package/tests/{mongo-query-by-id.spec.js → mongo-query-by-id.test.js} +7 -7
  34. package/tests/{mongo-query.spec.js → mongo-query.test.js} +7 -7
  35. package/tests/{mongo-read-content.spec.js → mongo-read-content.test.js} +8 -8
  36. package/tests/{mongo-remove.spec.js → mongo-remove.test.js} +6 -6
  37. package/tests/{mongo-set-blob-size.spec.js → mongo-set-blob-size.test.js} +6 -6
  38. package/tests/{mongo-set-import-job-state.spec.js → mongo-set-import-job-state.test.js} +6 -6
  39. package/tests/{mongo-set-operation.spec.js → mongo-set-operation.test.js} +6 -6
  40. package/tests/{mongo-set-operations.spec.js → mongo-set-operations.test.js} +6 -6
  41. package/tests/{mongo-set-state.spec.js → mongo-set-state.test.js} +7 -7
  42. package/tests/{mongoLog.spec.js → mongoLog.test.js} +10 -11
  43. package/tests/testUtils.js +9 -8
  44. package/dist/amqp.js +0 -326
  45. package/dist/amqp.js.map +0 -1
  46. package/dist/constants.js +0 -60
  47. package/dist/constants.js.map +0 -1
  48. package/dist/helpers/conversion.js +0 -88
  49. package/dist/helpers/conversion.js.map +0 -1
  50. package/dist/helpers/fix-constants.js +0 -70
  51. package/dist/helpers/fix-constants.js.map +0 -1
  52. package/dist/helpers/fix-handle-tempurns.js +0 -133
  53. package/dist/helpers/fix-handle-tempurns.js.map +0 -1
  54. package/dist/helpers/fix-strip-f884s.js +0 -210
  55. package/dist/helpers/fix-strip-f884s.js.map +0 -1
  56. package/dist/helpers/fix-utils.js +0 -54
  57. package/dist/helpers/fix-utils.js.map +0 -1
  58. package/dist/helpers/fix.js +0 -202
  59. package/dist/helpers/fix.js.map +0 -1
  60. package/dist/helpers/validation.js +0 -37
  61. package/dist/helpers/validation.js.map +0 -1
  62. package/dist/index.js +0 -109
  63. package/dist/index.js.map +0 -1
  64. package/dist/mongo.js +0 -822
  65. package/dist/mongo.js.map +0 -1
  66. package/dist/mongoLog.js +0 -409
  67. package/dist/mongoLog.js.map +0 -1
  68. package/dist/utils.js +0 -211
  69. package/dist/utils.js.map +0 -1
package/dist/utils.js DELETED
@@ -1,211 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.addRecordResponseItem = addRecordResponseItem;
8
- exports.addRecordResponseItems = addRecordResponseItems;
9
- exports.createImportJobState = createImportJobState;
10
- exports.createRecordResponseItem = createRecordResponseItem;
11
- exports.logError = logError;
12
- var _melindaBackendCommons = require("@natlibfi/melinda-backend-commons");
13
- var _melindaCommons = require("@natlibfi/melinda-commons");
14
- var _constants = require("./constants");
15
- var _httpStatus = _interopRequireDefault(require("http-status"));
16
- const logger = (0, _melindaBackendCommons.createLogger)();
17
- function logError(err) {
18
- if (err instanceof _melindaCommons.Error) {
19
- logger.error(JSON.stringify(err));
20
- return;
21
- }
22
- if (err === 'SIGINT') {
23
- logger.error(err);
24
- return;
25
- }
26
- logger.error(err.stack === undefined ? err : err.stack);
27
- }
28
- function createImportJobState(operation, state, queryImportJobState = false) {
29
- if (!(state in _constants.IMPORT_JOB_STATE)) {
30
- throw new Error('Invalid IMPORT_JOB_STATE');
31
- }
32
- if (!(operation in _constants.OPERATIONS)) {
33
- throw new Error('Invalid operation');
34
- }
35
- if (queryImportJobState) {
36
- const importJobStateWithOperation = `importJobState.${operation}`;
37
- const importJobStateForQuery = {
38
- [importJobStateWithOperation]: state
39
- };
40
- return importJobStateForQuery;
41
- }
42
- return {
43
- [operation]: state
44
- };
45
- }
46
- function createRecordResponseItem({
47
- responsePayload,
48
- responseStatus,
49
- recordMetadata,
50
- id
51
- }) {
52
- const recordResponseStatusAndMessage = getRecordResponseStatusAndMessage(responseStatus, responsePayload, id);
53
- const recordResponseItem = {
54
- databaseId: id || '000000000',
55
- recordMetadata: responsePayload.recordMetadata || recordMetadata || undefined,
56
- ...recordResponseStatusAndMessage
57
- };
58
- return recordResponseItem;
59
- }
60
-
61
- // eslint-disable-next-line max-statements
62
- function getRecordResponseStatusAndMessage(responseStatus, responsePayload, id) {
63
- logger.debug(`Response status: ${responseStatus} responsePayload: ${JSON.stringify(responsePayload)}`);
64
- //const responseStatusName = httpStatus[`${responseStatus}_NAME`];
65
- //logger.debug(`Response status name: ${responseStatusName}`);
66
-
67
- const message = getMessageFromResponsePayload(responsePayload);
68
- const ids = responsePayload.ids || [];
69
- logger.debug(`Response message: ${message}`);
70
-
71
- // We map responseStatus here for a wider recordStatus and more detailed detailedRecordStatus
72
- // recordStatus corresponds to RECORD_IMPORT_STATEs used in https://github.com/NatLibFi/melinda-record-import-commons-js
73
-
74
- // Non-http statuses
75
- if (['UPDATED', 'CREATED', 'INVALID', 'ERROR', 'SKIPPED', 'FIXED'].includes(responseStatus)) {
76
- return {
77
- recordStatus: responseStatus,
78
- detailedRecordStatus: responseStatus,
79
- message
80
- };
81
- }
82
-
83
- // More detailed SKIPPED statuses
84
- if (['SKIPPED_CHANGE', 'SKIPPED_UPDATE'].includes(responseStatus)) {
85
- return {
86
- recordStatus: 'SKIPPED',
87
- detailedRecordStatus: responseStatus,
88
- message
89
- };
90
- }
91
- if (['UNKNOWN'].includes(responseStatus)) {
92
- return {
93
- recordStatus: 'ERROR',
94
- detailedRecordStatus: responseStatus,
95
- message,
96
- ids
97
- };
98
- }
99
-
100
- // Duplicates and other CONFLICT statuses
101
- if ([_httpStatus.default.CONFLICT, 'CONFLICT'].includes(responseStatus)) {
102
- if (/^Duplicates in database/u.test(message)) {
103
- return {
104
- recordStatus: 'DUPLICATE',
105
- detailedRecordStatus: 'DUPLICATE',
106
- message,
107
- ids
108
- };
109
- }
110
- if (/^MatchValidation for all/u.test(message)) {
111
- return {
112
- recordStatus: 'ERROR',
113
- detailedRecordStatus: 'CONFLICT',
114
- message,
115
- ids
116
- };
117
- }
118
-
119
- // Use ids only if there are more than one id or the id in payload does not match databaseId
120
- if (ids.length > 1 || ids[0] !== id) {
121
- return {
122
- recordStatus: 'ERROR',
123
- detailedRecordStatus: 'CONFLICT',
124
- message,
125
- ids
126
- };
127
- }
128
- return {
129
- recordStatus: 'ERROR',
130
- detailedRecordStatus: 'CONFLICT',
131
- message
132
- };
133
- }
134
- if ([_httpStatus.default.UNPROCESSABLE_ENTITY, 'UNPROCESSABLE_ENTITY'].includes(responseStatus)) {
135
- if (ids.length > 1 || ids[0] !== id) {
136
- return {
137
- recordStatus: 'INVALID',
138
- detailedRecordStatus: 'UNPROCESSABLE_ENTITY',
139
- message,
140
- ids
141
- };
142
- }
143
- return {
144
- recordStatus: 'INVALID',
145
- detailedRecordStatus: 'UNPROCESSABLE_ENTITY',
146
- message
147
- };
148
- }
149
- if ([_httpStatus.default.NOT_FOUND, 'NOT_FOUND'].includes(responseStatus)) {
150
- return {
151
- recordStatus: 'ERROR',
152
- detailedRecordStatus: 'NOT_FOUND',
153
- message
154
- };
155
- }
156
- if ([_httpStatus.default.FORBIDDEN, 'FORBIDDEN'].includes(responseStatus)) {
157
- return {
158
- recordStatus: 'ERROR',
159
- detailedRecordStatus: 'FORBIDDEN',
160
- message
161
- };
162
- }
163
-
164
- // Otherwise
165
- logger.debug(`Unknown responseStatus: ${responseStatus}`);
166
- const newMessage = `${message} - Unknown recordStatus: ${responseStatus}`;
167
- return {
168
- recordStatus: 'ERROR',
169
- detailedRecordStatus: responseStatus,
170
- message: newMessage
171
- };
172
- }
173
- function getMessageFromResponsePayload(responsePayload) {
174
- if (responsePayload.message) {
175
- return responsePayload.message;
176
- }
177
- if (typeof responsePayload === 'string' || responsePayload instanceof String) {
178
- return responsePayload;
179
- }
180
- return '';
181
- }
182
- async function addRecordResponseItem({
183
- recordResponseItem,
184
- correlationId,
185
- mongoOperator
186
- }) {
187
- await mongoOperator.pushMessages({
188
- correlationId,
189
- messages: [recordResponseItem],
190
- messageField: 'records'
191
- });
192
- return true;
193
- }
194
-
195
- // Use addRecordResponseItems to add several recordResponseItems in one mongo operation to avoid writeconflicts
196
- async function addRecordResponseItems({
197
- recordResponseItems,
198
- correlationId,
199
- mongoOperator
200
- }) {
201
- if (!Array.isArray(recordResponseItems)) {
202
- throw new Error('RecordResponseItems is not an array!');
203
- }
204
- await mongoOperator.pushMessages({
205
- correlationId,
206
- messages: recordResponseItems,
207
- messageField: 'records'
208
- });
209
- return true;
210
- }
211
- //# sourceMappingURL=utils.js.map
package/dist/utils.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","names":["_melindaBackendCommons","require","_melindaCommons","_constants","_httpStatus","_interopRequireDefault","logger","createLogger","logError","err","ApiError","error","JSON","stringify","stack","undefined","createImportJobState","operation","state","queryImportJobState","IMPORT_JOB_STATE","Error","OPERATIONS","importJobStateWithOperation","importJobStateForQuery","createRecordResponseItem","responsePayload","responseStatus","recordMetadata","id","recordResponseStatusAndMessage","getRecordResponseStatusAndMessage","recordResponseItem","databaseId","debug","message","getMessageFromResponsePayload","ids","includes","recordStatus","detailedRecordStatus","httpStatus","CONFLICT","test","length","UNPROCESSABLE_ENTITY","NOT_FOUND","FORBIDDEN","newMessage","String","addRecordResponseItem","correlationId","mongoOperator","pushMessages","messages","messageField","addRecordResponseItems","recordResponseItems","Array","isArray"],"sources":["../src/utils.js"],"sourcesContent":["import {createLogger} from '@natlibfi/melinda-backend-commons';\nimport {Error as ApiError} from '@natlibfi/melinda-commons';\nimport {IMPORT_JOB_STATE, OPERATIONS} from './constants';\nimport httpStatus from 'http-status';\n\nconst logger = createLogger();\n\nexport function logError(err) {\n if (err instanceof ApiError) {\n logger.error(JSON.stringify(err));\n return;\n }\n\n if (err === 'SIGINT') {\n logger.error(err);\n return;\n }\n\n logger.error(err.stack === undefined ? err : err.stack);\n}\n\nexport function createImportJobState(operation, state, queryImportJobState = false) {\n if (!(state in IMPORT_JOB_STATE)) {\n throw new Error('Invalid IMPORT_JOB_STATE');\n }\n\n if (!(operation in OPERATIONS)) {\n throw new Error('Invalid operation');\n }\n\n if (queryImportJobState) {\n const importJobStateWithOperation = `importJobState.${operation}`;\n const importJobStateForQuery = {[importJobStateWithOperation]: state};\n\n return importJobStateForQuery;\n }\n\n return {[operation]: state};\n}\n\nexport function createRecordResponseItem({responsePayload, responseStatus, recordMetadata, id}) {\n const recordResponseStatusAndMessage = getRecordResponseStatusAndMessage(responseStatus, responsePayload, id);\n const recordResponseItem = {\n databaseId: id || '000000000',\n recordMetadata: responsePayload.recordMetadata || recordMetadata || undefined,\n ...recordResponseStatusAndMessage\n };\n return recordResponseItem;\n}\n\n// eslint-disable-next-line max-statements\nfunction getRecordResponseStatusAndMessage(responseStatus, responsePayload, id) {\n\n logger.debug(`Response status: ${responseStatus} responsePayload: ${JSON.stringify(responsePayload)}`);\n //const responseStatusName = httpStatus[`${responseStatus}_NAME`];\n //logger.debug(`Response status name: ${responseStatusName}`);\n\n const message = getMessageFromResponsePayload(responsePayload);\n const ids = responsePayload.ids || [];\n\n logger.debug(`Response message: ${message}`);\n\n // We map responseStatus here for a wider recordStatus and more detailed detailedRecordStatus\n // recordStatus corresponds to RECORD_IMPORT_STATEs used in https://github.com/NatLibFi/melinda-record-import-commons-js\n\n // Non-http statuses\n if (['UPDATED', 'CREATED', 'INVALID', 'ERROR', 'SKIPPED', 'FIXED'].includes(responseStatus)) {\n return {recordStatus: responseStatus, detailedRecordStatus: responseStatus, message};\n }\n\n // More detailed SKIPPED statuses\n if (['SKIPPED_CHANGE', 'SKIPPED_UPDATE'].includes(responseStatus)) {\n return {recordStatus: 'SKIPPED', detailedRecordStatus: responseStatus, message};\n }\n\n if (['UNKNOWN'].includes(responseStatus)) {\n return {recordStatus: 'ERROR', detailedRecordStatus: responseStatus, message, ids};\n }\n\n // Duplicates and other CONFLICT statuses\n if ([httpStatus.CONFLICT, 'CONFLICT'].includes(responseStatus)) {\n if ((/^Duplicates in database/u).test(message)) {\n return {recordStatus: 'DUPLICATE', detailedRecordStatus: 'DUPLICATE', message, ids};\n }\n if ((/^MatchValidation for all/u).test(message)) {\n return {recordStatus: 'ERROR', detailedRecordStatus: 'CONFLICT', message, ids};\n }\n\n // Use ids only if there are more than one id or the id in payload does not match databaseId\n if (ids.length > 1 || ids[0] !== id) {\n return {recordStatus: 'ERROR', detailedRecordStatus: 'CONFLICT', message, ids};\n }\n return {recordStatus: 'ERROR', detailedRecordStatus: 'CONFLICT', message};\n }\n\n if ([httpStatus.UNPROCESSABLE_ENTITY, 'UNPROCESSABLE_ENTITY'].includes(responseStatus)) {\n if (ids.length > 1 || ids[0] !== id) {\n return {recordStatus: 'INVALID', detailedRecordStatus: 'UNPROCESSABLE_ENTITY', message, ids};\n }\n return {recordStatus: 'INVALID', detailedRecordStatus: 'UNPROCESSABLE_ENTITY', message};\n }\n\n if ([httpStatus.NOT_FOUND, 'NOT_FOUND'].includes(responseStatus)) {\n return {recordStatus: 'ERROR', detailedRecordStatus: 'NOT_FOUND', message};\n }\n\n if ([httpStatus.FORBIDDEN, 'FORBIDDEN'].includes(responseStatus)) {\n return {recordStatus: 'ERROR', detailedRecordStatus: 'FORBIDDEN', message};\n }\n\n // Otherwise\n logger.debug(`Unknown responseStatus: ${responseStatus}`);\n const newMessage = `${message} - Unknown recordStatus: ${responseStatus}`;\n return {recordStatus: 'ERROR', detailedRecordStatus: responseStatus, message: newMessage};\n}\n\nfunction getMessageFromResponsePayload(responsePayload) {\n if (responsePayload.message) {\n return responsePayload.message;\n }\n if (typeof responsePayload === 'string' || responsePayload instanceof String) {\n return responsePayload;\n }\n return '';\n}\n\nexport async function addRecordResponseItem({recordResponseItem, correlationId, mongoOperator}) {\n await mongoOperator.pushMessages({correlationId, messages: [recordResponseItem], messageField: 'records'});\n return true;\n}\n\n// Use addRecordResponseItems to add several recordResponseItems in one mongo operation to avoid writeconflicts\nexport async function addRecordResponseItems({recordResponseItems, correlationId, mongoOperator}) {\n if (!Array.isArray(recordResponseItems)) {\n throw new Error('RecordResponseItems is not an array!');\n }\n await mongoOperator.pushMessages({correlationId, messages: recordResponseItems, messageField: 'records'});\n return true;\n}\n\n"],"mappings":";;;;;;;;;;;AAAA,IAAAA,sBAAA,GAAAC,OAAA;AACA,IAAAC,eAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AACA,IAAAG,WAAA,GAAAC,sBAAA,CAAAJ,OAAA;AAEA,MAAMK,MAAM,GAAG,IAAAC,mCAAY,EAAC,CAAC;AAEtB,SAASC,QAAQA,CAACC,GAAG,EAAE;EAC5B,IAAIA,GAAG,YAAYC,qBAAQ,EAAE;IAC3BJ,MAAM,CAACK,KAAK,CAACC,IAAI,CAACC,SAAS,CAACJ,GAAG,CAAC,CAAC;IACjC;EACF;EAEA,IAAIA,GAAG,KAAK,QAAQ,EAAE;IACpBH,MAAM,CAACK,KAAK,CAACF,GAAG,CAAC;IACjB;EACF;EAEAH,MAAM,CAACK,KAAK,CAACF,GAAG,CAACK,KAAK,KAAKC,SAAS,GAAGN,GAAG,GAAGA,GAAG,CAACK,KAAK,CAAC;AACzD;AAEO,SAASE,oBAAoBA,CAACC,SAAS,EAAEC,KAAK,EAAEC,mBAAmB,GAAG,KAAK,EAAE;EAClF,IAAI,EAAED,KAAK,IAAIE,2BAAgB,CAAC,EAAE;IAChC,MAAM,IAAIC,KAAK,CAAC,0BAA0B,CAAC;EAC7C;EAEA,IAAI,EAAEJ,SAAS,IAAIK,qBAAU,CAAC,EAAE;IAC9B,MAAM,IAAID,KAAK,CAAC,mBAAmB,CAAC;EACtC;EAEA,IAAIF,mBAAmB,EAAE;IACvB,MAAMI,2BAA2B,GAAG,kBAAkBN,SAAS,EAAE;IACjE,MAAMO,sBAAsB,GAAG;MAAC,CAACD,2BAA2B,GAAGL;IAAK,CAAC;IAErE,OAAOM,sBAAsB;EAC/B;EAEA,OAAO;IAAC,CAACP,SAAS,GAAGC;EAAK,CAAC;AAC7B;AAEO,SAASO,wBAAwBA,CAAC;EAACC,eAAe;EAAEC,cAAc;EAAEC,cAAc;EAAEC;AAAE,CAAC,EAAE;EAC9F,MAAMC,8BAA8B,GAAGC,iCAAiC,CAACJ,cAAc,EAAED,eAAe,EAAEG,EAAE,CAAC;EAC7G,MAAMG,kBAAkB,GAAG;IACzBC,UAAU,EAAEJ,EAAE,IAAI,WAAW;IAC7BD,cAAc,EAAEF,eAAe,CAACE,cAAc,IAAIA,cAAc,IAAIb,SAAS;IAC7E,GAAGe;EACL,CAAC;EACD,OAAOE,kBAAkB;AAC3B;;AAEA;AACA,SAASD,iCAAiCA,CAACJ,cAAc,EAAED,eAAe,EAAEG,EAAE,EAAE;EAE9EvB,MAAM,CAAC4B,KAAK,CAAC,oBAAoBP,cAAc,qBAAqBf,IAAI,CAACC,SAAS,CAACa,eAAe,CAAC,EAAE,CAAC;EACtG;EACA;;EAEA,MAAMS,OAAO,GAAGC,6BAA6B,CAACV,eAAe,CAAC;EAC9D,MAAMW,GAAG,GAAGX,eAAe,CAACW,GAAG,IAAI,EAAE;EAErC/B,MAAM,CAAC4B,KAAK,CAAC,qBAAqBC,OAAO,EAAE,CAAC;;EAE5C;EACA;;EAEA;EACA,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAACG,QAAQ,CAACX,cAAc,CAAC,EAAE;IAC3F,OAAO;MAACY,YAAY,EAAEZ,cAAc;MAAEa,oBAAoB,EAAEb,cAAc;MAAEQ;IAAO,CAAC;EACtF;;EAEA;EACA,IAAI,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAACG,QAAQ,CAACX,cAAc,CAAC,EAAE;IACjE,OAAO;MAACY,YAAY,EAAE,SAAS;MAAEC,oBAAoB,EAAEb,cAAc;MAAEQ;IAAO,CAAC;EACjF;EAEA,IAAI,CAAC,SAAS,CAAC,CAACG,QAAQ,CAACX,cAAc,CAAC,EAAE;IACxC,OAAO;MAACY,YAAY,EAAE,OAAO;MAAEC,oBAAoB,EAAEb,cAAc;MAAEQ,OAAO;MAAEE;IAAG,CAAC;EACpF;;EAEA;EACA,IAAI,CAACI,mBAAU,CAACC,QAAQ,EAAE,UAAU,CAAC,CAACJ,QAAQ,CAACX,cAAc,CAAC,EAAE;IAC9D,IAAK,0BAA0B,CAAEgB,IAAI,CAACR,OAAO,CAAC,EAAE;MAC9C,OAAO;QAACI,YAAY,EAAE,WAAW;QAAEC,oBAAoB,EAAE,WAAW;QAAEL,OAAO;QAAEE;MAAG,CAAC;IACrF;IACA,IAAK,2BAA2B,CAAEM,IAAI,CAACR,OAAO,CAAC,EAAE;MAC/C,OAAO;QAACI,YAAY,EAAE,OAAO;QAAEC,oBAAoB,EAAE,UAAU;QAAEL,OAAO;QAAEE;MAAG,CAAC;IAChF;;IAEA;IACA,IAAIA,GAAG,CAACO,MAAM,GAAG,CAAC,IAAIP,GAAG,CAAC,CAAC,CAAC,KAAKR,EAAE,EAAE;MACnC,OAAO;QAACU,YAAY,EAAE,OAAO;QAAEC,oBAAoB,EAAE,UAAU;QAAEL,OAAO;QAAEE;MAAG,CAAC;IAChF;IACA,OAAO;MAACE,YAAY,EAAE,OAAO;MAAEC,oBAAoB,EAAE,UAAU;MAAEL;IAAO,CAAC;EAC3E;EAEA,IAAI,CAACM,mBAAU,CAACI,oBAAoB,EAAE,sBAAsB,CAAC,CAACP,QAAQ,CAACX,cAAc,CAAC,EAAE;IACtF,IAAIU,GAAG,CAACO,MAAM,GAAG,CAAC,IAAIP,GAAG,CAAC,CAAC,CAAC,KAAKR,EAAE,EAAE;MACnC,OAAO;QAACU,YAAY,EAAE,SAAS;QAAEC,oBAAoB,EAAE,sBAAsB;QAAEL,OAAO;QAAEE;MAAG,CAAC;IAC9F;IACA,OAAO;MAACE,YAAY,EAAE,SAAS;MAAEC,oBAAoB,EAAE,sBAAsB;MAAEL;IAAO,CAAC;EACzF;EAEA,IAAI,CAACM,mBAAU,CAACK,SAAS,EAAE,WAAW,CAAC,CAACR,QAAQ,CAACX,cAAc,CAAC,EAAE;IAChE,OAAO;MAACY,YAAY,EAAE,OAAO;MAAEC,oBAAoB,EAAE,WAAW;MAAEL;IAAO,CAAC;EAC5E;EAEA,IAAI,CAACM,mBAAU,CAACM,SAAS,EAAE,WAAW,CAAC,CAACT,QAAQ,CAACX,cAAc,CAAC,EAAE;IAChE,OAAO;MAACY,YAAY,EAAE,OAAO;MAAEC,oBAAoB,EAAE,WAAW;MAAEL;IAAO,CAAC;EAC5E;;EAEA;EACA7B,MAAM,CAAC4B,KAAK,CAAC,2BAA2BP,cAAc,EAAE,CAAC;EACzD,MAAMqB,UAAU,GAAG,GAAGb,OAAO,4BAA4BR,cAAc,EAAE;EACzE,OAAO;IAACY,YAAY,EAAE,OAAO;IAAEC,oBAAoB,EAAEb,cAAc;IAAEQ,OAAO,EAAEa;EAAU,CAAC;AAC3F;AAEA,SAASZ,6BAA6BA,CAACV,eAAe,EAAE;EACtD,IAAIA,eAAe,CAACS,OAAO,EAAE;IAC3B,OAAOT,eAAe,CAACS,OAAO;EAChC;EACA,IAAI,OAAOT,eAAe,KAAK,QAAQ,IAAIA,eAAe,YAAYuB,MAAM,EAAE;IAC5E,OAAOvB,eAAe;EACxB;EACA,OAAO,EAAE;AACX;AAEO,eAAewB,qBAAqBA,CAAC;EAAClB,kBAAkB;EAAEmB,aAAa;EAAEC;AAAa,CAAC,EAAE;EAC9F,MAAMA,aAAa,CAACC,YAAY,CAAC;IAACF,aAAa;IAAEG,QAAQ,EAAE,CAACtB,kBAAkB,CAAC;IAAEuB,YAAY,EAAE;EAAS,CAAC,CAAC;EAC1G,OAAO,IAAI;AACb;;AAEA;AACO,eAAeC,sBAAsBA,CAAC;EAACC,mBAAmB;EAAEN,aAAa;EAAEC;AAAa,CAAC,EAAE;EAChG,IAAI,CAACM,KAAK,CAACC,OAAO,CAACF,mBAAmB,CAAC,EAAE;IACvC,MAAM,IAAIpC,KAAK,CAAC,sCAAsC,CAAC;EACzD;EACA,MAAM+B,aAAa,CAACC,YAAY,CAAC;IAACF,aAAa;IAAEG,QAAQ,EAAEG,mBAAmB;IAAEF,YAAY,EAAE;EAAS,CAAC,CAAC;EACzG,OAAO,IAAI;AACb","ignoreList":[]}