@devrev/ts-adaas 1.11.1-beta.0 → 1.11.1-beta.2
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/dist/attachments-streaming/attachments-streaming-pool.d.ts.map +1 -1
- package/dist/attachments-streaming/attachments-streaming-pool.interfaces.d.ts +1 -1
- package/dist/attachments-streaming/attachments-streaming-pool.interfaces.d.ts.map +1 -1
- package/dist/attachments-streaming/attachments-streaming-pool.test.js +43 -42
- package/dist/common/helpers.d.ts +0 -1
- package/dist/common/helpers.d.ts.map +1 -1
- package/dist/common/helpers.js +3 -18
- package/dist/common/install-initial-domain-mapping.d.ts.map +1 -1
- package/dist/common/install-initial-domain-mapping.test.js +3 -1
- package/dist/deprecated/adapter/index.d.ts +1 -1
- package/dist/deprecated/adapter/index.d.ts.map +1 -1
- package/dist/deprecated/uploader/index.d.ts.map +1 -1
- package/dist/deprecated/uploader/index.js +1 -1
- package/dist/http/axios-client.d.ts.map +1 -1
- package/dist/http/index.d.ts +1 -1
- package/dist/http/index.d.ts.map +1 -1
- package/dist/http/index.js +1 -1
- package/dist/index.d.ts +4 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -7
- package/dist/logger/logger.d.ts +1 -1
- package/dist/logger/logger.d.ts.map +1 -1
- package/dist/logger/logger.js +3 -5
- package/dist/logger/logger.test.js +4 -3
- package/dist/mappers/mappers.d.ts +1 -1
- package/dist/mappers/mappers.d.ts.map +1 -1
- package/dist/mappers/mappers.test.js +2 -2
- package/dist/repo/repo.d.ts +2 -2
- package/dist/repo/repo.d.ts.map +1 -1
- package/dist/state/state.interfaces.d.ts +1 -1
- package/dist/state/state.interfaces.d.ts.map +1 -1
- package/dist/state/state.js +6 -6
- package/dist/state/state.test.js +4 -3
- package/dist/tests/backwards-compatibility/backwards-compatibility.test.d.ts.map +1 -1
- package/dist/tests/backwards-compatibility/backwards-compatibility.test.js +19 -12
- package/dist/tests/backwards-compatibility/helpers.d.ts.map +1 -1
- package/dist/tests/backwards-compatibility/helpers.js +1 -0
- package/dist/tests/mock-server.d.ts.map +1 -1
- package/dist/tests/mock-server.js +2 -0
- package/dist/tests/test-helpers.d.ts.map +1 -1
- package/dist/tests/test-helpers.interfaces.d.ts +1 -1
- package/dist/tests/test-helpers.interfaces.d.ts.map +1 -1
- package/dist/tests/timeout-handling/extraction.d.ts.map +1 -1
- package/dist/tests/timeout-handling/timeout-1.test.js +1 -1
- package/dist/tests/timeout-handling/timeout-2.js +3 -1
- package/dist/tests/timeout-handling/timeout-2.test.js +1 -1
- package/dist/tests/timeout-handling/timeout-3a.test.js +1 -1
- package/dist/tests/timeout-handling/timeout-3b.test.js +1 -1
- package/dist/types/extraction.d.ts +2 -2
- package/dist/types/extraction.d.ts.map +1 -1
- package/dist/types/extraction.test.js +6 -5
- package/dist/types/index.d.ts +6 -6
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -2
- package/dist/types/loading.d.ts +1 -1
- package/dist/types/loading.d.ts.map +1 -1
- package/dist/types/workers.d.ts +1 -1
- package/dist/types/workers.d.ts.map +1 -1
- package/dist/uploader/uploader.d.ts +2 -2
- package/dist/uploader/uploader.d.ts.map +1 -1
- package/dist/uploader/uploader.interfaces.d.ts +2 -2
- package/dist/uploader/uploader.interfaces.d.ts.map +1 -1
- package/dist/uploader/uploader.js +3 -3
- package/dist/uploader/uploader.test.js +1 -1
- package/dist/workers/create-worker.d.ts.map +1 -1
- package/dist/workers/create-worker.js +1 -1
- package/dist/workers/create-worker.test.js +4 -2
- package/dist/workers/default-workers/attachments-extraction.js +8 -6
- package/dist/workers/default-workers/load-attachments.js +1 -1
- package/dist/workers/default-workers/load-data.js +1 -1
- package/dist/workers/dummy-extractor/data-normalization.d.ts +1 -1
- package/dist/workers/dummy-extractor/data-normalization.d.ts.map +1 -1
- package/dist/workers/process-task.d.ts.map +1 -1
- package/dist/workers/process-task.js +5 -4
- package/dist/workers/spawn.d.ts.map +1 -1
- package/dist/workers/spawn.js +11 -11
- package/dist/workers/worker-adapter.artifacts.test.js +12 -20
- package/dist/workers/worker-adapter.d.ts +7 -8
- package/dist/workers/worker-adapter.d.ts.map +1 -1
- package/dist/workers/worker-adapter.js +11 -10
- package/dist/workers/worker-adapter.test.js +43 -14
- package/dist/workers/worker.js +0 -2
- package/package.json +15 -7
|
@@ -24,6 +24,7 @@ describe(create_worker_1.createWorker.name, () => {
|
|
|
24
24
|
});
|
|
25
25
|
it('should throw error when not in main thread', async () => {
|
|
26
26
|
const originalIsMainThread = worker_threads_1.isMainThread;
|
|
27
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
27
28
|
worker_threads_1.isMainThread = false;
|
|
28
29
|
const workerPath = __dirname + '../tests/dummy-worker.ts';
|
|
29
30
|
await expect((0, create_worker_1.createWorker)({
|
|
@@ -34,6 +35,7 @@ describe(create_worker_1.createWorker.name, () => {
|
|
|
34
35
|
workerPath,
|
|
35
36
|
})).rejects.toThrow('Worker threads can not start more worker threads.');
|
|
36
37
|
// Restore original value
|
|
38
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
37
39
|
worker_threads_1.isMainThread = originalIsMainThread;
|
|
38
40
|
});
|
|
39
41
|
it('[edge] should handle worker creation with minimal valid data', async () => {
|
|
@@ -55,8 +57,8 @@ describe(create_worker_1.createWorker.name, () => {
|
|
|
55
57
|
const complexState = {
|
|
56
58
|
nested: {
|
|
57
59
|
data: [1, 2, 3],
|
|
58
|
-
config: { enabled: true }
|
|
59
|
-
}
|
|
60
|
+
config: { enabled: true },
|
|
61
|
+
},
|
|
60
62
|
};
|
|
61
63
|
if (worker_threads_1.isMainThread) {
|
|
62
64
|
const worker = await (0, create_worker_1.createWorker)({
|
|
@@ -4,11 +4,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const axios_1 = __importDefault(require("axios"));
|
|
7
|
-
const index_1 = require("../../index");
|
|
8
7
|
const constants_1 = require("../../common/constants");
|
|
8
|
+
const index_1 = require("../../index");
|
|
9
9
|
const getAttachmentStream = async ({ item, }) => {
|
|
10
10
|
const { id, url } = item;
|
|
11
|
-
let fileStreamResponse
|
|
11
|
+
let fileStreamResponse;
|
|
12
12
|
try {
|
|
13
13
|
// Get the stream response directly
|
|
14
14
|
fileStreamResponse = await axios_1.default.get(url, {
|
|
@@ -18,11 +18,13 @@ const getAttachmentStream = async ({ item, }) => {
|
|
|
18
18
|
},
|
|
19
19
|
});
|
|
20
20
|
// Check content-length from the stream response headers
|
|
21
|
-
const contentLength = fileStreamResponse.headers['content-length'];
|
|
21
|
+
const contentLength = fileStreamResponse === null || fileStreamResponse === void 0 ? void 0 : fileStreamResponse.headers['content-length'];
|
|
22
22
|
if (contentLength && parseInt(contentLength) > constants_1.MAX_DEVREV_ARTIFACT_SIZE) {
|
|
23
23
|
console.warn(`Attachment ${id} size (${contentLength} bytes) exceeds maximum limit of ${constants_1.MAX_DEVREV_ARTIFACT_SIZE} bytes. Skipping download.`);
|
|
24
24
|
// Destroy the stream since we won't use it
|
|
25
|
-
|
|
25
|
+
if (fileStreamResponse != null) {
|
|
26
|
+
destroyHttpStream(fileStreamResponse);
|
|
27
|
+
}
|
|
26
28
|
return {
|
|
27
29
|
error: {
|
|
28
30
|
message: `File size exceeds maximum limit of ${constants_1.MAX_DEVREV_ARTIFACT_SIZE} bytes.`,
|
|
@@ -33,12 +35,12 @@ const getAttachmentStream = async ({ item, }) => {
|
|
|
33
35
|
}
|
|
34
36
|
catch (error) {
|
|
35
37
|
// If we created a stream but failed afterwards, destroy it
|
|
36
|
-
if (fileStreamResponse) {
|
|
38
|
+
if (fileStreamResponse != null) {
|
|
37
39
|
destroyHttpStream(fileStreamResponse);
|
|
38
40
|
}
|
|
39
41
|
return {
|
|
40
42
|
error: {
|
|
41
|
-
message: `Error while getting attachment stream for attachment with id ${id}
|
|
43
|
+
message: `Error while getting attachment stream for attachment with id ${id}. ${error}`,
|
|
42
44
|
},
|
|
43
45
|
};
|
|
44
46
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const process_task_1 = require("../process-task");
|
|
4
3
|
const types_1 = require("../../types");
|
|
4
|
+
const process_task_1 = require("../process-task");
|
|
5
5
|
(0, process_task_1.processTask)({
|
|
6
6
|
task: async ({ adapter }) => {
|
|
7
7
|
await adapter.emit(types_1.LoaderEventType.UnknownEventType, {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const process_task_1 = require("../process-task");
|
|
4
3
|
const loading_1 = require("../../types/loading");
|
|
4
|
+
const process_task_1 = require("../process-task");
|
|
5
5
|
(0, process_task_1.processTask)({
|
|
6
6
|
task: async ({ adapter }) => {
|
|
7
7
|
await adapter.emit(loading_1.LoaderEventType.DataLoadingDone, {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { NormalizedAttachment, NormalizedItem } from '../../index';
|
|
2
2
|
export declare function normalizeIssue(item: any): NormalizedItem;
|
|
3
3
|
export declare function normalizeUser(item: any): NormalizedItem;
|
|
4
4
|
export declare function normalizeAttachment(item: any): NormalizedAttachment;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-normalization.d.ts","sourceRoot":"","sources":["../../../src/workers/dummy-extractor/data-normalization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"data-normalization.d.ts","sourceRoot":"","sources":["../../../src/workers/dummy-extractor/data-normalization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGnE,wBAAgB,cAAc,CAAC,IAAI,EAAE,GAAG,GAAG,cAAc,CAYxD;AAGD,wBAAgB,aAAa,CAAC,IAAI,EAAE,GAAG,GAAG,cAAc,CAUvD;AAGD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,GAAG,GAAG,oBAAoB,CAQnE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-task.d.ts","sourceRoot":"","sources":["../../src/workers/process-task.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"process-task.d.ts","sourceRoot":"","sources":["../../src/workers/process-task.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,oBAAoB,EAGrB,MAAM,kBAAkB,CAAC;AAG1B,wBAAgB,WAAW,CAAC,cAAc,EAAE,EAC1C,IAAI,EACJ,SAAS,GACV,EAAE,oBAAoB,CAAC,cAAc,CAAC,QAuDtC"}
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.processTask = processTask;
|
|
4
4
|
const node_worker_threads_1 = require("node:worker_threads");
|
|
5
|
+
const logger_1 = require("../logger/logger");
|
|
5
6
|
const state_1 = require("../state/state");
|
|
6
|
-
const worker_adapter_1 = require("./worker-adapter");
|
|
7
7
|
const workers_1 = require("../types/workers");
|
|
8
|
-
const
|
|
8
|
+
const worker_adapter_1 = require("./worker-adapter");
|
|
9
9
|
function processTask({ task, onTimeout, }) {
|
|
10
10
|
if (!node_worker_threads_1.isMainThread) {
|
|
11
11
|
void (async () => {
|
|
@@ -14,6 +14,7 @@ function processTask({ task, onTimeout, }) {
|
|
|
14
14
|
const initialState = node_worker_threads_1.workerData.initialState;
|
|
15
15
|
const initialDomainMapping = node_worker_threads_1.workerData.initialDomainMapping;
|
|
16
16
|
const options = node_worker_threads_1.workerData.options;
|
|
17
|
+
// eslint-disable-next-line no-global-assign
|
|
17
18
|
console = new logger_1.Logger({ event, options });
|
|
18
19
|
const adapterState = await (0, state_1.createAdapterState)({
|
|
19
20
|
event,
|
|
@@ -27,7 +28,7 @@ function processTask({ task, onTimeout, }) {
|
|
|
27
28
|
adapterState,
|
|
28
29
|
options,
|
|
29
30
|
});
|
|
30
|
-
node_worker_threads_1.parentPort.on(workers_1.WorkerEvent.WorkerMessage, async (
|
|
31
|
+
node_worker_threads_1.parentPort.on(workers_1.WorkerEvent.WorkerMessage, (message) => void (async () => {
|
|
31
32
|
if (message.subject === workers_1.WorkerMessageSubject.WorkerMessageExit) {
|
|
32
33
|
console.log('Worker received message to gracefully exit. Setting isTimeout flag and executing onTimeout function.');
|
|
33
34
|
adapter.handleTimeout();
|
|
@@ -35,7 +36,7 @@ function processTask({ task, onTimeout, }) {
|
|
|
35
36
|
console.log('Finished executing onTimeout function. Exiting worker.');
|
|
36
37
|
process.exit(0);
|
|
37
38
|
}
|
|
38
|
-
});
|
|
39
|
+
})());
|
|
39
40
|
await task({ adapter });
|
|
40
41
|
process.exit(0);
|
|
41
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../src/workers/spawn.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../src/workers/spawn.ts"],"names":[],"mappings":"AAWA,OAAO,EAEL,qBAAqB,EACrB,cAAc,EAGf,MAAM,kBAAkB,CAAC;AA4D1B;;;;;;;;;;GAUG;AACH,wBAAsB,KAAK,CAAC,cAAc,EAAE,EAC1C,KAAK,EACL,YAAY,EACZ,UAAU,EACV,oBAAoB,EACpB,OAAO,GACR,EAAE,qBAAqB,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAmEvD;AAED,qBAAa,KAAK;IAChB,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,oBAAoB,CAAkC;IAC9D,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,gBAAgB,CAA4C;IACpE,OAAO,CAAC,gBAAgB,CAA4C;IACpE,OAAO,CAAC,wBAAwB,CAA6C;IAC7E,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAA4C;gBAE/C,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,cAAc;IA6F/D,OAAO,CAAC,aAAa;YAYP,kBAAkB;CA6BjC"}
|
package/dist/workers/spawn.js
CHANGED
|
@@ -5,15 +5,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.Spawn = void 0;
|
|
7
7
|
exports.spawn = spawn;
|
|
8
|
-
const helpers_1 = require("yargs/helpers");
|
|
9
8
|
const yargs_1 = __importDefault(require("yargs"));
|
|
10
|
-
const
|
|
9
|
+
const helpers_1 = require("yargs/helpers");
|
|
11
10
|
const control_protocol_1 = require("../common/control-protocol");
|
|
12
11
|
const helpers_2 = require("../common/helpers");
|
|
13
12
|
const logger_1 = require("../logger/logger");
|
|
13
|
+
const extraction_1 = require("../types/extraction");
|
|
14
14
|
const workers_1 = require("../types/workers");
|
|
15
|
-
const create_worker_1 = require("./create-worker");
|
|
16
15
|
const constants_1 = require("../common/constants");
|
|
16
|
+
const create_worker_1 = require("./create-worker");
|
|
17
17
|
function getWorkerPath({ event, connectorWorkerPath, }) {
|
|
18
18
|
if (connectorWorkerPath)
|
|
19
19
|
return connectorWorkerPath;
|
|
@@ -140,7 +140,7 @@ class Spawn {
|
|
|
140
140
|
: this.defaultLambdaTimeout;
|
|
141
141
|
this.resolve = resolve;
|
|
142
142
|
// If soft timeout is reached, send a message to the worker to gracefully exit.
|
|
143
|
-
this.softTimeoutTimer = setTimeout(async () => {
|
|
143
|
+
this.softTimeoutTimer = setTimeout(() => void (async () => {
|
|
144
144
|
this.logger.log('SOFT TIMEOUT: Sending a message to the worker to gracefully exit.');
|
|
145
145
|
if (worker) {
|
|
146
146
|
worker.postMessage({
|
|
@@ -151,25 +151,25 @@ class Spawn {
|
|
|
151
151
|
console.log('Worker does not exist. Exiting from main thread.');
|
|
152
152
|
await this.exitFromMainThread();
|
|
153
153
|
}
|
|
154
|
-
}, this.lambdaTimeout);
|
|
154
|
+
})(), this.lambdaTimeout);
|
|
155
155
|
// If hard timeout is reached, that means the worker did not exit in time. Terminate the worker.
|
|
156
|
-
this.hardTimeoutTimer = setTimeout(async () => {
|
|
156
|
+
this.hardTimeoutTimer = setTimeout(() => void (async () => {
|
|
157
157
|
this.logger.error('HARD TIMEOUT: Worker did not exit in time. Terminating the worker.');
|
|
158
158
|
if (worker) {
|
|
159
|
-
worker.terminate();
|
|
159
|
+
await worker.terminate();
|
|
160
160
|
}
|
|
161
161
|
else {
|
|
162
162
|
console.log('Worker does not exist. Exiting from main thread.');
|
|
163
163
|
await this.exitFromMainThread();
|
|
164
164
|
}
|
|
165
|
-
}, this.lambdaTimeout * constants_1.HARD_TIMEOUT_MULTIPLIER);
|
|
165
|
+
})(), this.lambdaTimeout * constants_1.HARD_TIMEOUT_MULTIPLIER);
|
|
166
166
|
// If worker exits with process.exit(code), clear the timeouts and exit from main thread.
|
|
167
|
-
worker.on(workers_1.WorkerEvent.WorkerExit, async (code) => {
|
|
167
|
+
worker.on(workers_1.WorkerEvent.WorkerExit, () => void (async (code) => {
|
|
168
168
|
this.logger.info('Worker exited with exit code: ' + code + '.');
|
|
169
169
|
this.clearTimeouts();
|
|
170
170
|
await this.exitFromMainThread();
|
|
171
|
-
});
|
|
172
|
-
worker.on(workers_1.WorkerEvent.WorkerMessage,
|
|
171
|
+
})());
|
|
172
|
+
worker.on(workers_1.WorkerEvent.WorkerMessage, (message) => {
|
|
173
173
|
var _a, _b;
|
|
174
174
|
// Since it is not possible to log from the worker thread, we need to log
|
|
175
175
|
// from the main thread.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const test_helpers_1 = require("../tests/test-helpers");
|
|
4
|
-
const worker_adapter_1 = require("./worker-adapter");
|
|
5
3
|
const state_1 = require("../state/state");
|
|
4
|
+
const test_helpers_1 = require("../tests/test-helpers");
|
|
6
5
|
const types_1 = require("../types");
|
|
6
|
+
const worker_adapter_1 = require("./worker-adapter");
|
|
7
7
|
// 1. Create a mock function for the method you want to override.
|
|
8
8
|
const mockUpload = (itemType, objects) => {
|
|
9
9
|
return {
|
|
@@ -12,7 +12,7 @@ const mockUpload = (itemType, objects) => {
|
|
|
12
12
|
id: `artifact-${itemType}-${Math.random().toString(36).substring(2, 15)}`,
|
|
13
13
|
item_type: itemType,
|
|
14
14
|
item_count: objects.length,
|
|
15
|
-
}
|
|
15
|
+
},
|
|
16
16
|
};
|
|
17
17
|
};
|
|
18
18
|
// 2. Mock the entire 'uploader' module.
|
|
@@ -39,18 +39,18 @@ function checkArtifactOrder(artifacts, expectedOrder) {
|
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
catch (e) {
|
|
42
|
-
console.error(
|
|
42
|
+
console.error('Error finding artifact type in repos:', e);
|
|
43
43
|
return false;
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
return true;
|
|
47
47
|
}
|
|
48
|
-
describe(
|
|
48
|
+
describe('Artifact ordering when artifacts overflow batch sizes in repositories', () => {
|
|
49
49
|
let testAdapter;
|
|
50
50
|
beforeEach(() => {
|
|
51
51
|
// Create a fresh adapter instance for this test to avoid mocking conflicts
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
const mockEvent = (0, test_helpers_1.createEvent)({ eventType: types_1.EventType.ExtractionDataStart });
|
|
53
|
+
const mockAdapterState = new state_1.State({
|
|
54
54
|
event: mockEvent,
|
|
55
55
|
initialState: { attachments: { completed: false } },
|
|
56
56
|
});
|
|
@@ -58,16 +58,13 @@ describe("Artifact ordering when artifacts overflow batch sizes in repositories"
|
|
|
58
58
|
event: mockEvent,
|
|
59
59
|
adapterState: mockAdapterState,
|
|
60
60
|
options: {
|
|
61
|
-
batchSize: 50
|
|
62
|
-
}
|
|
61
|
+
batchSize: 50,
|
|
62
|
+
},
|
|
63
63
|
});
|
|
64
64
|
});
|
|
65
65
|
it('should maintain artifact ordering when repo ItemTypeA has items below batch size and repo ItemTypeB has items above batch size', async () => {
|
|
66
66
|
var _a, _b;
|
|
67
|
-
const repos = [
|
|
68
|
-
{ itemType: 'ItemTypeA' },
|
|
69
|
-
{ itemType: 'ItemTypeB' }
|
|
70
|
-
];
|
|
67
|
+
const repos = [{ itemType: 'ItemTypeA' }, { itemType: 'ItemTypeB' }];
|
|
71
68
|
// Initialize repos
|
|
72
69
|
testAdapter.initializeRepos(repos);
|
|
73
70
|
await ((_a = testAdapter.getRepo('ItemTypeA')) === null || _a === void 0 ? void 0 : _a.push((0, test_helpers_1.createItems)(5)));
|
|
@@ -98,10 +95,7 @@ describe("Artifact ordering when artifacts overflow batch sizes in repositories"
|
|
|
98
95
|
});
|
|
99
96
|
it('should maintain order with multiple pushes and uploads', async () => {
|
|
100
97
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
101
|
-
const repos = [
|
|
102
|
-
{ itemType: 'ItemTypeA' },
|
|
103
|
-
{ itemType: 'ItemTypeB' },
|
|
104
|
-
];
|
|
98
|
+
const repos = [{ itemType: 'ItemTypeA' }, { itemType: 'ItemTypeB' }];
|
|
105
99
|
// Initialize repos
|
|
106
100
|
testAdapter.initializeRepos(repos);
|
|
107
101
|
await ((_a = testAdapter.getRepo('ItemTypeA')) === null || _a === void 0 ? void 0 : _a.push((0, test_helpers_1.createItems)(101)));
|
|
@@ -121,9 +115,7 @@ describe("Artifact ordering when artifacts overflow batch sizes in repositories"
|
|
|
121
115
|
});
|
|
122
116
|
it('should not count artifacts if 0 items are pushed to the repo', async () => {
|
|
123
117
|
var _a;
|
|
124
|
-
const repos = [
|
|
125
|
-
{ itemType: 'ItemTypeA' }
|
|
126
|
-
];
|
|
118
|
+
const repos = [{ itemType: 'ItemTypeA' }];
|
|
127
119
|
// Initialize repos
|
|
128
120
|
testAdapter.initializeRepos(repos);
|
|
129
121
|
await ((_a = testAdapter.getRepo('ItemTypeA')) === null || _a === void 0 ? void 0 : _a.push([]));
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ExternalSystemAttachment, ExternalSystemLoadingFunction, FileToLoad, LoaderEventType } from '../types/loading';
|
|
3
|
-
import { AdapterState } from '../state/state.interfaces';
|
|
4
|
-
import { Artifact } from '../uploader/uploader.interfaces';
|
|
5
|
-
import { WorkerAdapterInterface, WorkerAdapterOptions } from '../types/workers';
|
|
1
|
+
import { Mappers } from '../mappers/mappers';
|
|
6
2
|
import { Repo } from '../repo/repo';
|
|
7
3
|
import { NormalizedAttachment, RepoInterface } from '../repo/repo.interfaces';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
4
|
+
import { AdapterState } from '../state/state.interfaces';
|
|
5
|
+
import { AirdropEvent, EventData, ExternalSystemAttachmentProcessors, ExternalSystemAttachmentStreamingFunction, ExtractorEventType, ProcessAttachmentReturnType, StreamAttachmentsReturnType } from '../types/extraction';
|
|
6
|
+
import { ExternalSystemAttachment, ExternalSystemItem, ExternalSystemLoadingFunction, FileToLoad, ItemTypesToLoadParams, ItemTypeToLoad, LoaderEventType, LoaderReport, LoadItemResponse, LoadItemTypesResponse } from '../types/loading';
|
|
7
|
+
import { WorkerAdapterInterface, WorkerAdapterOptions } from '../types/workers';
|
|
8
|
+
import { Artifact } from '../uploader/uploader.interfaces';
|
|
10
9
|
export declare function createWorkerAdapter<ConnectorState>({ event, adapterState, options, }: WorkerAdapterInterface<ConnectorState>): WorkerAdapter<ConnectorState>;
|
|
11
10
|
/**
|
|
12
11
|
* WorkerAdapter class is used to interact with Airdrop platform. It is passed to the snap-in
|
|
@@ -69,7 +68,7 @@ export declare class WorkerAdapter<ConnectorState> {
|
|
|
69
68
|
processAttachment(attachment: NormalizedAttachment, stream: ExternalSystemAttachmentStreamingFunction): Promise<ProcessAttachmentReturnType>;
|
|
70
69
|
/**
|
|
71
70
|
* Destroys a stream to prevent memory leaks.
|
|
72
|
-
* @param
|
|
71
|
+
* @param httpStream - The axios response stream to destroy
|
|
73
72
|
*/
|
|
74
73
|
private destroyHttpStream;
|
|
75
74
|
loadAttachment({ item, create, }: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-adapter.d.ts","sourceRoot":"","sources":["../../src/workers/worker-adapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"worker-adapter.d.ts","sourceRoot":"","sources":["../../src/workers/worker-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,19 +6,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.WorkerAdapter = void 0;
|
|
7
7
|
exports.createWorkerAdapter = createWorkerAdapter;
|
|
8
8
|
const axios_1 = __importDefault(require("axios"));
|
|
9
|
-
const extraction_1 = require("../types/extraction");
|
|
10
|
-
const loading_1 = require("../types/loading");
|
|
11
|
-
const constants_1 = require("../common/constants");
|
|
12
9
|
const node_worker_threads_1 = require("node:worker_threads");
|
|
10
|
+
const attachments_streaming_pool_1 = require("../attachments-streaming/attachments-streaming-pool");
|
|
11
|
+
const constants_1 = require("../common/constants");
|
|
13
12
|
const control_protocol_1 = require("../common/control-protocol");
|
|
14
|
-
const workers_1 = require("../types/workers");
|
|
15
|
-
const repo_1 = require("../repo/repo");
|
|
16
13
|
const helpers_1 = require("../common/helpers");
|
|
17
|
-
const mappers_1 = require("../mappers/mappers");
|
|
18
|
-
const uploader_1 = require("../uploader/uploader");
|
|
19
14
|
const logger_1 = require("../logger/logger");
|
|
15
|
+
const mappers_1 = require("../mappers/mappers");
|
|
20
16
|
const mappers_interface_1 = require("../mappers/mappers.interface");
|
|
21
|
-
const
|
|
17
|
+
const repo_1 = require("../repo/repo");
|
|
18
|
+
const extraction_1 = require("../types/extraction");
|
|
19
|
+
const loading_1 = require("../types/loading");
|
|
20
|
+
const workers_1 = require("../types/workers");
|
|
21
|
+
const uploader_1 = require("../uploader/uploader");
|
|
22
22
|
function createWorkerAdapter({ event, adapterState, options, }) {
|
|
23
23
|
return new WorkerAdapter({
|
|
24
24
|
event,
|
|
@@ -305,7 +305,8 @@ class WorkerAdapter {
|
|
|
305
305
|
processed_files: this.processedFiles,
|
|
306
306
|
};
|
|
307
307
|
}
|
|
308
|
-
|
|
308
|
+
const filesToLoad = (_b = this.adapterState.state.fromDevRev) === null || _b === void 0 ? void 0 : _b.filesToLoad;
|
|
309
|
+
outerloop: for (const fileToLoad of filesToLoad) {
|
|
309
310
|
if (!fileToLoad.completed) {
|
|
310
311
|
const transformerFile = (await this.uploader.getJsonObjectByArtifactId({
|
|
311
312
|
artifactId: fileToLoad.id,
|
|
@@ -561,7 +562,7 @@ class WorkerAdapter {
|
|
|
561
562
|
}
|
|
562
563
|
/**
|
|
563
564
|
* Destroys a stream to prevent memory leaks.
|
|
564
|
-
* @param
|
|
565
|
+
* @param httpStream - The axios response stream to destroy
|
|
565
566
|
*/
|
|
566
567
|
destroyHttpStream(httpStream) {
|
|
567
568
|
try {
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const
|
|
3
|
+
const attachments_streaming_pool_1 = require("../attachments-streaming/attachments-streaming-pool");
|
|
4
4
|
const state_1 = require("../state/state");
|
|
5
5
|
const test_helpers_1 = require("../tests/test-helpers");
|
|
6
6
|
const types_1 = require("../types");
|
|
7
|
-
const
|
|
7
|
+
const worker_adapter_1 = require("./worker-adapter");
|
|
8
|
+
/* eslint-disable @typescript-eslint/no-require-imports */
|
|
8
9
|
// Mock dependencies
|
|
9
10
|
jest.mock('../common/control-protocol', () => ({
|
|
10
11
|
emit: jest.fn().mockResolvedValue({}),
|
|
@@ -127,9 +128,16 @@ describe(worker_adapter_1.WorkerAdapter.name, () => {
|
|
|
127
128
|
},
|
|
128
129
|
};
|
|
129
130
|
// Mock getting attachments
|
|
130
|
-
adapter['uploader'].getAttachmentsFromArtifactId = jest
|
|
131
|
+
adapter['uploader'].getAttachmentsFromArtifactId = jest
|
|
132
|
+
.fn()
|
|
133
|
+
.mockResolvedValue({
|
|
131
134
|
attachments: [
|
|
132
|
-
{
|
|
135
|
+
{
|
|
136
|
+
url: 'http://example.com/file1.pdf',
|
|
137
|
+
id: 'attachment1',
|
|
138
|
+
file_name: 'file1.pdf',
|
|
139
|
+
parent_id: 'parent1',
|
|
140
|
+
},
|
|
133
141
|
],
|
|
134
142
|
});
|
|
135
143
|
adapter.initializeRepos = jest.fn();
|
|
@@ -150,9 +158,16 @@ describe(worker_adapter_1.WorkerAdapter.name, () => {
|
|
|
150
158
|
},
|
|
151
159
|
};
|
|
152
160
|
// Mock getting attachments
|
|
153
|
-
adapter['uploader'].getAttachmentsFromArtifactId = jest
|
|
161
|
+
adapter['uploader'].getAttachmentsFromArtifactId = jest
|
|
162
|
+
.fn()
|
|
163
|
+
.mockResolvedValue({
|
|
154
164
|
attachments: [
|
|
155
|
-
{
|
|
165
|
+
{
|
|
166
|
+
url: 'http://example.com/file1.pdf',
|
|
167
|
+
id: 'attachment1',
|
|
168
|
+
file_name: 'file1.pdf',
|
|
169
|
+
parent_id: 'parent1',
|
|
170
|
+
},
|
|
156
171
|
],
|
|
157
172
|
});
|
|
158
173
|
// Mock the required methods
|
|
@@ -189,7 +204,9 @@ describe(worker_adapter_1.WorkerAdapter.name, () => {
|
|
|
189
204
|
};
|
|
190
205
|
// Mock error when getting attachments
|
|
191
206
|
const mockError = new Error('Failed to get attachments');
|
|
192
|
-
adapter['uploader'].getAttachmentsFromArtifactId = jest
|
|
207
|
+
adapter['uploader'].getAttachmentsFromArtifactId = jest
|
|
208
|
+
.fn()
|
|
209
|
+
.mockResolvedValue({
|
|
193
210
|
error: mockError,
|
|
194
211
|
});
|
|
195
212
|
// Mock methods
|
|
@@ -212,7 +229,9 @@ describe(worker_adapter_1.WorkerAdapter.name, () => {
|
|
|
212
229
|
},
|
|
213
230
|
};
|
|
214
231
|
// Mock getting empty attachments
|
|
215
|
-
adapter['uploader'].getAttachmentsFromArtifactId = jest
|
|
232
|
+
adapter['uploader'].getAttachmentsFromArtifactId = jest
|
|
233
|
+
.fn()
|
|
234
|
+
.mockResolvedValue({
|
|
216
235
|
attachments: [],
|
|
217
236
|
});
|
|
218
237
|
// Mock methods
|
|
@@ -382,7 +401,7 @@ describe(worker_adapter_1.WorkerAdapter.name, () => {
|
|
|
382
401
|
counter = { counter: 0 };
|
|
383
402
|
// Import the worker_threads module and spy on parentPort.postMessage
|
|
384
403
|
const workerThreads = require('node:worker_threads');
|
|
385
|
-
mockPostMessage = jest.fn().mockImplementation((
|
|
404
|
+
mockPostMessage = jest.fn().mockImplementation(() => {
|
|
386
405
|
counter.counter += 1;
|
|
387
406
|
});
|
|
388
407
|
// Spy on the parentPort.postMessage method
|
|
@@ -403,7 +422,9 @@ describe(worker_adapter_1.WorkerAdapter.name, () => {
|
|
|
403
422
|
jest.restoreAllMocks();
|
|
404
423
|
});
|
|
405
424
|
it('should emit only one event when multiple events of same type are sent', async () => {
|
|
406
|
-
adapter['adapterState'].postState = jest
|
|
425
|
+
adapter['adapterState'].postState = jest
|
|
426
|
+
.fn()
|
|
427
|
+
.mockResolvedValue(undefined);
|
|
407
428
|
adapter.uploadAllRepos = jest.fn().mockResolvedValue(undefined);
|
|
408
429
|
await adapter.emit(types_1.ExtractorEventType.ExtractionMetadataError, {
|
|
409
430
|
reports: [],
|
|
@@ -416,7 +437,9 @@ describe(worker_adapter_1.WorkerAdapter.name, () => {
|
|
|
416
437
|
expect(counter.counter).toBe(1);
|
|
417
438
|
});
|
|
418
439
|
it('should emit event when different event type is sent after previous events', async () => {
|
|
419
|
-
adapter['adapterState'].postState = jest
|
|
440
|
+
adapter['adapterState'].postState = jest
|
|
441
|
+
.fn()
|
|
442
|
+
.mockResolvedValue(undefined);
|
|
420
443
|
adapter.uploadAllRepos = jest.fn().mockResolvedValue(undefined);
|
|
421
444
|
await adapter.emit(types_1.ExtractorEventType.ExtractionMetadataError, {
|
|
422
445
|
reports: [],
|
|
@@ -433,7 +456,9 @@ describe(worker_adapter_1.WorkerAdapter.name, () => {
|
|
|
433
456
|
expect(counter.counter).toBe(1);
|
|
434
457
|
});
|
|
435
458
|
it('should correctly emit one event even if postState errors', async () => {
|
|
436
|
-
adapter['adapterState'].postState = jest
|
|
459
|
+
adapter['adapterState'].postState = jest
|
|
460
|
+
.fn()
|
|
461
|
+
.mockRejectedValue(new Error('postState error'));
|
|
437
462
|
adapter.uploadAllRepos = jest.fn().mockResolvedValue(undefined);
|
|
438
463
|
await adapter.emit(types_1.ExtractorEventType.ExtractionMetadataError, {
|
|
439
464
|
reports: [],
|
|
@@ -442,8 +467,12 @@ describe(worker_adapter_1.WorkerAdapter.name, () => {
|
|
|
442
467
|
expect(counter.counter).toBe(1);
|
|
443
468
|
});
|
|
444
469
|
it('should correctly emit one event even if uploadAllRepos errors', async () => {
|
|
445
|
-
adapter['adapterState'].postState = jest
|
|
446
|
-
|
|
470
|
+
adapter['adapterState'].postState = jest
|
|
471
|
+
.fn()
|
|
472
|
+
.mockResolvedValue(undefined);
|
|
473
|
+
adapter.uploadAllRepos = jest
|
|
474
|
+
.fn()
|
|
475
|
+
.mockRejectedValue(new Error('uploadAllRepos error'));
|
|
447
476
|
await adapter.emit(types_1.ExtractorEventType.ExtractionMetadataError, {
|
|
448
477
|
reports: [],
|
|
449
478
|
processed_files: [],
|
package/dist/workers/worker.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@devrev/ts-adaas",
|
|
3
|
-
"version": "1.11.1-beta.
|
|
3
|
+
"version": "1.11.1-beta.2",
|
|
4
4
|
"description": "Typescript library containing the ADaaS(AirDrop as a Service) control protocol.",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -31,15 +31,23 @@
|
|
|
31
31
|
"@types/lambda-log": "^3.0.3",
|
|
32
32
|
"@types/node": "^22.18.0",
|
|
33
33
|
"@types/yargs": "^17.0.33",
|
|
34
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
35
|
-
"@typescript-eslint/parser": "^8.
|
|
34
|
+
"@typescript-eslint/eslint-plugin": "^8.46.0",
|
|
35
|
+
"@typescript-eslint/parser": "^8.46.0",
|
|
36
36
|
"axios-mock-adapter": "^2.1.0",
|
|
37
|
-
"eslint": "
|
|
38
|
-
"eslint-config-prettier": "^
|
|
39
|
-
"eslint-plugin-
|
|
37
|
+
"eslint": "9.32.0",
|
|
38
|
+
"eslint-config-prettier": "^9.1.2",
|
|
39
|
+
"eslint-plugin-import": "^2.28.1",
|
|
40
|
+
"eslint-plugin-prettier": "4.0.0",
|
|
41
|
+
"eslint-plugin-simple-import-sort": "^10.0.0",
|
|
42
|
+
"eslint-plugin-sort-keys-fix": "^1.1.2",
|
|
43
|
+
"eslint-plugin-unused-imports": "^4.1.4",
|
|
40
44
|
"jest": "^29.7.0",
|
|
45
|
+
"jiti": "^2.6.1",
|
|
46
|
+
"prettier": "^2.8.3",
|
|
47
|
+
"prettier-plugin-organize-imports": "^3.2.2",
|
|
41
48
|
"ts-jest": "^29.4.4",
|
|
42
|
-
"typescript": "^5.3.3"
|
|
49
|
+
"typescript": "^5.3.3",
|
|
50
|
+
"typescript-eslint": "^8.46.1"
|
|
43
51
|
},
|
|
44
52
|
"dependencies": {
|
|
45
53
|
"@devrev/typescript-sdk": "^1.1.59",
|