@webiny/api-elasticsearch-tasks 6.0.0-beta.0 → 6.0.0-rc.0
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/README.md +10 -9
- package/abstractions/DbRegistry.d.ts +11 -0
- package/abstractions/DbRegistry.js +4 -0
- package/abstractions/DbRegistry.js.map +1 -0
- package/abstractions/OpensearchTenantIndexFactory.d.ts +14 -0
- package/abstractions/OpensearchTenantIndexFactory.js +4 -0
- package/abstractions/OpensearchTenantIndexFactory.js.map +1 -0
- package/abstractions/SynchronizationContext.d.ts +6 -0
- package/abstractions/SynchronizationContext.js +4 -0
- package/abstractions/SynchronizationContext.js.map +1 -0
- package/errors/IndexSettingsGetError.d.ts +1 -1
- package/errors/IndexSettingsGetError.js +2 -10
- package/errors/IndexSettingsGetError.js.map +1 -1
- package/errors/IndexSettingsSetError.d.ts +1 -1
- package/errors/IndexSettingsSetError.js +2 -10
- package/errors/IndexSettingsSetError.js.map +1 -1
- package/errors/IndexingDisableError.js +1 -8
- package/errors/IndexingDisableError.js.map +1 -1
- package/errors/IndexingEnableError.js +1 -8
- package/errors/IndexingEnableError.js.map +1 -1
- package/errors/index.d.ts +4 -4
- package/errors/index.js +4 -49
- package/errors/index.js.map +1 -1
- package/helpers/getClients.d.ts +5 -0
- package/helpers/getClients.js +14 -0
- package/helpers/getClients.js.map +1 -0
- package/helpers/scan.d.ts +5 -5
- package/helpers/scan.js +5 -12
- package/helpers/scan.js.map +1 -1
- package/index.d.ts +5 -5
- package/index.js +14 -25
- package/index.js.map +1 -1
- package/package.json +33 -34
- package/settings/DisableIndexing.d.ts +2 -2
- package/settings/DisableIndexing.js +3 -10
- package/settings/DisableIndexing.js.map +1 -1
- package/settings/EnableIndexing.d.ts +2 -2
- package/settings/EnableIndexing.js +5 -11
- package/settings/EnableIndexing.js.map +1 -1
- package/settings/IndexManager.d.ts +6 -3
- package/settings/IndexManager.js +21 -17
- package/settings/IndexManager.js.map +1 -1
- package/settings/IndexSettingsManager.d.ts +2 -2
- package/settings/IndexSettingsManager.js +4 -11
- package/settings/IndexSettingsManager.js.map +1 -1
- package/settings/index.d.ts +1 -1
- package/settings/index.js +1 -16
- package/settings/index.js.map +1 -1
- package/settings/types.d.ts +1 -1
- package/settings/types.js +1 -5
- package/settings/types.js.map +1 -1
- package/tasks/Manager.d.ts +17 -26
- package/tasks/Manager.js +10 -36
- package/tasks/Manager.js.map +1 -1
- package/tasks/createIndexes/CreateIndexesTask.d.ts +23 -0
- package/tasks/createIndexes/CreateIndexesTask.js +53 -0
- package/tasks/createIndexes/CreateIndexesTask.js.map +1 -0
- package/tasks/createIndexes/CreateIndexesTaskRunner.d.ts +14 -7
- package/tasks/createIndexes/CreateIndexesTaskRunner.js +23 -38
- package/tasks/createIndexes/CreateIndexesTaskRunner.js.map +1 -1
- package/tasks/createIndexes/OnBeforeTrigger.d.ts +10 -0
- package/tasks/createIndexes/OnBeforeTrigger.js +51 -0
- package/tasks/createIndexes/OnBeforeTrigger.js.map +1 -0
- package/tasks/createIndexes/createIndex.d.ts +5 -0
- package/tasks/createIndexes/createIndex.js +20 -0
- package/tasks/createIndexes/createIndex.js.map +1 -0
- package/tasks/createIndexes/index.d.ts +2 -3
- package/tasks/createIndexes/index.js +17 -44
- package/tasks/createIndexes/index.js.map +1 -1
- package/tasks/createIndexes/listIndexes.d.ts +4 -0
- package/tasks/createIndexes/listIndexes.js +20 -0
- package/tasks/createIndexes/listIndexes.js.map +1 -0
- package/tasks/createIndexes/types.js +1 -5
- package/tasks/dataSynchronization/DataSynchronizationTask.d.ts +34 -0
- package/tasks/dataSynchronization/DataSynchronizationTask.js +69 -0
- package/tasks/dataSynchronization/DataSynchronizationTask.js.map +1 -0
- package/tasks/dataSynchronization/DataSynchronizationTaskRunner.d.ts +18 -0
- package/tasks/dataSynchronization/DataSynchronizationTaskRunner.js +45 -0
- package/tasks/dataSynchronization/DataSynchronizationTaskRunner.js.map +1 -0
- package/tasks/dataSynchronization/createFactories.d.ts +2 -0
- package/tasks/dataSynchronization/createFactories.js +10 -0
- package/tasks/dataSynchronization/createFactories.js.map +1 -0
- package/tasks/dataSynchronization/elasticsearch/ElasticsearchFetcher.d.ts +10 -0
- package/tasks/dataSynchronization/elasticsearch/ElasticsearchFetcher.js +91 -0
- package/tasks/dataSynchronization/elasticsearch/ElasticsearchFetcher.js.map +1 -0
- package/tasks/dataSynchronization/elasticsearch/ElasticsearchSynchronize.d.ts +12 -0
- package/tasks/dataSynchronization/elasticsearch/ElasticsearchSynchronize.js +70 -0
- package/tasks/dataSynchronization/elasticsearch/ElasticsearchSynchronize.js.map +1 -0
- package/tasks/dataSynchronization/elasticsearch/ElasticsearchToDynamoDbSynchronization.d.ts +10 -0
- package/tasks/dataSynchronization/elasticsearch/ElasticsearchToDynamoDbSynchronization.js +70 -0
- package/tasks/dataSynchronization/elasticsearch/ElasticsearchToDynamoDbSynchronization.js.map +1 -0
- package/tasks/dataSynchronization/elasticsearch/abstractions/ElasticsearchFetcher.d.ts +21 -0
- package/tasks/dataSynchronization/elasticsearch/abstractions/ElasticsearchFetcher.js +3 -0
- package/tasks/dataSynchronization/elasticsearch/abstractions/ElasticsearchFetcher.js.map +1 -0
- package/tasks/dataSynchronization/elasticsearch/abstractions/ElasticsearchSynchronize.d.ts +17 -0
- package/tasks/dataSynchronization/elasticsearch/abstractions/ElasticsearchSynchronize.js +3 -0
- package/tasks/dataSynchronization/elasticsearch/abstractions/ElasticsearchSynchronize.js.map +1 -0
- package/tasks/dataSynchronization/elasticsearch/shouldIgnoreEsResponseError.d.ts +2 -0
- package/tasks/dataSynchronization/elasticsearch/shouldIgnoreEsResponseError.js +6 -0
- package/tasks/dataSynchronization/elasticsearch/shouldIgnoreEsResponseError.js.map +1 -0
- package/tasks/dataSynchronization/entities/getElasticsearchEntity.d.ts +10 -0
- package/tasks/dataSynchronization/entities/getElasticsearchEntity.js +24 -0
- package/tasks/dataSynchronization/entities/getElasticsearchEntity.js.map +1 -0
- package/tasks/dataSynchronization/entities/getElasticsearchEntityType.d.ts +8 -0
- package/tasks/dataSynchronization/entities/getElasticsearchEntityType.js +12 -0
- package/tasks/dataSynchronization/entities/getElasticsearchEntityType.js.map +1 -0
- package/tasks/dataSynchronization/entities/getTable.d.ts +7 -0
- package/tasks/dataSynchronization/entities/getTable.js +22 -0
- package/tasks/dataSynchronization/entities/getTable.js.map +1 -0
- package/tasks/dataSynchronization/entities/index.d.ts +3 -0
- package/tasks/dataSynchronization/entities/index.js +5 -0
- package/tasks/dataSynchronization/entities/index.js.map +1 -0
- package/tasks/dataSynchronization/index.d.ts +3 -0
- package/tasks/dataSynchronization/index.js +28 -0
- package/tasks/dataSynchronization/index.js.map +1 -0
- package/tasks/dataSynchronization/types.d.ts +39 -0
- package/tasks/dataSynchronization/types.js +3 -0
- package/tasks/dataSynchronization/types.js.map +1 -0
- package/tasks/enableIndexing/EnableIndexingTaskRunner.d.ts +6 -6
- package/tasks/enableIndexing/EnableIndexingTaskRunner.js +5 -13
- package/tasks/enableIndexing/EnableIndexingTaskRunner.js.map +1 -1
- package/tasks/enableIndexing/index.d.ts +2 -3
- package/tasks/enableIndexing/index.js +40 -44
- package/tasks/enableIndexing/index.js.map +1 -1
- package/tasks/enableIndexing/types.js +1 -5
- package/tasks/index.d.ts +4 -3
- package/tasks/index.js +4 -38
- package/tasks/index.js.map +1 -1
- package/tasks/reindexing/ReindexingTaskRunner.d.ts +5 -6
- package/tasks/reindexing/ReindexingTaskRunner.js +23 -27
- package/tasks/reindexing/ReindexingTaskRunner.js.map +1 -1
- package/tasks/reindexing/index.d.ts +1 -1
- package/tasks/reindexing/index.js +1 -16
- package/tasks/reindexing/index.js.map +1 -1
- package/tasks/reindexing/reindexingTaskDefinition.d.ts +2 -2
- package/tasks/reindexing/reindexingTaskDefinition.js +43 -42
- package/tasks/reindexing/reindexingTaskDefinition.js.map +1 -1
- package/types.d.ts +22 -22
- package/types.js +1 -5
- package/types.js.map +1 -1
- package/definitions/entry.d.ts +0 -7
- package/definitions/entry.js +0 -36
- package/definitions/entry.js.map +0 -1
- package/definitions/index.d.ts +0 -2
- package/definitions/index.js +0 -29
- package/definitions/index.js.map +0 -1
- package/definitions/table.d.ts +0 -7
- package/definitions/table.js +0 -23
- package/definitions/table.js.map +0 -1
- package/tasks/createIndexes/CreateElasticsearchIndexTaskPlugin.d.ts +0 -23
- package/tasks/createIndexes/CreateElasticsearchIndexTaskPlugin.js +0 -25
- package/tasks/createIndexes/CreateElasticsearchIndexTaskPlugin.js.map +0 -1
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Client } from "@webiny/api-elasticsearch";
|
|
2
|
+
import type { IElasticsearchFetcher, IElasticsearchFetcherFetchParams, IElasticsearchFetcherFetchResponse } from "./abstractions/ElasticsearchFetcher.js";
|
|
3
|
+
export interface IElasticsearchFetcherParams {
|
|
4
|
+
client: Client;
|
|
5
|
+
}
|
|
6
|
+
export declare class ElasticsearchFetcher implements IElasticsearchFetcher {
|
|
7
|
+
private readonly client;
|
|
8
|
+
constructor(params: IElasticsearchFetcherParams);
|
|
9
|
+
fetch({ index, cursor, limit }: IElasticsearchFetcherFetchParams): Promise<IElasticsearchFetcherFetchResponse>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { shouldIgnoreEsResponseError } from "./shouldIgnoreEsResponseError.js";
|
|
2
|
+
import { inspect } from "node:util";
|
|
3
|
+
export class ElasticsearchFetcher {
|
|
4
|
+
constructor(params) {
|
|
5
|
+
this.client = params.client;
|
|
6
|
+
}
|
|
7
|
+
async fetch({
|
|
8
|
+
index,
|
|
9
|
+
cursor,
|
|
10
|
+
limit
|
|
11
|
+
}) {
|
|
12
|
+
let response;
|
|
13
|
+
try {
|
|
14
|
+
response = await this.client.search({
|
|
15
|
+
index,
|
|
16
|
+
body: {
|
|
17
|
+
query: {
|
|
18
|
+
match_all: {}
|
|
19
|
+
},
|
|
20
|
+
sort: {
|
|
21
|
+
"id.keyword": {
|
|
22
|
+
order: "asc"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
size: limit + 1,
|
|
26
|
+
track_total_hits: true,
|
|
27
|
+
search_after: cursor,
|
|
28
|
+
_source: false
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
} catch (ex) {
|
|
32
|
+
/**
|
|
33
|
+
* If we ignore the error, we can continue with the next index.
|
|
34
|
+
*/
|
|
35
|
+
if (shouldIgnoreEsResponseError(ex)) {
|
|
36
|
+
if (process.env.DEBUG === "true") {
|
|
37
|
+
console.error(inspect(ex, {
|
|
38
|
+
depth: 5,
|
|
39
|
+
showHidden: true
|
|
40
|
+
}));
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
done: true,
|
|
44
|
+
totalCount: 0,
|
|
45
|
+
items: []
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
console.error("Failed to fetch data from Elasticsearch.", ex);
|
|
49
|
+
throw ex;
|
|
50
|
+
}
|
|
51
|
+
const {
|
|
52
|
+
hits,
|
|
53
|
+
total
|
|
54
|
+
} = response.body.hits;
|
|
55
|
+
if (hits.length === 0) {
|
|
56
|
+
return {
|
|
57
|
+
done: true,
|
|
58
|
+
cursor: undefined,
|
|
59
|
+
totalCount: total.value,
|
|
60
|
+
items: []
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
const hasMoreItems = hits.length > limit;
|
|
64
|
+
let nextCursor;
|
|
65
|
+
if (hasMoreItems) {
|
|
66
|
+
hits.pop();
|
|
67
|
+
nextCursor = hits.at(-1)?.sort;
|
|
68
|
+
}
|
|
69
|
+
const items = hits.reduce((collection, hit) => {
|
|
70
|
+
const [PK, SK] = hit._id.split(":");
|
|
71
|
+
if (!PK || !SK) {
|
|
72
|
+
return collection;
|
|
73
|
+
}
|
|
74
|
+
collection.push({
|
|
75
|
+
PK,
|
|
76
|
+
SK,
|
|
77
|
+
_id: hit._id,
|
|
78
|
+
index: hit._index
|
|
79
|
+
});
|
|
80
|
+
return collection;
|
|
81
|
+
}, []);
|
|
82
|
+
return {
|
|
83
|
+
totalCount: total.value,
|
|
84
|
+
cursor: nextCursor,
|
|
85
|
+
done: !nextCursor,
|
|
86
|
+
items
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
//# sourceMappingURL=ElasticsearchFetcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["shouldIgnoreEsResponseError","inspect","ElasticsearchFetcher","constructor","params","client","fetch","index","cursor","limit","response","search","body","query","match_all","sort","order","size","track_total_hits","search_after","_source","ex","process","env","DEBUG","console","error","depth","showHidden","done","totalCount","items","hits","total","length","undefined","value","hasMoreItems","nextCursor","pop","at","reduce","collection","hit","PK","SK","_id","split","push","_index"],"sources":["ElasticsearchFetcher.ts"],"sourcesContent":["import type { Client } from \"@webiny/api-elasticsearch\";\nimport type {\n IElasticsearchFetcher,\n IElasticsearchFetcherFetchParams,\n IElasticsearchFetcherFetchResponse,\n IElasticsearchFetcherFetchResponseItem\n} from \"./abstractions/ElasticsearchFetcher.js\";\nimport type {\n ElasticsearchSearchResponse,\n PrimitiveValue\n} from \"@webiny/api-elasticsearch/types.js\";\nimport { shouldIgnoreEsResponseError } from \"./shouldIgnoreEsResponseError.js\";\nimport { inspect } from \"node:util\";\n\nexport interface IElasticsearchFetcherParams {\n client: Client;\n}\n\nexport class ElasticsearchFetcher implements IElasticsearchFetcher {\n private readonly client: Client;\n\n public constructor(params: IElasticsearchFetcherParams) {\n this.client = params.client;\n }\n public async fetch({\n index,\n cursor,\n limit\n }: IElasticsearchFetcherFetchParams): Promise<IElasticsearchFetcherFetchResponse> {\n let response: ElasticsearchSearchResponse<undefined>;\n try {\n response = await this.client.search({\n index,\n body: {\n query: {\n match_all: {}\n },\n sort: {\n \"id.keyword\": {\n order: \"asc\"\n }\n },\n size: limit + 1,\n track_total_hits: true,\n search_after: cursor,\n _source: false\n }\n });\n } catch (ex) {\n /**\n * If we ignore the error, we can continue with the next index.\n */\n if (shouldIgnoreEsResponseError(ex)) {\n if (process.env.DEBUG === \"true\") {\n console.error(\n inspect(ex, {\n depth: 5,\n showHidden: true\n })\n );\n }\n return {\n done: true,\n totalCount: 0,\n items: []\n };\n }\n console.error(\"Failed to fetch data from Elasticsearch.\", ex);\n throw ex;\n }\n\n const { hits, total } = response.body.hits;\n if (hits.length === 0) {\n return {\n done: true,\n cursor: undefined,\n totalCount: total.value,\n items: []\n };\n }\n\n const hasMoreItems = hits.length > limit;\n let nextCursor: PrimitiveValue[] | undefined;\n if (hasMoreItems) {\n hits.pop();\n nextCursor = hits.at(-1)?.sort;\n }\n const items = hits.reduce<IElasticsearchFetcherFetchResponseItem[]>((collection, hit) => {\n const [PK, SK] = hit._id.split(\":\");\n if (!PK || !SK) {\n return collection;\n }\n collection.push({\n PK,\n SK,\n _id: hit._id,\n index: hit._index\n });\n\n return collection;\n }, []);\n\n return {\n totalCount: total.value,\n cursor: nextCursor,\n done: !nextCursor,\n items\n };\n }\n}\n"],"mappings":"AAWA,SAASA,2BAA2B;AACpC,SAASC,OAAO,QAAQ,WAAW;AAMnC,OAAO,MAAMC,oBAAoB,CAAkC;EAGxDC,WAAWA,CAACC,MAAmC,EAAE;IACpD,IAAI,CAACC,MAAM,GAAGD,MAAM,CAACC,MAAM;EAC/B;EACA,MAAaC,KAAKA,CAAC;IACfC,KAAK;IACLC,MAAM;IACNC;EAC8B,CAAC,EAA+C;IAC9E,IAAIC,QAAgD;IACpD,IAAI;MACAA,QAAQ,GAAG,MAAM,IAAI,CAACL,MAAM,CAACM,MAAM,CAAC;QAChCJ,KAAK;QACLK,IAAI,EAAE;UACFC,KAAK,EAAE;YACHC,SAAS,EAAE,CAAC;UAChB,CAAC;UACDC,IAAI,EAAE;YACF,YAAY,EAAE;cACVC,KAAK,EAAE;YACX;UACJ,CAAC;UACDC,IAAI,EAAER,KAAK,GAAG,CAAC;UACfS,gBAAgB,EAAE,IAAI;UACtBC,YAAY,EAAEX,MAAM;UACpBY,OAAO,EAAE;QACb;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAOC,EAAE,EAAE;MACT;AACZ;AACA;MACY,IAAIrB,2BAA2B,CAACqB,EAAE,CAAC,EAAE;QACjC,IAAIC,OAAO,CAACC,GAAG,CAACC,KAAK,KAAK,MAAM,EAAE;UAC9BC,OAAO,CAACC,KAAK,CACTzB,OAAO,CAACoB,EAAE,EAAE;YACRM,KAAK,EAAE,CAAC;YACRC,UAAU,EAAE;UAChB,CAAC,CACL,CAAC;QACL;QACA,OAAO;UACHC,IAAI,EAAE,IAAI;UACVC,UAAU,EAAE,CAAC;UACbC,KAAK,EAAE;QACX,CAAC;MACL;MACAN,OAAO,CAACC,KAAK,CAAC,0CAA0C,EAAEL,EAAE,CAAC;MAC7D,MAAMA,EAAE;IACZ;IAEA,MAAM;MAAEW,IAAI;MAAEC;IAAM,CAAC,GAAGvB,QAAQ,CAACE,IAAI,CAACoB,IAAI;IAC1C,IAAIA,IAAI,CAACE,MAAM,KAAK,CAAC,EAAE;MACnB,OAAO;QACHL,IAAI,EAAE,IAAI;QACVrB,MAAM,EAAE2B,SAAS;QACjBL,UAAU,EAAEG,KAAK,CAACG,KAAK;QACvBL,KAAK,EAAE;MACX,CAAC;IACL;IAEA,MAAMM,YAAY,GAAGL,IAAI,CAACE,MAAM,GAAGzB,KAAK;IACxC,IAAI6B,UAAwC;IAC5C,IAAID,YAAY,EAAE;MACdL,IAAI,CAACO,GAAG,CAAC,CAAC;MACVD,UAAU,GAAGN,IAAI,CAACQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAEzB,IAAI;IAClC;IACA,MAAMgB,KAAK,GAAGC,IAAI,CAACS,MAAM,CAA2C,CAACC,UAAU,EAAEC,GAAG,KAAK;MACrF,MAAM,CAACC,EAAE,EAAEC,EAAE,CAAC,GAAGF,GAAG,CAACG,GAAG,CAACC,KAAK,CAAC,GAAG,CAAC;MACnC,IAAI,CAACH,EAAE,IAAI,CAACC,EAAE,EAAE;QACZ,OAAOH,UAAU;MACrB;MACAA,UAAU,CAACM,IAAI,CAAC;QACZJ,EAAE;QACFC,EAAE;QACFC,GAAG,EAAEH,GAAG,CAACG,GAAG;QACZvC,KAAK,EAAEoC,GAAG,CAACM;MACf,CAAC,CAAC;MAEF,OAAOP,UAAU;IACrB,CAAC,EAAE,EAAE,CAAC;IAEN,OAAO;MACHZ,UAAU,EAAEG,KAAK,CAACG,KAAK;MACvB5B,MAAM,EAAE8B,UAAU;MAClBT,IAAI,EAAE,CAACS,UAAU;MACjBP;IACJ,CAAC;EACL;AACJ","ignoreList":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { TaskController } from "@webiny/api-core/features/task/TaskController/index.js";
|
|
2
|
+
import type { IElasticsearchSynchronize, IElasticsearchSynchronizeExecuteParams, IElasticsearchSynchronizeExecuteResponse } from "./abstractions/ElasticsearchSynchronize.js";
|
|
3
|
+
import { SynchronizationContext } from "../../../abstractions/SynchronizationContext.js";
|
|
4
|
+
import { DbRegistry } from "../../../abstractions/DbRegistry.js";
|
|
5
|
+
export declare class ElasticsearchSynchronize implements IElasticsearchSynchronize {
|
|
6
|
+
private controller;
|
|
7
|
+
private dbRegistry;
|
|
8
|
+
private context;
|
|
9
|
+
constructor(controller: TaskController.Interface, dbRegistry: DbRegistry.Interface, context: SynchronizationContext.Interface);
|
|
10
|
+
execute(params: IElasticsearchSynchronizeExecuteParams): Promise<IElasticsearchSynchronizeExecuteResponse>;
|
|
11
|
+
private getEntity;
|
|
12
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { batchReadAll } from "@webiny/db-dynamodb/utils/batch/batchRead.js";
|
|
2
|
+
import { createSynchronizationBuilder } from "@webiny/api-dynamodb-to-elasticsearch";
|
|
3
|
+
import { getElasticsearchEntity, getElasticsearchEntityType, getTable } from "../entities/index.js";
|
|
4
|
+
export class ElasticsearchSynchronize {
|
|
5
|
+
constructor(controller, dbRegistry, context) {
|
|
6
|
+
this.controller = controller;
|
|
7
|
+
this.dbRegistry = dbRegistry;
|
|
8
|
+
this.context = context;
|
|
9
|
+
}
|
|
10
|
+
async execute(params) {
|
|
11
|
+
const {
|
|
12
|
+
items,
|
|
13
|
+
done,
|
|
14
|
+
index
|
|
15
|
+
} = params;
|
|
16
|
+
if (items.length === 0) {
|
|
17
|
+
return {
|
|
18
|
+
done: true
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
const table = getTable({
|
|
22
|
+
type: "es",
|
|
23
|
+
dbRegistry: this.dbRegistry
|
|
24
|
+
});
|
|
25
|
+
const readableItems = items.map(item => {
|
|
26
|
+
const entity = this.getEntity(item);
|
|
27
|
+
return entity.item.entity.getBatch({
|
|
28
|
+
PK: item.PK,
|
|
29
|
+
SK: item.SK
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
const tableItems = await batchReadAll({
|
|
33
|
+
items: readableItems,
|
|
34
|
+
table
|
|
35
|
+
});
|
|
36
|
+
const elasticsearchSyncBuilder = createSynchronizationBuilder({
|
|
37
|
+
context: this.context,
|
|
38
|
+
timer: this.controller.runtime
|
|
39
|
+
});
|
|
40
|
+
/**
|
|
41
|
+
* We need to find the items we have in the Elasticsearch but not in the DynamoDB-Elasticsearch table.
|
|
42
|
+
*/
|
|
43
|
+
for (const item of items) {
|
|
44
|
+
const exists = tableItems.some(ddbItem => {
|
|
45
|
+
return ddbItem.PK === item.PK && ddbItem.SK === item.SK;
|
|
46
|
+
});
|
|
47
|
+
if (exists) {
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
elasticsearchSyncBuilder.delete({
|
|
51
|
+
index,
|
|
52
|
+
id: item._id
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
const executeWithRetry = elasticsearchSyncBuilder.build();
|
|
56
|
+
await executeWithRetry();
|
|
57
|
+
return {
|
|
58
|
+
done
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
getEntity(params) {
|
|
62
|
+
const type = getElasticsearchEntityType(params);
|
|
63
|
+
return getElasticsearchEntity({
|
|
64
|
+
type,
|
|
65
|
+
dbRegistry: this.dbRegistry
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
//# sourceMappingURL=ElasticsearchSynchronize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["batchReadAll","createSynchronizationBuilder","getElasticsearchEntity","getElasticsearchEntityType","getTable","ElasticsearchSynchronize","constructor","controller","dbRegistry","context","execute","params","items","done","index","length","table","type","readableItems","map","item","entity","getEntity","getBatch","PK","SK","tableItems","elasticsearchSyncBuilder","timer","runtime","exists","some","ddbItem","delete","id","_id","executeWithRetry","build"],"sources":["ElasticsearchSynchronize.ts"],"sourcesContent":["import { batchReadAll } from \"@webiny/db-dynamodb/utils/batch/batchRead.js\";\nimport { createSynchronizationBuilder } from \"@webiny/api-dynamodb-to-elasticsearch\";\nimport type { IGetElasticsearchEntityTypeParams } from \"~/tasks/dataSynchronization/entities/index.js\";\nimport {\n getElasticsearchEntity,\n getElasticsearchEntityType,\n getTable\n} from \"~/tasks/dataSynchronization/entities/index.js\";\nimport type { TaskController } from \"@webiny/api-core/features/task/TaskController/index.js\";\nimport type {\n IElasticsearchSynchronize,\n IElasticsearchSynchronizeExecuteParams,\n IElasticsearchSynchronizeExecuteResponse\n} from \"./abstractions/ElasticsearchSynchronize.js\";\nimport { SynchronizationContext } from \"~/abstractions/SynchronizationContext.js\";\nimport { DbRegistry } from \"~/abstractions/DbRegistry.js\";\n\ninterface IDynamoDbItem {\n PK: string;\n SK: string;\n}\n\nexport class ElasticsearchSynchronize implements IElasticsearchSynchronize {\n public constructor(\n private controller: TaskController.Interface,\n private dbRegistry: DbRegistry.Interface,\n private context: SynchronizationContext.Interface\n ) {}\n\n public async execute(\n params: IElasticsearchSynchronizeExecuteParams\n ): Promise<IElasticsearchSynchronizeExecuteResponse> {\n const { items, done, index } = params;\n if (items.length === 0) {\n return {\n done: true\n };\n }\n\n const table = getTable({\n type: \"es\",\n dbRegistry: this.dbRegistry\n });\n\n const readableItems = items.map(item => {\n const entity = this.getEntity(item);\n return entity.item.entity.getBatch({\n PK: item.PK,\n SK: item.SK\n });\n });\n\n const tableItems = await batchReadAll<IDynamoDbItem>({\n items: readableItems,\n table\n });\n\n const elasticsearchSyncBuilder = createSynchronizationBuilder({\n context: this.context,\n timer: this.controller.runtime\n });\n /**\n * We need to find the items we have in the Elasticsearch but not in the DynamoDB-Elasticsearch table.\n */\n for (const item of items) {\n const exists = tableItems.some(ddbItem => {\n return ddbItem.PK === item.PK && ddbItem.SK === item.SK;\n });\n if (exists) {\n continue;\n }\n elasticsearchSyncBuilder.delete({\n index,\n id: item._id\n });\n }\n\n const executeWithRetry = elasticsearchSyncBuilder.build();\n await executeWithRetry();\n\n return {\n done\n };\n }\n\n private getEntity(\n params: IGetElasticsearchEntityTypeParams\n ): ReturnType<typeof getElasticsearchEntity> {\n const type = getElasticsearchEntityType(params);\n return getElasticsearchEntity({\n type,\n dbRegistry: this.dbRegistry\n });\n }\n}\n"],"mappings":"AAAA,SAASA,YAAY,QAAQ,8CAA8C;AAC3E,SAASC,4BAA4B,QAAQ,uCAAuC;AAEpF,SACIC,sBAAsB,EACtBC,0BAA0B,EAC1BC,QAAQ;AAgBZ,OAAO,MAAMC,wBAAwB,CAAsC;EAChEC,WAAWA,CACNC,UAAoC,EACpCC,UAAgC,EAChCC,OAAyC,EACnD;IAAA,KAHUF,UAAoC,GAApCA,UAAoC;IAAA,KACpCC,UAAgC,GAAhCA,UAAgC;IAAA,KAChCC,OAAyC,GAAzCA,OAAyC;EAClD;EAEH,MAAaC,OAAOA,CAChBC,MAA8C,EACG;IACjD,MAAM;MAAEC,KAAK;MAAEC,IAAI;MAAEC;IAAM,CAAC,GAAGH,MAAM;IACrC,IAAIC,KAAK,CAACG,MAAM,KAAK,CAAC,EAAE;MACpB,OAAO;QACHF,IAAI,EAAE;MACV,CAAC;IACL;IAEA,MAAMG,KAAK,GAAGZ,QAAQ,CAAC;MACnBa,IAAI,EAAE,IAAI;MACVT,UAAU,EAAE,IAAI,CAACA;IACrB,CAAC,CAAC;IAEF,MAAMU,aAAa,GAAGN,KAAK,CAACO,GAAG,CAACC,IAAI,IAAI;MACpC,MAAMC,MAAM,GAAG,IAAI,CAACC,SAAS,CAACF,IAAI,CAAC;MACnC,OAAOC,MAAM,CAACD,IAAI,CAACC,MAAM,CAACE,QAAQ,CAAC;QAC/BC,EAAE,EAAEJ,IAAI,CAACI,EAAE;QACXC,EAAE,EAAEL,IAAI,CAACK;MACb,CAAC,CAAC;IACN,CAAC,CAAC;IAEF,MAAMC,UAAU,GAAG,MAAM1B,YAAY,CAAgB;MACjDY,KAAK,EAAEM,aAAa;MACpBF;IACJ,CAAC,CAAC;IAEF,MAAMW,wBAAwB,GAAG1B,4BAA4B,CAAC;MAC1DQ,OAAO,EAAE,IAAI,CAACA,OAAO;MACrBmB,KAAK,EAAE,IAAI,CAACrB,UAAU,CAACsB;IAC3B,CAAC,CAAC;IACF;AACR;AACA;IACQ,KAAK,MAAMT,IAAI,IAAIR,KAAK,EAAE;MACtB,MAAMkB,MAAM,GAAGJ,UAAU,CAACK,IAAI,CAACC,OAAO,IAAI;QACtC,OAAOA,OAAO,CAACR,EAAE,KAAKJ,IAAI,CAACI,EAAE,IAAIQ,OAAO,CAACP,EAAE,KAAKL,IAAI,CAACK,EAAE;MAC3D,CAAC,CAAC;MACF,IAAIK,MAAM,EAAE;QACR;MACJ;MACAH,wBAAwB,CAACM,MAAM,CAAC;QAC5BnB,KAAK;QACLoB,EAAE,EAAEd,IAAI,CAACe;MACb,CAAC,CAAC;IACN;IAEA,MAAMC,gBAAgB,GAAGT,wBAAwB,CAACU,KAAK,CAAC,CAAC;IACzD,MAAMD,gBAAgB,CAAC,CAAC;IAExB,OAAO;MACHvB;IACJ,CAAC;EACL;EAEQS,SAASA,CACbX,MAAyC,EACA;IACzC,MAAMM,IAAI,GAAGd,0BAA0B,CAACQ,MAAM,CAAC;IAC/C,OAAOT,sBAAsB,CAAC;MAC1Be,IAAI;MACJT,UAAU,EAAE,IAAI,CAACA;IACrB,CAAC,CAAC;EACN;AACJ","ignoreList":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IDataSynchronizationInput, IElasticsearchSyncParams, ISynchronization, ISynchronizationRunResult } from "../types.js";
|
|
2
|
+
export declare class ElasticsearchToDynamoDbSynchronization implements ISynchronization {
|
|
3
|
+
private readonly manager;
|
|
4
|
+
private readonly indexManager;
|
|
5
|
+
private readonly synchronize;
|
|
6
|
+
private readonly fetcher;
|
|
7
|
+
constructor(params: IElasticsearchSyncParams);
|
|
8
|
+
run(input: IDataSynchronizationInput): Promise<ISynchronizationRunResult>;
|
|
9
|
+
private fetchAllIndexes;
|
|
10
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
export class ElasticsearchToDynamoDbSynchronization {
|
|
2
|
+
constructor(params) {
|
|
3
|
+
this.manager = params.manager;
|
|
4
|
+
this.indexManager = params.indexManager;
|
|
5
|
+
this.synchronize = params.synchronize;
|
|
6
|
+
this.fetcher = params.fetcher;
|
|
7
|
+
}
|
|
8
|
+
async run(input) {
|
|
9
|
+
const lastIndex = input.elasticsearchToDynamoDb?.index;
|
|
10
|
+
let cursor = input.elasticsearchToDynamoDb?.cursor;
|
|
11
|
+
const indexes = await this.fetchAllIndexes();
|
|
12
|
+
let next = 0;
|
|
13
|
+
if (lastIndex) {
|
|
14
|
+
next = indexes.findIndex(index => index === lastIndex);
|
|
15
|
+
}
|
|
16
|
+
let currentIndex = indexes[next];
|
|
17
|
+
while (currentIndex) {
|
|
18
|
+
if (this.manager.controller.runtime.isAborted()) {
|
|
19
|
+
return this.manager.controller.response.aborted();
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* We will put 180 seconds because we are writing to the Elasticsearch/OpenSearch directly.
|
|
23
|
+
* We want to leave enough time for possible retries.
|
|
24
|
+
*/
|
|
25
|
+
//
|
|
26
|
+
else if (this.manager.controller.runtime.isCloseToTimeout(180)) {
|
|
27
|
+
return this.manager.controller.response.continue({
|
|
28
|
+
...input,
|
|
29
|
+
elasticsearchToDynamoDb: {
|
|
30
|
+
...input.elasticsearchToDynamoDb,
|
|
31
|
+
index: currentIndex,
|
|
32
|
+
cursor
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
const result = await this.fetcher.fetch({
|
|
37
|
+
index: currentIndex,
|
|
38
|
+
cursor,
|
|
39
|
+
limit: 100
|
|
40
|
+
});
|
|
41
|
+
const syncResult = await this.synchronize.execute({
|
|
42
|
+
done: result.done,
|
|
43
|
+
index: currentIndex,
|
|
44
|
+
items: result.items
|
|
45
|
+
});
|
|
46
|
+
if (!syncResult.done && result.cursor) {
|
|
47
|
+
cursor = result.cursor;
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
cursor = undefined;
|
|
51
|
+
const next = indexes.findIndex(index => index === currentIndex) + 1;
|
|
52
|
+
currentIndex = indexes[next];
|
|
53
|
+
}
|
|
54
|
+
return this.manager.controller.response.continue({
|
|
55
|
+
...input,
|
|
56
|
+
elasticsearchToDynamoDb: {
|
|
57
|
+
finished: true
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
async fetchAllIndexes() {
|
|
62
|
+
const result = await this.indexManager.list();
|
|
63
|
+
if (result.length > 0) {
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
66
|
+
throw new Error("No Elasticsearch / OpenSearch indexes found.");
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
//# sourceMappingURL=ElasticsearchToDynamoDbSynchronization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ElasticsearchToDynamoDbSynchronization","constructor","params","manager","indexManager","synchronize","fetcher","run","input","lastIndex","elasticsearchToDynamoDb","index","cursor","indexes","fetchAllIndexes","next","findIndex","currentIndex","controller","runtime","isAborted","response","aborted","isCloseToTimeout","continue","result","fetch","limit","syncResult","execute","done","items","undefined","finished","list","length","Error"],"sources":["ElasticsearchToDynamoDbSynchronization.ts"],"sourcesContent":["import type {\n IDataSynchronizationInput,\n IDataSynchronizationManager,\n IElasticsearchSyncParams,\n ISynchronization,\n ISynchronizationRunResult\n} from \"../types.js\";\nimport type { IIndexManager } from \"~/settings/types.js\";\nimport type { NonEmptyArray } from \"@webiny/api/types.js\";\nimport type { IElasticsearchSynchronize } from \"./abstractions/ElasticsearchSynchronize.js\";\nimport type { IElasticsearchFetcher } from \"./abstractions/ElasticsearchFetcher.js\";\n\nexport class ElasticsearchToDynamoDbSynchronization implements ISynchronization {\n private readonly manager: IDataSynchronizationManager;\n private readonly indexManager: IIndexManager;\n private readonly synchronize: IElasticsearchSynchronize;\n private readonly fetcher: IElasticsearchFetcher;\n\n public constructor(params: IElasticsearchSyncParams) {\n this.manager = params.manager;\n this.indexManager = params.indexManager;\n this.synchronize = params.synchronize;\n this.fetcher = params.fetcher;\n }\n\n public async run(input: IDataSynchronizationInput): Promise<ISynchronizationRunResult> {\n const lastIndex = input.elasticsearchToDynamoDb?.index;\n let cursor = input.elasticsearchToDynamoDb?.cursor;\n const indexes = await this.fetchAllIndexes();\n\n let next = 0;\n if (lastIndex) {\n next = indexes.findIndex(index => index === lastIndex);\n }\n\n let currentIndex = indexes[next];\n\n while (currentIndex) {\n if (this.manager.controller.runtime.isAborted()) {\n return this.manager.controller.response.aborted();\n }\n /**\n * We will put 180 seconds because we are writing to the Elasticsearch/OpenSearch directly.\n * We want to leave enough time for possible retries.\n */\n //\n else if (this.manager.controller.runtime.isCloseToTimeout(180)) {\n return this.manager.controller.response.continue({\n ...input,\n elasticsearchToDynamoDb: {\n ...input.elasticsearchToDynamoDb,\n index: currentIndex,\n cursor\n }\n });\n }\n\n const result = await this.fetcher.fetch({\n index: currentIndex,\n cursor,\n limit: 100\n });\n\n const syncResult = await this.synchronize.execute({\n done: result.done,\n index: currentIndex,\n items: result.items\n });\n\n if (!syncResult.done && result.cursor) {\n cursor = result.cursor;\n continue;\n }\n cursor = undefined;\n\n const next = indexes.findIndex(index => index === currentIndex) + 1;\n currentIndex = indexes[next];\n }\n\n return this.manager.controller.response.continue({\n ...input,\n elasticsearchToDynamoDb: {\n finished: true\n }\n });\n }\n\n private async fetchAllIndexes(): Promise<NonEmptyArray<string>> {\n const result = await this.indexManager.list();\n if (result.length > 0) {\n return result as NonEmptyArray<string>;\n }\n throw new Error(\"No Elasticsearch / OpenSearch indexes found.\");\n }\n}\n"],"mappings":"AAYA,OAAO,MAAMA,sCAAsC,CAA6B;EAMrEC,WAAWA,CAACC,MAAgC,EAAE;IACjD,IAAI,CAACC,OAAO,GAAGD,MAAM,CAACC,OAAO;IAC7B,IAAI,CAACC,YAAY,GAAGF,MAAM,CAACE,YAAY;IACvC,IAAI,CAACC,WAAW,GAAGH,MAAM,CAACG,WAAW;IACrC,IAAI,CAACC,OAAO,GAAGJ,MAAM,CAACI,OAAO;EACjC;EAEA,MAAaC,GAAGA,CAACC,KAAgC,EAAsC;IACnF,MAAMC,SAAS,GAAGD,KAAK,CAACE,uBAAuB,EAAEC,KAAK;IACtD,IAAIC,MAAM,GAAGJ,KAAK,CAACE,uBAAuB,EAAEE,MAAM;IAClD,MAAMC,OAAO,GAAG,MAAM,IAAI,CAACC,eAAe,CAAC,CAAC;IAE5C,IAAIC,IAAI,GAAG,CAAC;IACZ,IAAIN,SAAS,EAAE;MACXM,IAAI,GAAGF,OAAO,CAACG,SAAS,CAACL,KAAK,IAAIA,KAAK,KAAKF,SAAS,CAAC;IAC1D;IAEA,IAAIQ,YAAY,GAAGJ,OAAO,CAACE,IAAI,CAAC;IAEhC,OAAOE,YAAY,EAAE;MACjB,IAAI,IAAI,CAACd,OAAO,CAACe,UAAU,CAACC,OAAO,CAACC,SAAS,CAAC,CAAC,EAAE;QAC7C,OAAO,IAAI,CAACjB,OAAO,CAACe,UAAU,CAACG,QAAQ,CAACC,OAAO,CAAC,CAAC;MACrD;MACA;AACZ;AACA;AACA;MACY;MAAA,KACK,IAAI,IAAI,CAACnB,OAAO,CAACe,UAAU,CAACC,OAAO,CAACI,gBAAgB,CAAC,GAAG,CAAC,EAAE;QAC5D,OAAO,IAAI,CAACpB,OAAO,CAACe,UAAU,CAACG,QAAQ,CAACG,QAAQ,CAAC;UAC7C,GAAGhB,KAAK;UACRE,uBAAuB,EAAE;YACrB,GAAGF,KAAK,CAACE,uBAAuB;YAChCC,KAAK,EAAEM,YAAY;YACnBL;UACJ;QACJ,CAAC,CAAC;MACN;MAEA,MAAMa,MAAM,GAAG,MAAM,IAAI,CAACnB,OAAO,CAACoB,KAAK,CAAC;QACpCf,KAAK,EAAEM,YAAY;QACnBL,MAAM;QACNe,KAAK,EAAE;MACX,CAAC,CAAC;MAEF,MAAMC,UAAU,GAAG,MAAM,IAAI,CAACvB,WAAW,CAACwB,OAAO,CAAC;QAC9CC,IAAI,EAAEL,MAAM,CAACK,IAAI;QACjBnB,KAAK,EAAEM,YAAY;QACnBc,KAAK,EAAEN,MAAM,CAACM;MAClB,CAAC,CAAC;MAEF,IAAI,CAACH,UAAU,CAACE,IAAI,IAAIL,MAAM,CAACb,MAAM,EAAE;QACnCA,MAAM,GAAGa,MAAM,CAACb,MAAM;QACtB;MACJ;MACAA,MAAM,GAAGoB,SAAS;MAElB,MAAMjB,IAAI,GAAGF,OAAO,CAACG,SAAS,CAACL,KAAK,IAAIA,KAAK,KAAKM,YAAY,CAAC,GAAG,CAAC;MACnEA,YAAY,GAAGJ,OAAO,CAACE,IAAI,CAAC;IAChC;IAEA,OAAO,IAAI,CAACZ,OAAO,CAACe,UAAU,CAACG,QAAQ,CAACG,QAAQ,CAAC;MAC7C,GAAGhB,KAAK;MACRE,uBAAuB,EAAE;QACrBuB,QAAQ,EAAE;MACd;IACJ,CAAC,CAAC;EACN;EAEA,MAAcnB,eAAeA,CAAA,EAAmC;IAC5D,MAAMW,MAAM,GAAG,MAAM,IAAI,CAACrB,YAAY,CAAC8B,IAAI,CAAC,CAAC;IAC7C,IAAIT,MAAM,CAACU,MAAM,GAAG,CAAC,EAAE;MACnB,OAAOV,MAAM;IACjB;IACA,MAAM,IAAIW,KAAK,CAAC,8CAA8C,CAAC;EACnE;AACJ","ignoreList":[]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { PrimitiveValue } from "@webiny/api-elasticsearch/types.js";
|
|
2
|
+
export interface IElasticsearchFetcherFetchResponseItem {
|
|
3
|
+
PK: string;
|
|
4
|
+
SK: string;
|
|
5
|
+
_id: string;
|
|
6
|
+
index: string;
|
|
7
|
+
}
|
|
8
|
+
export interface IElasticsearchFetcherFetchParams {
|
|
9
|
+
index: string;
|
|
10
|
+
cursor?: PrimitiveValue[];
|
|
11
|
+
limit: number;
|
|
12
|
+
}
|
|
13
|
+
export interface IElasticsearchFetcherFetchResponse {
|
|
14
|
+
done: boolean;
|
|
15
|
+
totalCount: number;
|
|
16
|
+
cursor?: PrimitiveValue[];
|
|
17
|
+
items: IElasticsearchFetcherFetchResponseItem[];
|
|
18
|
+
}
|
|
19
|
+
export interface IElasticsearchFetcher {
|
|
20
|
+
fetch(params: IElasticsearchFetcherFetchParams): Promise<IElasticsearchFetcherFetchResponse>;
|
|
21
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["ElasticsearchFetcher.ts"],"sourcesContent":["import type { PrimitiveValue } from \"@webiny/api-elasticsearch/types.js\";\n\nexport interface IElasticsearchFetcherFetchResponseItem {\n PK: string;\n SK: string;\n _id: string;\n index: string;\n}\n\nexport interface IElasticsearchFetcherFetchParams {\n index: string;\n cursor?: PrimitiveValue[];\n limit: number;\n}\n\nexport interface IElasticsearchFetcherFetchResponse {\n done: boolean;\n totalCount: number;\n cursor?: PrimitiveValue[];\n items: IElasticsearchFetcherFetchResponseItem[];\n}\n\nexport interface IElasticsearchFetcher {\n fetch(params: IElasticsearchFetcherFetchParams): Promise<IElasticsearchFetcherFetchResponse>;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface IElasticsearchSynchronizeExecuteParamsItem {
|
|
2
|
+
PK: string;
|
|
3
|
+
SK: string;
|
|
4
|
+
_id: string;
|
|
5
|
+
index: string;
|
|
6
|
+
}
|
|
7
|
+
export interface IElasticsearchSynchronizeExecuteParams {
|
|
8
|
+
done: boolean;
|
|
9
|
+
index: string;
|
|
10
|
+
items: IElasticsearchSynchronizeExecuteParamsItem[];
|
|
11
|
+
}
|
|
12
|
+
export interface IElasticsearchSynchronizeExecuteResponse {
|
|
13
|
+
done: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface IElasticsearchSynchronize {
|
|
16
|
+
execute(params: IElasticsearchSynchronizeExecuteParams): Promise<IElasticsearchSynchronizeExecuteResponse>;
|
|
17
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["ElasticsearchSynchronize.ts"],"sourcesContent":["export interface IElasticsearchSynchronizeExecuteParamsItem {\n PK: string;\n SK: string;\n _id: string;\n index: string;\n}\n\nexport interface IElasticsearchSynchronizeExecuteParams {\n done: boolean;\n index: string;\n items: IElasticsearchSynchronizeExecuteParamsItem[];\n}\n\nexport interface IElasticsearchSynchronizeExecuteResponse {\n done: boolean;\n}\nexport interface IElasticsearchSynchronize {\n execute(\n params: IElasticsearchSynchronizeExecuteParams\n ): Promise<IElasticsearchSynchronizeExecuteResponse>;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
const IGNORED_ES_SEARCH_EXCEPTIONS = ["index_not_found_exception", "search_phase_execution_exception", "illegal_argument_exception"];
|
|
2
|
+
export const shouldIgnoreEsResponseError = error => {
|
|
3
|
+
return IGNORED_ES_SEARCH_EXCEPTIONS.includes(error.message);
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
//# sourceMappingURL=shouldIgnoreEsResponseError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["IGNORED_ES_SEARCH_EXCEPTIONS","shouldIgnoreEsResponseError","error","includes","message"],"sources":["shouldIgnoreEsResponseError.ts"],"sourcesContent":["import type WebinyError from \"@webiny/error\";\n\nconst IGNORED_ES_SEARCH_EXCEPTIONS = [\n \"index_not_found_exception\",\n \"search_phase_execution_exception\",\n \"illegal_argument_exception\"\n];\n\nexport const shouldIgnoreEsResponseError = (error: WebinyError) => {\n return IGNORED_ES_SEARCH_EXCEPTIONS.includes(error.message);\n};\n"],"mappings":"AAEA,MAAMA,4BAA4B,GAAG,CACjC,2BAA2B,EAC3B,kCAAkC,EAClC,4BAA4B,CAC/B;AAED,OAAO,MAAMC,2BAA2B,GAAIC,KAAkB,IAAK;EAC/D,OAAOF,4BAA4B,CAACG,QAAQ,CAACD,KAAK,CAACE,OAAO,CAAC;AAC/D,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { EntityType } from "./getElasticsearchEntityType.js";
|
|
2
|
+
import { DbRegistry } from "../../../abstractions/DbRegistry.js";
|
|
3
|
+
import type { IEntity, IStandardEntityAttributes } from "@webiny/db-dynamodb";
|
|
4
|
+
export interface IGetElasticsearchEntityParams {
|
|
5
|
+
type: EntityType | unknown;
|
|
6
|
+
dbRegistry: DbRegistry.Interface;
|
|
7
|
+
}
|
|
8
|
+
export declare const getElasticsearchEntity: (params: IGetElasticsearchEntityParams) => {
|
|
9
|
+
item: IEntity<IStandardEntityAttributes>;
|
|
10
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { EntityType } from "./getElasticsearchEntityType.js";
|
|
2
|
+
const createPredicate = (app, tags) => {
|
|
3
|
+
return item => {
|
|
4
|
+
return item.app === app && tags.every(tag => item.tags.includes(tag));
|
|
5
|
+
};
|
|
6
|
+
};
|
|
7
|
+
export const getElasticsearchEntity = params => {
|
|
8
|
+
const {
|
|
9
|
+
type,
|
|
10
|
+
dbRegistry
|
|
11
|
+
} = params;
|
|
12
|
+
const getByPredicate = predicate => {
|
|
13
|
+
return dbRegistry.getOneItem(predicate);
|
|
14
|
+
};
|
|
15
|
+
try {
|
|
16
|
+
switch (type) {
|
|
17
|
+
case EntityType.CMS:
|
|
18
|
+
return getByPredicate(createPredicate("cms", ["es"]));
|
|
19
|
+
}
|
|
20
|
+
} catch {}
|
|
21
|
+
throw new Error(`Unknown entity type "${type}".`);
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=getElasticsearchEntity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["EntityType","createPredicate","app","tags","item","every","tag","includes","getElasticsearchEntity","params","type","dbRegistry","getByPredicate","predicate","getOneItem","CMS","Error"],"sources":["getElasticsearchEntity.ts"],"sourcesContent":["import type { NonEmptyArray } from \"@webiny/api/types.js\";\nimport type { IRegistryItem } from \"@webiny/db\";\nimport { EntityType } from \"./getElasticsearchEntityType.js\";\nimport { DbRegistry } from \"~/abstractions/DbRegistry.js\";\nimport type { IEntity, IStandardEntityAttributes } from \"@webiny/db-dynamodb\";\n\nexport interface IGetElasticsearchEntityParams {\n type: EntityType | unknown;\n dbRegistry: DbRegistry.Interface;\n}\n\nconst createPredicate = (app: string, tags: NonEmptyArray<string>) => {\n return (item: IRegistryItem) => {\n return item.app === app && tags.every(tag => item.tags.includes(tag));\n };\n};\n\nexport const getElasticsearchEntity = (params: IGetElasticsearchEntityParams) => {\n const { type, dbRegistry } = params;\n\n const getByPredicate = (predicate: (item: IRegistryItem) => boolean) => {\n return dbRegistry.getOneItem<IEntity<IStandardEntityAttributes>>(predicate);\n };\n\n try {\n switch (type) {\n case EntityType.CMS:\n return getByPredicate(createPredicate(\"cms\", [\"es\"]));\n }\n } catch {}\n throw new Error(`Unknown entity type \"${type}\".`);\n};\n"],"mappings":"AAEA,SAASA,UAAU;AASnB,MAAMC,eAAe,GAAGA,CAACC,GAAW,EAAEC,IAA2B,KAAK;EAClE,OAAQC,IAAmB,IAAK;IAC5B,OAAOA,IAAI,CAACF,GAAG,KAAKA,GAAG,IAAIC,IAAI,CAACE,KAAK,CAACC,GAAG,IAAIF,IAAI,CAACD,IAAI,CAACI,QAAQ,CAACD,GAAG,CAAC,CAAC;EACzE,CAAC;AACL,CAAC;AAED,OAAO,MAAME,sBAAsB,GAAIC,MAAqC,IAAK;EAC7E,MAAM;IAAEC,IAAI;IAAEC;EAAW,CAAC,GAAGF,MAAM;EAEnC,MAAMG,cAAc,GAAIC,SAA2C,IAAK;IACpE,OAAOF,UAAU,CAACG,UAAU,CAAqCD,SAAS,CAAC;EAC/E,CAAC;EAED,IAAI;IACA,QAAQH,IAAI;MACR,KAAKV,UAAU,CAACe,GAAG;QACf,OAAOH,cAAc,CAACX,eAAe,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D;EACJ,CAAC,CAAC,MAAM,CAAC;EACT,MAAM,IAAIe,KAAK,CAAC,wBAAwBN,IAAI,IAAI,CAAC;AACrD,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export let EntityType = /*#__PURE__*/function (EntityType) {
|
|
2
|
+
EntityType["CMS"] = "headless-cms";
|
|
3
|
+
return EntityType;
|
|
4
|
+
}({});
|
|
5
|
+
export const getElasticsearchEntityType = params => {
|
|
6
|
+
if (params.index.includes("-headless-cms-")) {
|
|
7
|
+
return EntityType.CMS;
|
|
8
|
+
}
|
|
9
|
+
throw new Error(`Unknown entity type for item "${JSON.stringify(params)}".`);
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=getElasticsearchEntityType.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["EntityType","getElasticsearchEntityType","params","index","includes","CMS","Error","JSON","stringify"],"sources":["getElasticsearchEntityType.ts"],"sourcesContent":["export enum EntityType {\n CMS = \"headless-cms\"\n}\n\nexport interface IGetElasticsearchEntityTypeParams {\n SK: string;\n index: string;\n}\n\nexport const getElasticsearchEntityType = (\n params: IGetElasticsearchEntityTypeParams\n): EntityType => {\n if (params.index.includes(\"-headless-cms-\")) {\n return EntityType.CMS;\n }\n\n throw new Error(`Unknown entity type for item \"${JSON.stringify(params)}\".`);\n};\n"],"mappings":"AAAA,WAAYA,UAAU,0BAAVA,UAAU;EAAVA,UAAU;EAAA,OAAVA,UAAU;AAAA;AAStB,OAAO,MAAMC,0BAA0B,GACnCC,MAAyC,IAC5B;EACb,IAAIA,MAAM,CAACC,KAAK,CAACC,QAAQ,CAAC,gBAAgB,CAAC,EAAE;IACzC,OAAOJ,UAAU,CAACK,GAAG;EACzB;EAEA,MAAM,IAAIC,KAAK,CAAC,iCAAiCC,IAAI,CAACC,SAAS,CAACN,MAAM,CAAC,IAAI,CAAC;AAChF,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { TableDef } from "@webiny/db-dynamodb/toolbox.js";
|
|
2
|
+
import type { DbRegistry } from "../../../abstractions/DbRegistry.js";
|
|
3
|
+
export interface IGetTableParams {
|
|
4
|
+
dbRegistry: DbRegistry.Interface;
|
|
5
|
+
type: "regular" | "es";
|
|
6
|
+
}
|
|
7
|
+
export declare const getTable: (params: IGetTableParams) => TableDef;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const createPredicate = (app, tags) => {
|
|
2
|
+
return item => {
|
|
3
|
+
return item.app === app && tags.every(tag => item.tags.includes(tag));
|
|
4
|
+
};
|
|
5
|
+
};
|
|
6
|
+
export const getTable = params => {
|
|
7
|
+
const {
|
|
8
|
+
dbRegistry,
|
|
9
|
+
type
|
|
10
|
+
} = params;
|
|
11
|
+
const getByPredicate = predicate => {
|
|
12
|
+
const item = dbRegistry.getOneItem(predicate);
|
|
13
|
+
return item.item;
|
|
14
|
+
};
|
|
15
|
+
const entity = getByPredicate(createPredicate("cms", [type]));
|
|
16
|
+
if (!entity) {
|
|
17
|
+
throw new Error(`Unknown entity type "${type}".`);
|
|
18
|
+
}
|
|
19
|
+
return entity.table;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=getTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createPredicate","app","tags","item","every","tag","includes","getTable","params","dbRegistry","type","getByPredicate","predicate","getOneItem","entity","Error","table"],"sources":["getTable.ts"],"sourcesContent":["import type { Entity, TableDef } from \"@webiny/db-dynamodb/toolbox.js\";\nimport type { NonEmptyArray } from \"@webiny/api/types.js\";\nimport type { IRegistryItem } from \"@webiny/db\";\nimport type { DbRegistry } from \"~/abstractions/DbRegistry.js\";\n\nexport interface IGetTableParams {\n dbRegistry: DbRegistry.Interface;\n type: \"regular\" | \"es\";\n}\n\nconst createPredicate = (app: string, tags: NonEmptyArray<string>) => {\n return (item: IRegistryItem) => {\n return item.app === app && tags.every(tag => item.tags.includes(tag));\n };\n};\n\nexport const getTable = (params: IGetTableParams): TableDef => {\n const { dbRegistry, type } = params;\n\n const getByPredicate = (predicate: (item: IRegistryItem) => boolean) => {\n const item = dbRegistry.getOneItem<Entity>(predicate);\n return item.item;\n };\n\n const entity = getByPredicate(createPredicate(\"cms\", [type]));\n if (!entity) {\n throw new Error(`Unknown entity type \"${type}\".`);\n }\n return entity.table as TableDef;\n};\n"],"mappings":"AAUA,MAAMA,eAAe,GAAGA,CAACC,GAAW,EAAEC,IAA2B,KAAK;EAClE,OAAQC,IAAmB,IAAK;IAC5B,OAAOA,IAAI,CAACF,GAAG,KAAKA,GAAG,IAAIC,IAAI,CAACE,KAAK,CAACC,GAAG,IAAIF,IAAI,CAACD,IAAI,CAACI,QAAQ,CAACD,GAAG,CAAC,CAAC;EACzE,CAAC;AACL,CAAC;AAED,OAAO,MAAME,QAAQ,GAAIC,MAAuB,IAAe;EAC3D,MAAM;IAAEC,UAAU;IAAEC;EAAK,CAAC,GAAGF,MAAM;EAEnC,MAAMG,cAAc,GAAIC,SAA2C,IAAK;IACpE,MAAMT,IAAI,GAAGM,UAAU,CAACI,UAAU,CAASD,SAAS,CAAC;IACrD,OAAOT,IAAI,CAACA,IAAI;EACpB,CAAC;EAED,MAAMW,MAAM,GAAGH,cAAc,CAACX,eAAe,CAAC,KAAK,EAAE,CAACU,IAAI,CAAC,CAAC,CAAC;EAC7D,IAAI,CAACI,MAAM,EAAE;IACT,MAAM,IAAIC,KAAK,CAAC,wBAAwBL,IAAI,IAAI,CAAC;EACrD;EACA,OAAOI,MAAM,CAACE,KAAK;AACvB,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./getElasticsearchEntity.js\";\nexport * from \"./getElasticsearchEntityType.js\";\nexport * from \"./getTable.js\";\n"],"mappings":"AAAA;AACA;AACA","ignoreList":[]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Context, IElasticsearchTaskConfig } from "../../types.js";
|
|
2
|
+
export { DATA_SYNCHRONIZATION_TASK } from "./DataSynchronizationTask.js";
|
|
3
|
+
export declare const createDataSynchronization: (params?: Partial<IElasticsearchTaskConfig>) => import("@webiny/api").ContextPlugin<Context>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { TaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js";
|
|
2
|
+
import { createContextPlugin } from "@webiny/api";
|
|
3
|
+
import { DataSynchronizationTask } from "./DataSynchronizationTask.js";
|
|
4
|
+
import { getClients } from "../../helpers/getClients.js";
|
|
5
|
+
import { ElasticsearchSynchronize } from "./elasticsearch/ElasticsearchSynchronize.js";
|
|
6
|
+
import { TaskController } from "@webiny/api-core/features/task/TaskController/index.js";
|
|
7
|
+
import { DbRegistry } from "../../abstractions/DbRegistry.js";
|
|
8
|
+
import { SynchronizationContext } from "../../abstractions/SynchronizationContext.js";
|
|
9
|
+
export { DATA_SYNCHRONIZATION_TASK } from "./DataSynchronizationTask.js";
|
|
10
|
+
export const createDataSynchronization = params => {
|
|
11
|
+
return createContextPlugin(async context => {
|
|
12
|
+
const {
|
|
13
|
+
documentClient,
|
|
14
|
+
elasticsearchClient
|
|
15
|
+
} = getClients(context, params);
|
|
16
|
+
|
|
17
|
+
// Register the task definition with DbRegistry injected
|
|
18
|
+
context.container.registerFactory(TaskDefinition, () => {
|
|
19
|
+
const elasticsearchSynchronize = context.container.resolveWithDependencies({
|
|
20
|
+
implementation: ElasticsearchSynchronize,
|
|
21
|
+
dependencies: [TaskController, DbRegistry, SynchronizationContext]
|
|
22
|
+
});
|
|
23
|
+
return new DataSynchronizationTask(elasticsearchClient, documentClient, elasticsearchSynchronize);
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["TaskDefinition","createContextPlugin","DataSynchronizationTask","getClients","ElasticsearchSynchronize","TaskController","DbRegistry","SynchronizationContext","DATA_SYNCHRONIZATION_TASK","createDataSynchronization","params","context","documentClient","elasticsearchClient","container","registerFactory","elasticsearchSynchronize","resolveWithDependencies","implementation","dependencies"],"sources":["index.ts"],"sourcesContent":["import { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport type { Context, IElasticsearchTaskConfig } from \"~/types.js\";\nimport { createContextPlugin } from \"@webiny/api\";\nimport { DataSynchronizationTask } from \"./DataSynchronizationTask.js\";\nimport { getClients } from \"~/helpers/getClients.js\";\nimport { ElasticsearchSynchronize } from \"~/tasks/dataSynchronization/elasticsearch/ElasticsearchSynchronize.js\";\nimport { TaskController } from \"@webiny/api-core/features/task/TaskController/index.js\";\nimport { DbRegistry } from \"~/abstractions/DbRegistry.js\";\nimport { SynchronizationContext } from \"~/abstractions/SynchronizationContext.js\";\n\nexport { DATA_SYNCHRONIZATION_TASK } from \"./DataSynchronizationTask.js\";\n\nexport const createDataSynchronization = (params?: Partial<IElasticsearchTaskConfig>) => {\n return createContextPlugin<Context>(async context => {\n const { documentClient, elasticsearchClient } = getClients(context, params);\n\n // Register the task definition with DbRegistry injected\n context.container.registerFactory(TaskDefinition, () => {\n const elasticsearchSynchronize = context.container.resolveWithDependencies({\n implementation: ElasticsearchSynchronize,\n dependencies: [TaskController, DbRegistry, SynchronizationContext]\n });\n\n return new DataSynchronizationTask(\n elasticsearchClient,\n documentClient,\n elasticsearchSynchronize\n );\n });\n });\n};\n"],"mappings":"AAAA,SAASA,cAAc,QAAQ,wDAAwD;AAEvF,SAASC,mBAAmB,QAAQ,aAAa;AACjD,SAASC,uBAAuB;AAChC,SAASC,UAAU;AACnB,SAASC,wBAAwB;AACjC,SAASC,cAAc,QAAQ,wDAAwD;AACvF,SAASC,UAAU;AACnB,SAASC,sBAAsB;AAE/B,SAASC,yBAAyB;AAElC,OAAO,MAAMC,yBAAyB,GAAIC,MAA0C,IAAK;EACrF,OAAOT,mBAAmB,CAAU,MAAMU,OAAO,IAAI;IACjD,MAAM;MAAEC,cAAc;MAAEC;IAAoB,CAAC,GAAGV,UAAU,CAACQ,OAAO,EAAED,MAAM,CAAC;;IAE3E;IACAC,OAAO,CAACG,SAAS,CAACC,eAAe,CAACf,cAAc,EAAE,MAAM;MACpD,MAAMgB,wBAAwB,GAAGL,OAAO,CAACG,SAAS,CAACG,uBAAuB,CAAC;QACvEC,cAAc,EAAEd,wBAAwB;QACxCe,YAAY,EAAE,CAACd,cAAc,EAAEC,UAAU,EAAEC,sBAAsB;MACrE,CAAC,CAAC;MAEF,OAAO,IAAIL,uBAAuB,CAC9BW,mBAAmB,EACnBD,cAAc,EACdI,wBACJ,CAAC;IACL,CAAC,CAAC;EACN,CAAC,CAAC;AACN,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { IManager } from "../../types.js";
|
|
2
|
+
import type { PrimitiveValue } from "@webiny/api-elasticsearch/types.js";
|
|
3
|
+
import type { IIndexManager } from "../../settings/types.js";
|
|
4
|
+
import type { IElasticsearchSynchronize } from "../../tasks/dataSynchronization/elasticsearch/abstractions/ElasticsearchSynchronize.js";
|
|
5
|
+
import type { IElasticsearchFetcher } from "../../tasks/dataSynchronization/elasticsearch/abstractions/ElasticsearchFetcher.js";
|
|
6
|
+
import type { IGenericOutput } from "@webiny/api-core/features/task/TaskService/index.js";
|
|
7
|
+
import { TaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js";
|
|
8
|
+
export interface IDataSynchronizationInputValue {
|
|
9
|
+
finished?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface IDataSynchronizationInputElasticsearchToDynamoDbValue extends IDataSynchronizationInputValue {
|
|
12
|
+
index?: string;
|
|
13
|
+
cursor?: PrimitiveValue[];
|
|
14
|
+
}
|
|
15
|
+
export interface IDataSynchronizationInput {
|
|
16
|
+
flow: "elasticsearchToDynamoDb";
|
|
17
|
+
elasticsearchToDynamoDb?: IDataSynchronizationInputElasticsearchToDynamoDbValue;
|
|
18
|
+
}
|
|
19
|
+
export type IDataSynchronizationOutput = IGenericOutput;
|
|
20
|
+
export type ISynchronizationRunResult = TaskDefinition.ResultContinue<IDataSynchronizationInput> | TaskDefinition.ResultDone<IDataSynchronizationOutput> | TaskDefinition.ResultError | TaskDefinition.ResultAborted;
|
|
21
|
+
export interface ISynchronization {
|
|
22
|
+
run(input: IDataSynchronizationInput): Promise<ISynchronizationRunResult>;
|
|
23
|
+
}
|
|
24
|
+
export interface IElasticsearchSyncParams {
|
|
25
|
+
manager: IDataSynchronizationManager;
|
|
26
|
+
indexManager: IIndexManager;
|
|
27
|
+
synchronize: IElasticsearchSynchronize;
|
|
28
|
+
fetcher: IElasticsearchFetcher;
|
|
29
|
+
}
|
|
30
|
+
export interface IElasticsearchSyncFactory {
|
|
31
|
+
(params: IElasticsearchSyncParams): ISynchronization;
|
|
32
|
+
}
|
|
33
|
+
export interface IFactories {
|
|
34
|
+
/**
|
|
35
|
+
* Delete all the records which are in the Elasticsearch but not in the Elasticsearch DynamoDB table.
|
|
36
|
+
*/
|
|
37
|
+
elasticsearchToDynamoDb: IElasticsearchSyncFactory;
|
|
38
|
+
}
|
|
39
|
+
export type IDataSynchronizationManager = IManager<IDataSynchronizationInput, IDataSynchronizationOutput>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type { IManager } from \"~/types.js\";\nimport type { PrimitiveValue } from \"@webiny/api-elasticsearch/types.js\";\nimport type { IIndexManager } from \"~/settings/types.js\";\nimport type { IElasticsearchSynchronize } from \"~/tasks/dataSynchronization/elasticsearch/abstractions/ElasticsearchSynchronize.js\";\nimport type { IElasticsearchFetcher } from \"~/tasks/dataSynchronization/elasticsearch/abstractions/ElasticsearchFetcher.js\";\nimport type { IGenericOutput } from \"@webiny/api-core/features/task/TaskService/index.js\";\nimport { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\n\nexport interface IDataSynchronizationInputValue {\n finished?: boolean;\n}\n\nexport interface IDataSynchronizationInputElasticsearchToDynamoDbValue\n extends IDataSynchronizationInputValue {\n index?: string;\n cursor?: PrimitiveValue[];\n}\n\nexport interface IDataSynchronizationInput {\n flow: \"elasticsearchToDynamoDb\";\n elasticsearchToDynamoDb?: IDataSynchronizationInputElasticsearchToDynamoDbValue;\n}\n\nexport type IDataSynchronizationOutput = IGenericOutput;\n\nexport type ISynchronizationRunResult =\n | TaskDefinition.ResultContinue<IDataSynchronizationInput>\n | TaskDefinition.ResultDone<IDataSynchronizationOutput>\n | TaskDefinition.ResultError\n | TaskDefinition.ResultAborted;\n\nexport interface ISynchronization {\n run(input: IDataSynchronizationInput): Promise<ISynchronizationRunResult>;\n}\n\nexport interface IElasticsearchSyncParams {\n manager: IDataSynchronizationManager;\n indexManager: IIndexManager;\n synchronize: IElasticsearchSynchronize;\n fetcher: IElasticsearchFetcher;\n}\n\nexport interface IElasticsearchSyncFactory {\n (params: IElasticsearchSyncParams): ISynchronization;\n}\n\nexport interface IFactories {\n /**\n * Delete all the records which are in the Elasticsearch but not in the Elasticsearch DynamoDB table.\n */\n elasticsearchToDynamoDb: IElasticsearchSyncFactory;\n}\n\nexport type IDataSynchronizationManager = IManager<\n IDataSynchronizationInput,\n IDataSynchronizationOutput\n>;\n"],"mappings":"","ignoreList":[]}
|