@webiny/api-elasticsearch-tasks 6.0.0-beta.0 → 6.0.0-rc.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 (152) hide show
  1. package/README.md +10 -9
  2. package/abstractions/DbRegistry.d.ts +11 -0
  3. package/abstractions/DbRegistry.js +4 -0
  4. package/abstractions/DbRegistry.js.map +1 -0
  5. package/abstractions/OpensearchTenantIndexFactory.d.ts +14 -0
  6. package/abstractions/OpensearchTenantIndexFactory.js +4 -0
  7. package/abstractions/OpensearchTenantIndexFactory.js.map +1 -0
  8. package/abstractions/SynchronizationContext.d.ts +6 -0
  9. package/abstractions/SynchronizationContext.js +4 -0
  10. package/abstractions/SynchronizationContext.js.map +1 -0
  11. package/errors/IndexSettingsGetError.d.ts +1 -1
  12. package/errors/IndexSettingsGetError.js +2 -10
  13. package/errors/IndexSettingsGetError.js.map +1 -1
  14. package/errors/IndexSettingsSetError.d.ts +1 -1
  15. package/errors/IndexSettingsSetError.js +2 -10
  16. package/errors/IndexSettingsSetError.js.map +1 -1
  17. package/errors/IndexingDisableError.js +1 -8
  18. package/errors/IndexingDisableError.js.map +1 -1
  19. package/errors/IndexingEnableError.js +1 -8
  20. package/errors/IndexingEnableError.js.map +1 -1
  21. package/errors/index.d.ts +4 -4
  22. package/errors/index.js +4 -49
  23. package/errors/index.js.map +1 -1
  24. package/helpers/getClients.d.ts +5 -0
  25. package/helpers/getClients.js +14 -0
  26. package/helpers/getClients.js.map +1 -0
  27. package/helpers/scan.d.ts +5 -5
  28. package/helpers/scan.js +5 -12
  29. package/helpers/scan.js.map +1 -1
  30. package/index.d.ts +5 -5
  31. package/index.js +14 -25
  32. package/index.js.map +1 -1
  33. package/package.json +33 -34
  34. package/settings/DisableIndexing.d.ts +2 -2
  35. package/settings/DisableIndexing.js +3 -10
  36. package/settings/DisableIndexing.js.map +1 -1
  37. package/settings/EnableIndexing.d.ts +2 -2
  38. package/settings/EnableIndexing.js +5 -11
  39. package/settings/EnableIndexing.js.map +1 -1
  40. package/settings/IndexManager.d.ts +6 -3
  41. package/settings/IndexManager.js +21 -17
  42. package/settings/IndexManager.js.map +1 -1
  43. package/settings/IndexSettingsManager.d.ts +2 -2
  44. package/settings/IndexSettingsManager.js +4 -11
  45. package/settings/IndexSettingsManager.js.map +1 -1
  46. package/settings/index.d.ts +1 -1
  47. package/settings/index.js +1 -16
  48. package/settings/index.js.map +1 -1
  49. package/settings/types.d.ts +1 -1
  50. package/settings/types.js +1 -5
  51. package/settings/types.js.map +1 -1
  52. package/tasks/Manager.d.ts +17 -26
  53. package/tasks/Manager.js +10 -36
  54. package/tasks/Manager.js.map +1 -1
  55. package/tasks/createIndexes/CreateIndexesTask.d.ts +23 -0
  56. package/tasks/createIndexes/CreateIndexesTask.js +53 -0
  57. package/tasks/createIndexes/CreateIndexesTask.js.map +1 -0
  58. package/tasks/createIndexes/CreateIndexesTaskRunner.d.ts +14 -7
  59. package/tasks/createIndexes/CreateIndexesTaskRunner.js +23 -38
  60. package/tasks/createIndexes/CreateIndexesTaskRunner.js.map +1 -1
  61. package/tasks/createIndexes/OnBeforeTrigger.d.ts +10 -0
  62. package/tasks/createIndexes/OnBeforeTrigger.js +51 -0
  63. package/tasks/createIndexes/OnBeforeTrigger.js.map +1 -0
  64. package/tasks/createIndexes/createIndex.d.ts +5 -0
  65. package/tasks/createIndexes/createIndex.js +20 -0
  66. package/tasks/createIndexes/createIndex.js.map +1 -0
  67. package/tasks/createIndexes/index.d.ts +2 -3
  68. package/tasks/createIndexes/index.js +17 -44
  69. package/tasks/createIndexes/index.js.map +1 -1
  70. package/tasks/createIndexes/listIndexes.d.ts +4 -0
  71. package/tasks/createIndexes/listIndexes.js +20 -0
  72. package/tasks/createIndexes/listIndexes.js.map +1 -0
  73. package/tasks/createIndexes/types.js +1 -5
  74. package/tasks/dataSynchronization/DataSynchronizationTask.d.ts +34 -0
  75. package/tasks/dataSynchronization/DataSynchronizationTask.js +69 -0
  76. package/tasks/dataSynchronization/DataSynchronizationTask.js.map +1 -0
  77. package/tasks/dataSynchronization/DataSynchronizationTaskRunner.d.ts +18 -0
  78. package/tasks/dataSynchronization/DataSynchronizationTaskRunner.js +45 -0
  79. package/tasks/dataSynchronization/DataSynchronizationTaskRunner.js.map +1 -0
  80. package/tasks/dataSynchronization/createFactories.d.ts +2 -0
  81. package/tasks/dataSynchronization/createFactories.js +10 -0
  82. package/tasks/dataSynchronization/createFactories.js.map +1 -0
  83. package/tasks/dataSynchronization/elasticsearch/ElasticsearchFetcher.d.ts +10 -0
  84. package/tasks/dataSynchronization/elasticsearch/ElasticsearchFetcher.js +91 -0
  85. package/tasks/dataSynchronization/elasticsearch/ElasticsearchFetcher.js.map +1 -0
  86. package/tasks/dataSynchronization/elasticsearch/ElasticsearchSynchronize.d.ts +12 -0
  87. package/tasks/dataSynchronization/elasticsearch/ElasticsearchSynchronize.js +70 -0
  88. package/tasks/dataSynchronization/elasticsearch/ElasticsearchSynchronize.js.map +1 -0
  89. package/tasks/dataSynchronization/elasticsearch/ElasticsearchToDynamoDbSynchronization.d.ts +10 -0
  90. package/tasks/dataSynchronization/elasticsearch/ElasticsearchToDynamoDbSynchronization.js +70 -0
  91. package/tasks/dataSynchronization/elasticsearch/ElasticsearchToDynamoDbSynchronization.js.map +1 -0
  92. package/tasks/dataSynchronization/elasticsearch/abstractions/ElasticsearchFetcher.d.ts +21 -0
  93. package/tasks/dataSynchronization/elasticsearch/abstractions/ElasticsearchFetcher.js +3 -0
  94. package/tasks/dataSynchronization/elasticsearch/abstractions/ElasticsearchFetcher.js.map +1 -0
  95. package/tasks/dataSynchronization/elasticsearch/abstractions/ElasticsearchSynchronize.d.ts +17 -0
  96. package/tasks/dataSynchronization/elasticsearch/abstractions/ElasticsearchSynchronize.js +3 -0
  97. package/tasks/dataSynchronization/elasticsearch/abstractions/ElasticsearchSynchronize.js.map +1 -0
  98. package/tasks/dataSynchronization/elasticsearch/shouldIgnoreEsResponseError.d.ts +2 -0
  99. package/tasks/dataSynchronization/elasticsearch/shouldIgnoreEsResponseError.js +6 -0
  100. package/tasks/dataSynchronization/elasticsearch/shouldIgnoreEsResponseError.js.map +1 -0
  101. package/tasks/dataSynchronization/entities/getElasticsearchEntity.d.ts +10 -0
  102. package/tasks/dataSynchronization/entities/getElasticsearchEntity.js +24 -0
  103. package/tasks/dataSynchronization/entities/getElasticsearchEntity.js.map +1 -0
  104. package/tasks/dataSynchronization/entities/getElasticsearchEntityType.d.ts +8 -0
  105. package/tasks/dataSynchronization/entities/getElasticsearchEntityType.js +12 -0
  106. package/tasks/dataSynchronization/entities/getElasticsearchEntityType.js.map +1 -0
  107. package/tasks/dataSynchronization/entities/getTable.d.ts +7 -0
  108. package/tasks/dataSynchronization/entities/getTable.js +22 -0
  109. package/tasks/dataSynchronization/entities/getTable.js.map +1 -0
  110. package/tasks/dataSynchronization/entities/index.d.ts +3 -0
  111. package/tasks/dataSynchronization/entities/index.js +5 -0
  112. package/tasks/dataSynchronization/entities/index.js.map +1 -0
  113. package/tasks/dataSynchronization/index.d.ts +3 -0
  114. package/tasks/dataSynchronization/index.js +28 -0
  115. package/tasks/dataSynchronization/index.js.map +1 -0
  116. package/tasks/dataSynchronization/types.d.ts +39 -0
  117. package/tasks/dataSynchronization/types.js +3 -0
  118. package/tasks/dataSynchronization/types.js.map +1 -0
  119. package/tasks/enableIndexing/EnableIndexingTaskRunner.d.ts +6 -6
  120. package/tasks/enableIndexing/EnableIndexingTaskRunner.js +5 -13
  121. package/tasks/enableIndexing/EnableIndexingTaskRunner.js.map +1 -1
  122. package/tasks/enableIndexing/index.d.ts +2 -3
  123. package/tasks/enableIndexing/index.js +40 -44
  124. package/tasks/enableIndexing/index.js.map +1 -1
  125. package/tasks/enableIndexing/types.js +1 -5
  126. package/tasks/index.d.ts +4 -3
  127. package/tasks/index.js +4 -38
  128. package/tasks/index.js.map +1 -1
  129. package/tasks/reindexing/ReindexingTaskRunner.d.ts +5 -6
  130. package/tasks/reindexing/ReindexingTaskRunner.js +23 -27
  131. package/tasks/reindexing/ReindexingTaskRunner.js.map +1 -1
  132. package/tasks/reindexing/index.d.ts +1 -1
  133. package/tasks/reindexing/index.js +1 -16
  134. package/tasks/reindexing/index.js.map +1 -1
  135. package/tasks/reindexing/reindexingTaskDefinition.d.ts +2 -2
  136. package/tasks/reindexing/reindexingTaskDefinition.js +43 -42
  137. package/tasks/reindexing/reindexingTaskDefinition.js.map +1 -1
  138. package/types.d.ts +22 -22
  139. package/types.js +1 -5
  140. package/types.js.map +1 -1
  141. package/definitions/entry.d.ts +0 -7
  142. package/definitions/entry.js +0 -36
  143. package/definitions/entry.js.map +0 -1
  144. package/definitions/index.d.ts +0 -2
  145. package/definitions/index.js +0 -29
  146. package/definitions/index.js.map +0 -1
  147. package/definitions/table.d.ts +0 -7
  148. package/definitions/table.js +0 -23
  149. package/definitions/table.js.map +0 -1
  150. package/tasks/createIndexes/CreateElasticsearchIndexTaskPlugin.d.ts +0 -23
  151. package/tasks/createIndexes/CreateElasticsearchIndexTaskPlugin.js +0 -25
  152. package/tasks/createIndexes/CreateElasticsearchIndexTaskPlugin.js.map +0 -1
@@ -1,37 +1,22 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.CreateIndexesTaskRunner = void 0;
7
- var _CreateElasticsearchIndexTaskPlugin = require("./CreateElasticsearchIndexTaskPlugin");
8
- class CreateIndexesTaskRunner {
9
- constructor(manager, indexManager) {
10
- this.manager = manager;
1
+ import { listIndexes } from "./listIndexes.js";
2
+ import { createIndexFactory } from "./createIndex.js";
3
+ export class CreateIndexesTaskRunner {
4
+ constructor(tenantContext, listTenantsUseCase, indexFactories, manager, indexManager) {
5
+ this.tenantContext = tenantContext;
6
+ this.listTenantsUseCase = listTenantsUseCase;
7
+ this.indexFactories = indexFactories;
11
8
  this.indexManager = indexManager;
9
+ this.taskController = manager.controller;
12
10
  }
13
11
  async execute(matching, done) {
14
- const plugins = this.manager.context.plugins.byType(_CreateElasticsearchIndexTaskPlugin.CreateElasticsearchIndexTaskPlugin.type);
15
- if (plugins.length === 0) {
16
- return this.manager.response.done("No index plugins found.");
17
- }
18
- const indexes = [];
19
- const tenants = await this.manager.context.tenancy.listTenants();
20
- for (const tenant of tenants) {
21
- const locales = await this.manager.context.i18n.getLocales();
22
- for (const locale of locales) {
23
- for (const plugin of plugins) {
24
- const results = await plugin.getIndexList({
25
- context: this.manager.context,
26
- tenant: tenant.id,
27
- locale: locale.code
28
- });
29
- indexes.push(...results);
30
- }
31
- }
12
+ if (this.indexFactories.length === 0) {
13
+ return this.taskController.response.done("No index plugins found.");
32
14
  }
15
+ const tenantsResult = await this.listTenantsUseCase.execute();
16
+ const tenants = tenantsResult.value;
17
+ const indexes = await listIndexes(this.tenantContext, tenants, this.indexFactories);
33
18
  if (indexes.length === 0) {
34
- return this.manager.response.done("No indexes found.");
19
+ return this.taskController.response.done("No indexes found.");
35
20
  }
36
21
  const isIndexAllowed = index => {
37
22
  if (typeof matching !== "string" || !matching) {
@@ -39,14 +24,15 @@ class CreateIndexesTaskRunner {
39
24
  }
40
25
  return index.includes(matching);
41
26
  };
27
+ const createIndex = createIndexFactory(this.indexManager);
42
28
  for (const {
43
29
  index,
44
30
  settings
45
31
  } of indexes) {
46
- if (this.manager.isAborted()) {
47
- return this.manager.response.aborted();
48
- } else if (this.manager.isCloseToTimeout()) {
49
- return this.manager.response.continue({
32
+ if (this.taskController.runtime.isAborted()) {
33
+ return this.taskController.response.aborted();
34
+ } else if (this.taskController.runtime.isCloseToTimeout()) {
35
+ return this.taskController.response.continue({
50
36
  done
51
37
  });
52
38
  }
@@ -61,25 +47,24 @@ class CreateIndexesTaskRunner {
61
47
  continue;
62
48
  }
63
49
  done.push(index);
64
- await this.indexManager.createIndex(index, settings);
65
- await this.manager.store.addInfoLog({
50
+ await createIndex.create(index, settings);
51
+ await this.taskController.logger.info({
66
52
  message: `Index "${index}" created.`,
67
53
  data: {
68
54
  index
69
55
  }
70
56
  });
71
57
  } catch (ex) {
72
- await this.manager.store.addErrorLog({
58
+ await this.taskController.logger.error({
73
59
  message: `Failed to create index "${index}".`,
74
60
  error: ex
75
61
  });
76
62
  }
77
63
  }
78
- return this.manager.response.done("Indexes created.", {
64
+ return this.taskController.response.done("Indexes created.", {
79
65
  done
80
66
  });
81
67
  }
82
68
  }
83
- exports.CreateIndexesTaskRunner = CreateIndexesTaskRunner;
84
69
 
85
70
  //# sourceMappingURL=CreateIndexesTaskRunner.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_CreateElasticsearchIndexTaskPlugin","require","CreateIndexesTaskRunner","constructor","manager","indexManager","execute","matching","done","plugins","context","byType","CreateElasticsearchIndexTaskPlugin","type","length","response","indexes","tenants","tenancy","listTenants","tenant","locales","i18n","getLocales","locale","plugin","results","getIndexList","id","code","push","isIndexAllowed","index","includes","settings","isAborted","aborted","isCloseToTimeout","continue","exists","indexExists","createIndex","store","addInfoLog","message","data","ex","addErrorLog","error","exports"],"sources":["CreateIndexesTaskRunner.ts"],"sourcesContent":["import { Manager } from \"~/tasks/Manager\";\nimport { IndexManager } from \"~/settings\";\nimport { ITaskResponseResult } from \"@webiny/tasks\";\nimport {\n CreateElasticsearchIndexTaskPlugin,\n CreateElasticsearchIndexTaskPluginIndex\n} from \"./CreateElasticsearchIndexTaskPlugin\";\nimport { Context } from \"~/types\";\n\nexport class CreateIndexesTaskRunner {\n private readonly manager: Manager;\n private readonly indexManager: IndexManager;\n\n public constructor(manager: Manager, indexManager: IndexManager) {\n this.manager = manager;\n\n this.indexManager = indexManager;\n }\n\n public async execute(\n matching: string | undefined,\n done: string[]\n ): Promise<ITaskResponseResult> {\n const plugins = this.manager.context.plugins.byType<\n CreateElasticsearchIndexTaskPlugin<Context>\n >(CreateElasticsearchIndexTaskPlugin.type);\n if (plugins.length === 0) {\n return this.manager.response.done(\"No index plugins found.\");\n }\n const indexes: CreateElasticsearchIndexTaskPluginIndex[] = [];\n\n const tenants = await this.manager.context.tenancy.listTenants();\n\n for (const tenant of tenants) {\n const locales = await this.manager.context.i18n.getLocales();\n for (const locale of locales) {\n for (const plugin of plugins) {\n const results = await plugin.getIndexList({\n context: this.manager.context,\n tenant: tenant.id,\n locale: locale.code\n });\n indexes.push(...results);\n }\n }\n }\n if (indexes.length === 0) {\n return this.manager.response.done(\"No indexes found.\");\n }\n\n const isIndexAllowed = (index: string): boolean => {\n if (typeof matching !== \"string\" || !matching) {\n return true;\n }\n return index.includes(matching);\n };\n\n for (const { index, settings } of indexes) {\n if (this.manager.isAborted()) {\n return this.manager.response.aborted();\n } else if (this.manager.isCloseToTimeout()) {\n return this.manager.response.continue({\n done\n });\n }\n try {\n if (done.includes(index)) {\n continue;\n } else if (isIndexAllowed(index) === false) {\n continue;\n }\n const exists = await this.indexManager.indexExists(index);\n if (exists) {\n continue;\n }\n done.push(index);\n await this.indexManager.createIndex(index, settings);\n await this.manager.store.addInfoLog({\n message: `Index \"${index}\" created.`,\n data: {\n index\n }\n });\n } catch (ex) {\n await this.manager.store.addErrorLog({\n message: `Failed to create index \"${index}\".`,\n error: ex\n });\n }\n }\n\n return this.manager.response.done(\"Indexes created.\", {\n done\n });\n }\n}\n"],"mappings":";;;;;;AAGA,IAAAA,mCAAA,GAAAC,OAAA;AAMO,MAAMC,uBAAuB,CAAC;EAI1BC,WAAWA,CAACC,OAAgB,EAAEC,YAA0B,EAAE;IAC7D,IAAI,CAACD,OAAO,GAAGA,OAAO;IAEtB,IAAI,CAACC,YAAY,GAAGA,YAAY;EACpC;EAEA,MAAaC,OAAOA,CAChBC,QAA4B,EAC5BC,IAAc,EACc;IAC5B,MAAMC,OAAO,GAAG,IAAI,CAACL,OAAO,CAACM,OAAO,CAACD,OAAO,CAACE,MAAM,CAEjDC,sEAAkC,CAACC,IAAI,CAAC;IAC1C,IAAIJ,OAAO,CAACK,MAAM,KAAK,CAAC,EAAE;MACtB,OAAO,IAAI,CAACV,OAAO,CAACW,QAAQ,CAACP,IAAI,CAAC,yBAAyB,CAAC;IAChE;IACA,MAAMQ,OAAkD,GAAG,EAAE;IAE7D,MAAMC,OAAO,GAAG,MAAM,IAAI,CAACb,OAAO,CAACM,OAAO,CAACQ,OAAO,CAACC,WAAW,CAAC,CAAC;IAEhE,KAAK,MAAMC,MAAM,IAAIH,OAAO,EAAE;MAC1B,MAAMI,OAAO,GAAG,MAAM,IAAI,CAACjB,OAAO,CAACM,OAAO,CAACY,IAAI,CAACC,UAAU,CAAC,CAAC;MAC5D,KAAK,MAAMC,MAAM,IAAIH,OAAO,EAAE;QAC1B,KAAK,MAAMI,MAAM,IAAIhB,OAAO,EAAE;UAC1B,MAAMiB,OAAO,GAAG,MAAMD,MAAM,CAACE,YAAY,CAAC;YACtCjB,OAAO,EAAE,IAAI,CAACN,OAAO,CAACM,OAAO;YAC7BU,MAAM,EAAEA,MAAM,CAACQ,EAAE;YACjBJ,MAAM,EAAEA,MAAM,CAACK;UACnB,CAAC,CAAC;UACFb,OAAO,CAACc,IAAI,CAAC,GAAGJ,OAAO,CAAC;QAC5B;MACJ;IACJ;IACA,IAAIV,OAAO,CAACF,MAAM,KAAK,CAAC,EAAE;MACtB,OAAO,IAAI,CAACV,OAAO,CAACW,QAAQ,CAACP,IAAI,CAAC,mBAAmB,CAAC;IAC1D;IAEA,MAAMuB,cAAc,GAAIC,KAAa,IAAc;MAC/C,IAAI,OAAOzB,QAAQ,KAAK,QAAQ,IAAI,CAACA,QAAQ,EAAE;QAC3C,OAAO,IAAI;MACf;MACA,OAAOyB,KAAK,CAACC,QAAQ,CAAC1B,QAAQ,CAAC;IACnC,CAAC;IAED,KAAK,MAAM;MAAEyB,KAAK;MAAEE;IAAS,CAAC,IAAIlB,OAAO,EAAE;MACvC,IAAI,IAAI,CAACZ,OAAO,CAAC+B,SAAS,CAAC,CAAC,EAAE;QAC1B,OAAO,IAAI,CAAC/B,OAAO,CAACW,QAAQ,CAACqB,OAAO,CAAC,CAAC;MAC1C,CAAC,MAAM,IAAI,IAAI,CAAChC,OAAO,CAACiC,gBAAgB,CAAC,CAAC,EAAE;QACxC,OAAO,IAAI,CAACjC,OAAO,CAACW,QAAQ,CAACuB,QAAQ,CAAC;UAClC9B;QACJ,CAAC,CAAC;MACN;MACA,IAAI;QACA,IAAIA,IAAI,CAACyB,QAAQ,CAACD,KAAK,CAAC,EAAE;UACtB;QACJ,CAAC,MAAM,IAAID,cAAc,CAACC,KAAK,CAAC,KAAK,KAAK,EAAE;UACxC;QACJ;QACA,MAAMO,MAAM,GAAG,MAAM,IAAI,CAAClC,YAAY,CAACmC,WAAW,CAACR,KAAK,CAAC;QACzD,IAAIO,MAAM,EAAE;UACR;QACJ;QACA/B,IAAI,CAACsB,IAAI,CAACE,KAAK,CAAC;QAChB,MAAM,IAAI,CAAC3B,YAAY,CAACoC,WAAW,CAACT,KAAK,EAAEE,QAAQ,CAAC;QACpD,MAAM,IAAI,CAAC9B,OAAO,CAACsC,KAAK,CAACC,UAAU,CAAC;UAChCC,OAAO,EAAG,UAASZ,KAAM,YAAW;UACpCa,IAAI,EAAE;YACFb;UACJ;QACJ,CAAC,CAAC;MACN,CAAC,CAAC,OAAOc,EAAE,EAAE;QACT,MAAM,IAAI,CAAC1C,OAAO,CAACsC,KAAK,CAACK,WAAW,CAAC;UACjCH,OAAO,EAAG,2BAA0BZ,KAAM,IAAG;UAC7CgB,KAAK,EAAEF;QACX,CAAC,CAAC;MACN;IACJ;IAEA,OAAO,IAAI,CAAC1C,OAAO,CAACW,QAAQ,CAACP,IAAI,CAAC,kBAAkB,EAAE;MAClDA;IACJ,CAAC,CAAC;EACN;AACJ;AAACyC,OAAA,CAAA/C,uBAAA,GAAAA,uBAAA","ignoreList":[]}
1
+ {"version":3,"names":["listIndexes","createIndexFactory","CreateIndexesTaskRunner","constructor","tenantContext","listTenantsUseCase","indexFactories","manager","indexManager","taskController","controller","execute","matching","done","length","response","tenantsResult","tenants","value","indexes","isIndexAllowed","index","includes","createIndex","settings","runtime","isAborted","aborted","isCloseToTimeout","continue","exists","indexExists","push","create","logger","info","message","data","ex","error"],"sources":["CreateIndexesTaskRunner.ts"],"sourcesContent":["import type { Manager } from \"~/tasks/Manager.js\";\nimport type { IndexManager } from \"~/settings/index.js\";\nimport type { IElasticsearchCreateIndexesTaskInput } from \"./types.js\";\nimport { listIndexes } from \"./listIndexes.js\";\nimport { createIndexFactory } from \"./createIndex.js\";\nimport { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\nimport { OpensearchTenantIndexFactory } from \"~/abstractions/OpensearchTenantIndexFactory.js\";\nimport { ListTenantsUseCase } from \"@webiny/api-core/features/tenancy/ListTenants/index.js\";\nimport { TaskController } from \"@webiny/api-core/features/task/TaskController/index.js\";\n\nexport class CreateIndexesTaskRunner {\n private taskController: TaskController.Interface;\n\n public constructor(\n private tenantContext: TenantContext.Interface,\n private listTenantsUseCase: ListTenantsUseCase.Interface,\n private indexFactories: OpensearchTenantIndexFactory.Interface[],\n manager: Manager<IElasticsearchCreateIndexesTaskInput>,\n private indexManager: IndexManager\n ) {\n this.taskController = manager.controller;\n }\n\n public async execute(\n matching: string | undefined,\n done: string[]\n ): Promise<TaskDefinition.Result> {\n if (this.indexFactories.length === 0) {\n return this.taskController.response.done(\"No index plugins found.\");\n }\n\n const tenantsResult = await this.listTenantsUseCase.execute();\n const tenants = tenantsResult.value;\n\n const indexes = await listIndexes(this.tenantContext, tenants, this.indexFactories);\n\n if (indexes.length === 0) {\n return this.taskController.response.done(\"No indexes found.\");\n }\n\n const isIndexAllowed = (index: string): boolean => {\n if (typeof matching !== \"string\" || !matching) {\n return true;\n }\n return index.includes(matching);\n };\n\n const createIndex = createIndexFactory(this.indexManager);\n\n for (const { index, settings } of indexes) {\n if (this.taskController.runtime.isAborted()) {\n return this.taskController.response.aborted();\n } else if (this.taskController.runtime.isCloseToTimeout()) {\n return this.taskController.response.continue({\n done\n });\n }\n try {\n if (done.includes(index)) {\n continue;\n } else if (isIndexAllowed(index) === false) {\n continue;\n }\n const exists = await this.indexManager.indexExists(index);\n if (exists) {\n continue;\n }\n done.push(index);\n await createIndex.create(index, settings);\n await this.taskController.logger.info({\n message: `Index \"${index}\" created.`,\n data: { index }\n });\n } catch (ex) {\n await this.taskController.logger.error({\n message: `Failed to create index \"${index}\".`,\n error: ex\n });\n }\n }\n\n return this.taskController.response.done(\"Indexes created.\", {\n done\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,10 @@
1
+ import type { IndexManager } from "../../settings/index.js";
2
+ import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js";
3
+ import { OpensearchTenantIndexFactory } from "../../abstractions/OpensearchTenantIndexFactory.js";
4
+ export declare class OnBeforeTrigger {
5
+ private indexManager;
6
+ private tenantContext;
7
+ private indexFactories;
8
+ constructor(indexManager: IndexManager, tenantContext: TenantContext.Interface, indexFactories: OpensearchTenantIndexFactory.Interface[]);
9
+ run(targets: string[] | undefined): Promise<void>;
10
+ }
@@ -0,0 +1,51 @@
1
+ import { listIndexes } from "./listIndexes.js";
2
+ import { createIndexFactory } from "./createIndex.js";
3
+ export class OnBeforeTrigger {
4
+ constructor(indexManager, tenantContext, indexFactories) {
5
+ this.indexManager = indexManager;
6
+ this.tenantContext = tenantContext;
7
+ this.indexFactories = indexFactories;
8
+ }
9
+ async run(targets) {
10
+ const tenant = this.tenantContext.getTenant();
11
+ if (!tenant) {
12
+ throw new Error("Something went wrong, tenant not found when triggering a task.");
13
+ }
14
+ try {
15
+ const allIndexes = await listIndexes(this.tenantContext, [tenant], this.indexFactories);
16
+ const indexes = allIndexes.filter(index => {
17
+ if (!targets?.length) {
18
+ return true;
19
+ }
20
+ for (const t of targets) {
21
+ if (index.index.includes(t)) {
22
+ return true;
23
+ }
24
+ }
25
+ return false;
26
+ });
27
+ if (indexes.length === 0) {
28
+ console.warn("There are no indexes to create before triggering the Create indexes task.", {
29
+ targets
30
+ });
31
+ return;
32
+ }
33
+ const createIndex = createIndexFactory(this.indexManager);
34
+ for (const {
35
+ index,
36
+ settings
37
+ } of indexes) {
38
+ try {
39
+ console.log("Creating index", index);
40
+ await createIndex.createIfNotExists(index, settings);
41
+ } catch (ex) {
42
+ console.error(`Failed to create index "${index}".`, ex);
43
+ }
44
+ }
45
+ } catch (ex) {
46
+ console.error(ex);
47
+ }
48
+ }
49
+ }
50
+
51
+ //# sourceMappingURL=OnBeforeTrigger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["listIndexes","createIndexFactory","OnBeforeTrigger","constructor","indexManager","tenantContext","indexFactories","run","targets","tenant","getTenant","Error","allIndexes","indexes","filter","index","length","t","includes","console","warn","createIndex","settings","log","createIfNotExists","ex","error"],"sources":["OnBeforeTrigger.ts"],"sourcesContent":["import type { IndexManager } from \"~/settings/index.js\";\nimport { listIndexes } from \"./listIndexes.js\";\nimport { createIndexFactory } from \"~/tasks/createIndexes/createIndex.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\nimport { OpensearchTenantIndexFactory } from \"~/abstractions/OpensearchTenantIndexFactory.js\";\n\nexport class OnBeforeTrigger {\n public constructor(\n private indexManager: IndexManager,\n private tenantContext: TenantContext.Interface,\n private indexFactories: OpensearchTenantIndexFactory.Interface[]\n ) {}\n\n public async run(targets: string[] | undefined): Promise<void> {\n const tenant = this.tenantContext.getTenant();\n if (!tenant) {\n throw new Error(\"Something went wrong, tenant not found when triggering a task.\");\n }\n\n try {\n const allIndexes = await listIndexes(this.tenantContext, [tenant], this.indexFactories);\n\n const indexes = allIndexes.filter(index => {\n if (!targets?.length) {\n return true;\n }\n for (const t of targets) {\n if (index.index.includes(t)) {\n return true;\n }\n }\n return false;\n });\n if (indexes.length === 0) {\n console.warn(\n \"There are no indexes to create before triggering the Create indexes task.\",\n {\n targets\n }\n );\n return;\n }\n\n const createIndex = createIndexFactory(this.indexManager);\n\n for (const { index, settings } of indexes) {\n try {\n console.log(\"Creating index\", index);\n await createIndex.createIfNotExists(index, settings);\n } catch (ex) {\n console.error(`Failed to create index \"${index}\".`, ex);\n }\n }\n } catch (ex) {\n console.error(ex);\n }\n }\n}\n"],"mappings":"AACA,SAASA,WAAW;AACpB,SAASC,kBAAkB;AAI3B,OAAO,MAAMC,eAAe,CAAC;EAClBC,WAAWA,CACNC,YAA0B,EAC1BC,aAAsC,EACtCC,cAAwD,EAClE;IAAA,KAHUF,YAA0B,GAA1BA,YAA0B;IAAA,KAC1BC,aAAsC,GAAtCA,aAAsC;IAAA,KACtCC,cAAwD,GAAxDA,cAAwD;EACjE;EAEH,MAAaC,GAAGA,CAACC,OAA6B,EAAiB;IAC3D,MAAMC,MAAM,GAAG,IAAI,CAACJ,aAAa,CAACK,SAAS,CAAC,CAAC;IAC7C,IAAI,CAACD,MAAM,EAAE;MACT,MAAM,IAAIE,KAAK,CAAC,gEAAgE,CAAC;IACrF;IAEA,IAAI;MACA,MAAMC,UAAU,GAAG,MAAMZ,WAAW,CAAC,IAAI,CAACK,aAAa,EAAE,CAACI,MAAM,CAAC,EAAE,IAAI,CAACH,cAAc,CAAC;MAEvF,MAAMO,OAAO,GAAGD,UAAU,CAACE,MAAM,CAACC,KAAK,IAAI;QACvC,IAAI,CAACP,OAAO,EAAEQ,MAAM,EAAE;UAClB,OAAO,IAAI;QACf;QACA,KAAK,MAAMC,CAAC,IAAIT,OAAO,EAAE;UACrB,IAAIO,KAAK,CAACA,KAAK,CAACG,QAAQ,CAACD,CAAC,CAAC,EAAE;YACzB,OAAO,IAAI;UACf;QACJ;QACA,OAAO,KAAK;MAChB,CAAC,CAAC;MACF,IAAIJ,OAAO,CAACG,MAAM,KAAK,CAAC,EAAE;QACtBG,OAAO,CAACC,IAAI,CACR,2EAA2E,EAC3E;UACIZ;QACJ,CACJ,CAAC;QACD;MACJ;MAEA,MAAMa,WAAW,GAAGpB,kBAAkB,CAAC,IAAI,CAACG,YAAY,CAAC;MAEzD,KAAK,MAAM;QAAEW,KAAK;QAAEO;MAAS,CAAC,IAAIT,OAAO,EAAE;QACvC,IAAI;UACAM,OAAO,CAACI,GAAG,CAAC,gBAAgB,EAAER,KAAK,CAAC;UACpC,MAAMM,WAAW,CAACG,iBAAiB,CAACT,KAAK,EAAEO,QAAQ,CAAC;QACxD,CAAC,CAAC,OAAOG,EAAE,EAAE;UACTN,OAAO,CAACO,KAAK,CAAC,2BAA2BX,KAAK,IAAI,EAAEU,EAAE,CAAC;QAC3D;MACJ;IACJ,CAAC,CAAC,OAAOA,EAAE,EAAE;MACTN,OAAO,CAACO,KAAK,CAACD,EAAE,CAAC;IACrB;EACJ;AACJ","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ import type { IndexManager } from "../../settings/index.js";
2
+ export declare const createIndexFactory: (manager: IndexManager) => {
3
+ create: (index: string, settings?: Record<string, any>) => Promise<void>;
4
+ createIfNotExists: (index: string, settings?: Record<string, any>) => Promise<void>;
5
+ };
@@ -0,0 +1,20 @@
1
+ export const createIndexFactory = manager => {
2
+ return {
3
+ create: async (index, settings) => {
4
+ return manager.createIndex(index, settings);
5
+ },
6
+ createIfNotExists: async (index, settings) => {
7
+ try {
8
+ const exists = await manager.indexExists(index);
9
+ if (exists) {
10
+ return;
11
+ }
12
+ } catch {
13
+ return;
14
+ }
15
+ return await manager.createIndex(index, settings);
16
+ }
17
+ };
18
+ };
19
+
20
+ //# sourceMappingURL=createIndex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createIndexFactory","manager","create","index","settings","createIndex","createIfNotExists","exists","indexExists"],"sources":["createIndex.ts"],"sourcesContent":["import type { IndexManager } from \"~/settings/index.js\";\n\nexport const createIndexFactory = (manager: IndexManager) => {\n return {\n create: async (index: string, settings?: Record<string, any>): Promise<void> => {\n return manager.createIndex(index, settings);\n },\n createIfNotExists: async (index: string, settings?: Record<string, any>): Promise<void> => {\n try {\n const exists = await manager.indexExists(index);\n if (exists) {\n return;\n }\n } catch {\n return;\n }\n\n return await manager.createIndex(index, settings);\n }\n };\n};\n"],"mappings":"AAEA,OAAO,MAAMA,kBAAkB,GAAIC,OAAqB,IAAK;EACzD,OAAO;IACHC,MAAM,EAAE,MAAAA,CAAOC,KAAa,EAAEC,QAA8B,KAAoB;MAC5E,OAAOH,OAAO,CAACI,WAAW,CAACF,KAAK,EAAEC,QAAQ,CAAC;IAC/C,CAAC;IACDE,iBAAiB,EAAE,MAAAA,CAAOH,KAAa,EAAEC,QAA8B,KAAoB;MACvF,IAAI;QACA,MAAMG,MAAM,GAAG,MAAMN,OAAO,CAACO,WAAW,CAACL,KAAK,CAAC;QAC/C,IAAII,MAAM,EAAE;UACR;QACJ;MACJ,CAAC,CAAC,MAAM;QACJ;MACJ;MAEA,OAAO,MAAMN,OAAO,CAACI,WAAW,CAACF,KAAK,EAAEC,QAAQ,CAAC;IACrD;EACJ,CAAC;AACL,CAAC","ignoreList":[]}
@@ -1,3 +1,2 @@
1
- import { Context, IElasticsearchTaskConfig } from "../../types";
2
- import { IElasticsearchCreateIndexesTaskInput } from "./types";
3
- export declare const createIndexesTaskDefinition: (params?: IElasticsearchTaskConfig) => import("@webiny/tasks").TaskDefinitionPlugin<Context, IElasticsearchCreateIndexesTaskInput, import("@webiny/tasks").ITaskResponseDoneResultOutput>;
1
+ import type { Context, IElasticsearchTaskConfig } from "../../types.js";
2
+ export declare const createIndexesTaskDefinition: (params?: Partial<IElasticsearchTaskConfig>) => import("@webiny/api").ContextPlugin<Context>;
@@ -1,49 +1,22 @@
1
- "use strict";
1
+ import { TaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js";
2
+ import { createContextPlugin } from "@webiny/api";
3
+ import { getClients } from "../../helpers/getClients.js";
4
+ import { CreateIndexesTaskDefinition } from "./CreateIndexesTask.js";
5
+ import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js";
6
+ import { ListTenantsUseCase } from "@webiny/api-core/features/tenancy/ListTenants/index.js";
7
+ import { OpensearchTenantIndexFactory } from "../../abstractions/OpensearchTenantIndexFactory.js";
8
+ export const createIndexesTaskDefinition = params => {
9
+ return createContextPlugin(async context => {
10
+ const clients = getClients(context, params);
2
11
 
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.createIndexesTaskDefinition = void 0;
7
- var _tasks = require("@webiny/tasks");
8
- var _CreateIndexesTaskRunner = require("./CreateIndexesTaskRunner");
9
- const createIndexesTaskDefinition = params => {
10
- return (0, _tasks.createTaskDefinition)({
11
- id: "elasticsearchCreateIndexes",
12
- title: "Create Missing Elasticsearch Indexes",
13
- /**
14
- * Maximum number of iterations before the task goes into the error state.
15
- * No point in having more than 2 runs, as the create index operations should not even take 1 full run, no matter how much indeexs is there to create.
16
- */
17
- maxIterations: 2,
18
- run: async ({
19
- response,
20
- context,
21
- isCloseToTimeout,
22
- isAborted,
23
- store,
24
- input
25
- }) => {
26
- const {
27
- Manager
28
- } = await import( /* webpackChunkName: "ElasticsearchTaskManager" */"../Manager");
29
- const {
30
- IndexManager
31
- } = await import( /* webpackChunkName: "ElasticsearchTaskSettings" */"../../settings");
32
- const manager = new Manager({
33
- elasticsearchClient: params?.elasticsearchClient,
34
- documentClient: params?.documentClient,
35
- response,
36
- context,
37
- isAborted,
38
- isCloseToTimeout,
39
- store
40
- });
41
- const indexManager = new IndexManager(manager.elasticsearch, {});
42
- const createIndexesTaskRunner = new _CreateIndexesTaskRunner.CreateIndexesTaskRunner(manager, indexManager);
43
- return createIndexesTaskRunner.execute(input.matching, Array.from(input.done || []));
44
- }
12
+ // Register the task definition
13
+ context.container.registerFactory(TaskDefinition, () => {
14
+ const tenantContext = context.container.resolve(TenantContext);
15
+ const listTenantsUseCase = context.container.resolve(ListTenantsUseCase);
16
+ const indexFactories = context.container.resolveAll(OpensearchTenantIndexFactory);
17
+ return new CreateIndexesTaskDefinition(clients.elasticsearchClient, clients.documentClient, tenantContext, listTenantsUseCase, indexFactories);
18
+ });
45
19
  });
46
20
  };
47
- exports.createIndexesTaskDefinition = createIndexesTaskDefinition;
48
21
 
49
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_tasks","require","_CreateIndexesTaskRunner","createIndexesTaskDefinition","params","createTaskDefinition","id","title","maxIterations","run","response","context","isCloseToTimeout","isAborted","store","input","Manager","IndexManager","manager","elasticsearchClient","documentClient","indexManager","elasticsearch","createIndexesTaskRunner","CreateIndexesTaskRunner","execute","matching","Array","from","done","exports"],"sources":["index.ts"],"sourcesContent":["import { createTaskDefinition } from \"@webiny/tasks\";\nimport { Context, IElasticsearchTaskConfig } from \"~/types\";\nimport { IElasticsearchCreateIndexesTaskInput } from \"~/tasks/createIndexes/types\";\nimport { CreateIndexesTaskRunner } from \"./CreateIndexesTaskRunner\";\n\nexport const createIndexesTaskDefinition = (params?: IElasticsearchTaskConfig) => {\n return createTaskDefinition<Context, IElasticsearchCreateIndexesTaskInput>({\n id: \"elasticsearchCreateIndexes\",\n title: \"Create Missing Elasticsearch Indexes\",\n /**\n * Maximum number of iterations before the task goes into the error state.\n * No point in having more than 2 runs, as the create index operations should not even take 1 full run, no matter how much indeexs is there to create.\n */\n maxIterations: 2,\n run: async ({ response, context, isCloseToTimeout, isAborted, store, input }) => {\n const { Manager } = await import(\n /* webpackChunkName: \"ElasticsearchTaskManager\" */\n \"../Manager\"\n );\n const { IndexManager } = await import(\n /* webpackChunkName: \"ElasticsearchTaskSettings\" */ \"~/settings\"\n );\n\n const manager = new Manager({\n elasticsearchClient: params?.elasticsearchClient,\n documentClient: params?.documentClient,\n response,\n context,\n isAborted,\n isCloseToTimeout,\n store\n });\n\n const indexManager = new IndexManager(manager.elasticsearch, {});\n\n const createIndexesTaskRunner = new CreateIndexesTaskRunner(manager, indexManager);\n\n return createIndexesTaskRunner.execute(input.matching, Array.from(input.done || []));\n }\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAGA,IAAAC,wBAAA,GAAAD,OAAA;AAEO,MAAME,2BAA2B,GAAIC,MAAiC,IAAK;EAC9E,OAAO,IAAAC,2BAAoB,EAAgD;IACvEC,EAAE,EAAE,4BAA4B;IAChCC,KAAK,EAAE,sCAAsC;IAC7C;AACR;AACA;AACA;IACQC,aAAa,EAAE,CAAC;IAChBC,GAAG,EAAE,MAAAA,CAAO;MAAEC,QAAQ;MAAEC,OAAO;MAAEC,gBAAgB;MAAEC,SAAS;MAAEC,KAAK;MAAEC;IAAM,CAAC,KAAK;MAC7E,MAAM;QAAEC;MAAQ,CAAC,GAAG,MAAM,MAAM,EAC5B,8DAEJ,CAAC;MACD,MAAM;QAAEC;MAAa,CAAC,GAAG,MAAM,MAAM,EACjC,mEACJ,CAAC;MAED,MAAMC,OAAO,GAAG,IAAIF,OAAO,CAAC;QACxBG,mBAAmB,EAAEf,MAAM,EAAEe,mBAAmB;QAChDC,cAAc,EAAEhB,MAAM,EAAEgB,cAAc;QACtCV,QAAQ;QACRC,OAAO;QACPE,SAAS;QACTD,gBAAgB;QAChBE;MACJ,CAAC,CAAC;MAEF,MAAMO,YAAY,GAAG,IAAIJ,YAAY,CAACC,OAAO,CAACI,aAAa,EAAE,CAAC,CAAC,CAAC;MAEhE,MAAMC,uBAAuB,GAAG,IAAIC,gDAAuB,CAACN,OAAO,EAAEG,YAAY,CAAC;MAElF,OAAOE,uBAAuB,CAACE,OAAO,CAACV,KAAK,CAACW,QAAQ,EAAEC,KAAK,CAACC,IAAI,CAACb,KAAK,CAACc,IAAI,IAAI,EAAE,CAAC,CAAC;IACxF;EACJ,CAAC,CAAC;AACN,CAAC;AAACC,OAAA,CAAA3B,2BAAA,GAAAA,2BAAA","ignoreList":[]}
1
+ {"version":3,"names":["TaskDefinition","createContextPlugin","getClients","CreateIndexesTaskDefinition","TenantContext","ListTenantsUseCase","OpensearchTenantIndexFactory","createIndexesTaskDefinition","params","context","clients","container","registerFactory","tenantContext","resolve","listTenantsUseCase","indexFactories","resolveAll","elasticsearchClient","documentClient"],"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 { getClients } from \"~/helpers/getClients.js\";\nimport { CreateIndexesTaskDefinition } from \"~/tasks/createIndexes/CreateIndexesTask.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\nimport { ListTenantsUseCase } from \"@webiny/api-core/features/tenancy/ListTenants/index.js\";\nimport { OpensearchTenantIndexFactory } from \"~/abstractions/OpensearchTenantIndexFactory.js\";\n\nexport const createIndexesTaskDefinition = (params?: Partial<IElasticsearchTaskConfig>) => {\n return createContextPlugin<Context>(async context => {\n const clients = getClients(context, params);\n\n // Register the task definition\n context.container.registerFactory(TaskDefinition, () => {\n const tenantContext = context.container.resolve(TenantContext);\n const listTenantsUseCase = context.container.resolve(ListTenantsUseCase);\n const indexFactories = context.container.resolveAll(OpensearchTenantIndexFactory);\n\n return new CreateIndexesTaskDefinition(\n clients.elasticsearchClient,\n clients.documentClient,\n tenantContext,\n listTenantsUseCase,\n indexFactories\n );\n });\n });\n};\n"],"mappings":"AAAA,SAASA,cAAc,QAAQ,wDAAwD;AAEvF,SAASC,mBAAmB,QAAQ,aAAa;AACjD,SAASC,UAAU;AACnB,SAASC,2BAA2B;AACpC,SAASC,aAAa,QAAQ,0DAA0D;AACxF,SAASC,kBAAkB,QAAQ,wDAAwD;AAC3F,SAASC,4BAA4B;AAErC,OAAO,MAAMC,2BAA2B,GAAIC,MAA0C,IAAK;EACvF,OAAOP,mBAAmB,CAAU,MAAMQ,OAAO,IAAI;IACjD,MAAMC,OAAO,GAAGR,UAAU,CAACO,OAAO,EAAED,MAAM,CAAC;;IAE3C;IACAC,OAAO,CAACE,SAAS,CAACC,eAAe,CAACZ,cAAc,EAAE,MAAM;MACpD,MAAMa,aAAa,GAAGJ,OAAO,CAACE,SAAS,CAACG,OAAO,CAACV,aAAa,CAAC;MAC9D,MAAMW,kBAAkB,GAAGN,OAAO,CAACE,SAAS,CAACG,OAAO,CAACT,kBAAkB,CAAC;MACxE,MAAMW,cAAc,GAAGP,OAAO,CAACE,SAAS,CAACM,UAAU,CAACX,4BAA4B,CAAC;MAEjF,OAAO,IAAIH,2BAA2B,CAClCO,OAAO,CAACQ,mBAAmB,EAC3BR,OAAO,CAACS,cAAc,EACtBN,aAAa,EACbE,kBAAkB,EAClBC,cACJ,CAAC;IACL,CAAC,CAAC;EACN,CAAC,CAAC;AACN,CAAC","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ import { OpensearchTenantIndexFactory } from "../../abstractions/OpensearchTenantIndexFactory.js";
2
+ import type { Tenant } from "@webiny/api-core/types/tenancy.js";
3
+ import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js";
4
+ export declare const listIndexes: (tenantContext: TenantContext.Interface, tenants: Tenant[], indexFactories: OpensearchTenantIndexFactory.Interface[]) => Promise<OpensearchTenantIndexFactory.IndexConfig[]>;
@@ -0,0 +1,20 @@
1
+ export const listIndexes = async (tenantContext, tenants, indexFactories) => {
2
+ if (indexFactories.length === 0) {
3
+ return [];
4
+ }
5
+ const indexes = [];
6
+ await tenantContext.withEachTenant(tenants, async tenant => {
7
+ for (const factory of indexFactories) {
8
+ const results = await factory.getIndexList(tenant);
9
+ for (const result of results) {
10
+ if (indexes.some(i => i.index === result.index)) {
11
+ continue;
12
+ }
13
+ indexes.push(result);
14
+ }
15
+ }
16
+ });
17
+ return indexes;
18
+ };
19
+
20
+ //# sourceMappingURL=listIndexes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["listIndexes","tenantContext","tenants","indexFactories","length","indexes","withEachTenant","tenant","factory","results","getIndexList","result","some","i","index","push"],"sources":["listIndexes.ts"],"sourcesContent":["import { OpensearchTenantIndexFactory } from \"~/abstractions/OpensearchTenantIndexFactory.js\";\nimport type { Tenant } from \"@webiny/api-core/types/tenancy.js\";\nimport { TenantContext } from \"@webiny/api-core/features/tenancy/TenantContext/index.js\";\n\nexport const listIndexes = async (\n tenantContext: TenantContext.Interface,\n tenants: Tenant[],\n indexFactories: OpensearchTenantIndexFactory.Interface[]\n): Promise<OpensearchTenantIndexFactory.IndexConfig[]> => {\n if (indexFactories.length === 0) {\n return [];\n }\n\n const indexes: OpensearchTenantIndexFactory.IndexConfig[] = [];\n await tenantContext.withEachTenant(tenants, async tenant => {\n for (const factory of indexFactories) {\n const results = await factory.getIndexList(tenant);\n for (const result of results) {\n if (indexes.some(i => i.index === result.index)) {\n continue;\n }\n indexes.push(result);\n }\n }\n });\n\n return indexes;\n};\n"],"mappings":"AAIA,OAAO,MAAMA,WAAW,GAAG,MAAAA,CACvBC,aAAsC,EACtCC,OAAiB,EACjBC,cAAwD,KACF;EACtD,IAAIA,cAAc,CAACC,MAAM,KAAK,CAAC,EAAE;IAC7B,OAAO,EAAE;EACb;EAEA,MAAMC,OAAmD,GAAG,EAAE;EAC9D,MAAMJ,aAAa,CAACK,cAAc,CAACJ,OAAO,EAAE,MAAMK,MAAM,IAAI;IACxD,KAAK,MAAMC,OAAO,IAAIL,cAAc,EAAE;MAClC,MAAMM,OAAO,GAAG,MAAMD,OAAO,CAACE,YAAY,CAACH,MAAM,CAAC;MAClD,KAAK,MAAMI,MAAM,IAAIF,OAAO,EAAE;QAC1B,IAAIJ,OAAO,CAACO,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACC,KAAK,KAAKH,MAAM,CAACG,KAAK,CAAC,EAAE;UAC7C;QACJ;QACAT,OAAO,CAACU,IAAI,CAACJ,MAAM,CAAC;MACxB;IACJ;EACJ,CAAC,CAAC;EAEF,OAAON,OAAO;AAClB,CAAC","ignoreList":[]}
@@ -1,7 +1,3 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
1
+ export {};
6
2
 
7
3
  //# sourceMappingURL=types.js.map
@@ -0,0 +1,34 @@
1
+ import { TaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js";
2
+ import type { IElasticsearchTaskConfig } from "../../types.js";
3
+ import type { IDataSynchronizationInput, IDataSynchronizationOutput } from "../../tasks/dataSynchronization/types.js";
4
+ import { ElasticsearchSynchronize } from "../../tasks/dataSynchronization/elasticsearch/ElasticsearchSynchronize.js";
5
+ export declare const DATA_SYNCHRONIZATION_TASK = "dataSynchronization";
6
+ export declare class DataSynchronizationTask implements TaskDefinition.Interface<IDataSynchronizationInput, IDataSynchronizationOutput> {
7
+ private elasticsearchClient;
8
+ private documentClient;
9
+ private elasticsearchSynchronize;
10
+ id: string;
11
+ title: string;
12
+ description: string;
13
+ isPrivate: boolean;
14
+ maxIterations: number;
15
+ databaseLogs: boolean;
16
+ constructor(elasticsearchClient: IElasticsearchTaskConfig["elasticsearchClient"], documentClient: IElasticsearchTaskConfig["documentClient"], elasticsearchSynchronize: ElasticsearchSynchronize);
17
+ run({ input, controller }: TaskDefinition.RunParams<IDataSynchronizationInput, IDataSynchronizationOutput>): Promise<import("~/tasks/dataSynchronization/types.js").ISynchronizationRunResult>;
18
+ createInputValidation({ validator }: TaskDefinition.CreateInputValidationParams): {
19
+ flow: import("zod").ZodEnum<["elasticsearchToDynamoDb"]>;
20
+ elasticsearchToDynamoDb: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodObject<{
21
+ finished: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodBoolean>>;
22
+ index: import("zod").ZodOptional<import("zod").ZodString>;
23
+ cursor: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
24
+ }, "strip", import("zod").ZodTypeAny, {
25
+ finished: boolean;
26
+ index?: string | undefined;
27
+ cursor?: string[] | undefined;
28
+ }, {
29
+ index?: string | undefined;
30
+ cursor?: string[] | undefined;
31
+ finished?: boolean | undefined;
32
+ }>>>;
33
+ };
34
+ }
@@ -0,0 +1,69 @@
1
+ export const DATA_SYNCHRONIZATION_TASK = "dataSynchronization";
2
+ export class DataSynchronizationTask {
3
+ id = DATA_SYNCHRONIZATION_TASK;
4
+ title = "Data Synchronization";
5
+ description = "Synchronize data between Elasticsearch and DynamoDB";
6
+ isPrivate = false;
7
+ maxIterations = 100;
8
+ databaseLogs = false;
9
+ constructor(elasticsearchClient, documentClient, elasticsearchSynchronize) {
10
+ this.elasticsearchClient = elasticsearchClient;
11
+ this.documentClient = documentClient;
12
+ this.elasticsearchSynchronize = elasticsearchSynchronize;
13
+ }
14
+ async run({
15
+ input,
16
+ controller
17
+ }) {
18
+ if (controller.runtime.isAborted()) {
19
+ return controller.response.aborted();
20
+ }
21
+ const {
22
+ Manager
23
+ } = await import(/* webpackChunkName: "Manager" */"../Manager.js");
24
+ const {
25
+ IndexManager
26
+ } = await import(/* webpackChunkName: "IndexManager" */"../../settings/index.js");
27
+ const manager = new Manager({
28
+ elasticsearchClient: this.elasticsearchClient,
29
+ documentClient: this.documentClient,
30
+ controller
31
+ });
32
+ const indexManager = new IndexManager(manager.elasticsearch, {});
33
+ const {
34
+ DataSynchronizationTaskRunner
35
+ } = await import(/* webpackChunkName: "DataSynchronizationTaskRunner" */"./DataSynchronizationTaskRunner.js");
36
+ const {
37
+ createFactories
38
+ } = await import(/* webpackChunkName: "createFactories" */"./createFactories.js");
39
+ try {
40
+ const dataSynchronization = new DataSynchronizationTaskRunner({
41
+ manager,
42
+ indexManager,
43
+ factories: createFactories(),
44
+ elasticsearchSynchronize: this.elasticsearchSynchronize
45
+ });
46
+ return await dataSynchronization.run({
47
+ ...input
48
+ });
49
+ } catch (ex) {
50
+ return controller.response.error(ex);
51
+ }
52
+ }
53
+ createInputValidation({
54
+ validator
55
+ }) {
56
+ return {
57
+ flow: validator.enum(["elasticsearchToDynamoDb"]),
58
+ elasticsearchToDynamoDb: validator.object({
59
+ finished: validator.boolean().optional().default(false),
60
+ index: validator.string().optional(),
61
+ cursor: validator.array(validator.string()).optional()
62
+ }).optional().default({
63
+ finished: false
64
+ })
65
+ };
66
+ }
67
+ }
68
+
69
+ //# sourceMappingURL=DataSynchronizationTask.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["DATA_SYNCHRONIZATION_TASK","DataSynchronizationTask","id","title","description","isPrivate","maxIterations","databaseLogs","constructor","elasticsearchClient","documentClient","elasticsearchSynchronize","run","input","controller","runtime","isAborted","response","aborted","Manager","IndexManager","manager","indexManager","elasticsearch","DataSynchronizationTaskRunner","createFactories","dataSynchronization","factories","ex","error","createInputValidation","validator","flow","enum","elasticsearchToDynamoDb","object","finished","boolean","optional","default","index","string","cursor","array"],"sources":["DataSynchronizationTask.ts"],"sourcesContent":["import { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport type { IElasticsearchTaskConfig } from \"~/types.js\";\nimport type {\n IDataSynchronizationInput,\n IDataSynchronizationOutput\n} from \"~/tasks/dataSynchronization/types.js\";\nimport { ElasticsearchSynchronize } from \"~/tasks/dataSynchronization/elasticsearch/ElasticsearchSynchronize.js\";\n\nexport const DATA_SYNCHRONIZATION_TASK = \"dataSynchronization\";\n\nexport class DataSynchronizationTask\n implements TaskDefinition.Interface<IDataSynchronizationInput, IDataSynchronizationOutput>\n{\n id = DATA_SYNCHRONIZATION_TASK;\n title = \"Data Synchronization\";\n description = \"Synchronize data between Elasticsearch and DynamoDB\";\n isPrivate = false;\n maxIterations = 100;\n databaseLogs = false;\n\n constructor(\n private elasticsearchClient: IElasticsearchTaskConfig[\"elasticsearchClient\"],\n private documentClient: IElasticsearchTaskConfig[\"documentClient\"],\n private elasticsearchSynchronize: ElasticsearchSynchronize\n ) {}\n\n async run({\n input,\n controller\n }: TaskDefinition.RunParams<IDataSynchronizationInput, IDataSynchronizationOutput>) {\n if (controller.runtime.isAborted()) {\n return controller.response.aborted();\n }\n\n const { Manager } = await import(\n /* webpackChunkName: \"Manager\" */\n \"../Manager.js\"\n );\n\n const { IndexManager } = await import(\n /* webpackChunkName: \"IndexManager\" */ \"~/settings/index.js\"\n );\n\n const manager = new Manager<IDataSynchronizationInput, IDataSynchronizationOutput>({\n elasticsearchClient: this.elasticsearchClient,\n documentClient: this.documentClient,\n controller\n });\n\n const indexManager = new IndexManager(manager.elasticsearch, {});\n\n const { DataSynchronizationTaskRunner } = await import(\n /* webpackChunkName: \"DataSynchronizationTaskRunner\" */ \"./DataSynchronizationTaskRunner.js\"\n );\n\n const { createFactories } = await import(\n /* webpackChunkName: \"createFactories\" */ \"./createFactories.js\"\n );\n\n try {\n const dataSynchronization = new DataSynchronizationTaskRunner({\n manager,\n indexManager,\n factories: createFactories(),\n elasticsearchSynchronize: this.elasticsearchSynchronize\n });\n\n return await dataSynchronization.run({\n ...input\n });\n } catch (ex) {\n return controller.response.error(ex);\n }\n }\n\n createInputValidation({ validator }: TaskDefinition.CreateInputValidationParams) {\n return {\n flow: validator.enum([\"elasticsearchToDynamoDb\"]),\n elasticsearchToDynamoDb: validator\n .object({\n finished: validator.boolean().optional().default(false),\n index: validator.string().optional(),\n cursor: validator.array(validator.string()).optional()\n })\n .optional()\n .default({\n finished: false\n })\n };\n }\n}\n"],"mappings":"AAQA,OAAO,MAAMA,yBAAyB,GAAG,qBAAqB;AAE9D,OAAO,MAAMC,uBAAuB,CAEpC;EACIC,EAAE,GAAGF,yBAAyB;EAC9BG,KAAK,GAAG,sBAAsB;EAC9BC,WAAW,GAAG,qDAAqD;EACnEC,SAAS,GAAG,KAAK;EACjBC,aAAa,GAAG,GAAG;EACnBC,YAAY,GAAG,KAAK;EAEpBC,WAAWA,CACCC,mBAAoE,EACpEC,cAA0D,EAC1DC,wBAAkD,EAC5D;IAAA,KAHUF,mBAAoE,GAApEA,mBAAoE;IAAA,KACpEC,cAA0D,GAA1DA,cAA0D;IAAA,KAC1DC,wBAAkD,GAAlDA,wBAAkD;EAC3D;EAEH,MAAMC,GAAGA,CAAC;IACNC,KAAK;IACLC;EAC6E,CAAC,EAAE;IAChF,IAAIA,UAAU,CAACC,OAAO,CAACC,SAAS,CAAC,CAAC,EAAE;MAChC,OAAOF,UAAU,CAACG,QAAQ,CAACC,OAAO,CAAC,CAAC;IACxC;IAEA,MAAM;MAAEC;IAAQ,CAAC,GAAG,MAAM,MAAM,CAC5B,gDAEJ,CAAC;IAED,MAAM;MAAEC;IAAa,CAAC,GAAG,MAAM,MAAM,CACjC,+DACJ,CAAC;IAED,MAAMC,OAAO,GAAG,IAAIF,OAAO,CAAwD;MAC/EV,mBAAmB,EAAE,IAAI,CAACA,mBAAmB;MAC7CC,cAAc,EAAE,IAAI,CAACA,cAAc;MACnCI;IACJ,CAAC,CAAC;IAEF,MAAMQ,YAAY,GAAG,IAAIF,YAAY,CAACC,OAAO,CAACE,aAAa,EAAE,CAAC,CAAC,CAAC;IAEhE,MAAM;MAAEC;IAA8B,CAAC,GAAG,MAAM,MAAM,CAClD,2FACJ,CAAC;IAED,MAAM;MAAEC;IAAgB,CAAC,GAAG,MAAM,MAAM,CACpC,+DACJ,CAAC;IAED,IAAI;MACA,MAAMC,mBAAmB,GAAG,IAAIF,6BAA6B,CAAC;QAC1DH,OAAO;QACPC,YAAY;QACZK,SAAS,EAAEF,eAAe,CAAC,CAAC;QAC5Bd,wBAAwB,EAAE,IAAI,CAACA;MACnC,CAAC,CAAC;MAEF,OAAO,MAAMe,mBAAmB,CAACd,GAAG,CAAC;QACjC,GAAGC;MACP,CAAC,CAAC;IACN,CAAC,CAAC,OAAOe,EAAE,EAAE;MACT,OAAOd,UAAU,CAACG,QAAQ,CAACY,KAAK,CAACD,EAAE,CAAC;IACxC;EACJ;EAEAE,qBAAqBA,CAAC;IAAEC;EAAsD,CAAC,EAAE;IAC7E,OAAO;MACHC,IAAI,EAAED,SAAS,CAACE,IAAI,CAAC,CAAC,yBAAyB,CAAC,CAAC;MACjDC,uBAAuB,EAAEH,SAAS,CAC7BI,MAAM,CAAC;QACJC,QAAQ,EAAEL,SAAS,CAACM,OAAO,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,CAACC,OAAO,CAAC,KAAK,CAAC;QACvDC,KAAK,EAAET,SAAS,CAACU,MAAM,CAAC,CAAC,CAACH,QAAQ,CAAC,CAAC;QACpCI,MAAM,EAAEX,SAAS,CAACY,KAAK,CAACZ,SAAS,CAACU,MAAM,CAAC,CAAC,CAAC,CAACH,QAAQ,CAAC;MACzD,CAAC,CAAC,CACDA,QAAQ,CAAC,CAAC,CACVC,OAAO,CAAC;QACLH,QAAQ,EAAE;MACd,CAAC;IACT,CAAC;EACL;AACJ","ignoreList":[]}
@@ -0,0 +1,18 @@
1
+ import type { IDataSynchronizationInput, IDataSynchronizationManager, IFactories } from "../../tasks/dataSynchronization/types.js";
2
+ import type { IIndexManager } from "../../settings/types.js";
3
+ import { ElasticsearchSynchronize } from "../../tasks/dataSynchronization/elasticsearch/ElasticsearchSynchronize.js";
4
+ export interface IDataSynchronizationTaskRunnerParams {
5
+ manager: IDataSynchronizationManager;
6
+ indexManager: IIndexManager;
7
+ factories: IFactories;
8
+ elasticsearchSynchronize: ElasticsearchSynchronize;
9
+ }
10
+ export declare class DataSynchronizationTaskRunner {
11
+ private readonly manager;
12
+ private readonly indexManager;
13
+ private readonly factories;
14
+ private readonly elasticsearchSynchronize;
15
+ constructor(params: IDataSynchronizationTaskRunnerParams);
16
+ run(input: IDataSynchronizationInput): Promise<import("~/tasks/dataSynchronization/types.js").ISynchronizationRunResult>;
17
+ private validateFlow;
18
+ }
@@ -0,0 +1,45 @@
1
+ import { ElasticsearchFetcher } from "./elasticsearch/ElasticsearchFetcher.js";
2
+ export class DataSynchronizationTaskRunner {
3
+ constructor(params) {
4
+ this.manager = params.manager;
5
+ this.indexManager = params.indexManager;
6
+ this.factories = params.factories;
7
+ this.elasticsearchSynchronize = params.elasticsearchSynchronize;
8
+ }
9
+ async run(input) {
10
+ this.validateFlow(input);
11
+ /**
12
+ * Go through the Elasticsearch and delete records which do not exist in the Elasticsearch table.
13
+ */
14
+ //
15
+ if (input.flow === "elasticsearchToDynamoDb" && !input.elasticsearchToDynamoDb?.finished) {
16
+ const sync = this.factories.elasticsearchToDynamoDb({
17
+ manager: this.manager,
18
+ indexManager: this.indexManager,
19
+ synchronize: this.elasticsearchSynchronize,
20
+ fetcher: new ElasticsearchFetcher({
21
+ client: this.manager.elasticsearch
22
+ })
23
+ });
24
+ try {
25
+ return await sync.run(input);
26
+ } catch (ex) {
27
+ return this.manager.controller.response.error(ex);
28
+ }
29
+ }
30
+ /**
31
+ * We are done.
32
+ */
33
+ return this.manager.controller.response.done();
34
+ }
35
+ validateFlow(input) {
36
+ if (!input.flow) {
37
+ throw new Error(`Missing "flow" in the input.`);
38
+ } else if (this.factories[input.flow]) {
39
+ return;
40
+ }
41
+ throw new Error(`Invalid flow "${input.flow}". Allowed flows: ${Object.keys(this.factories).join(", ")}.`);
42
+ }
43
+ }
44
+
45
+ //# sourceMappingURL=DataSynchronizationTaskRunner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ElasticsearchFetcher","DataSynchronizationTaskRunner","constructor","params","manager","indexManager","factories","elasticsearchSynchronize","run","input","validateFlow","flow","elasticsearchToDynamoDb","finished","sync","synchronize","fetcher","client","elasticsearch","ex","controller","response","error","done","Error","Object","keys","join"],"sources":["DataSynchronizationTaskRunner.ts"],"sourcesContent":["import type {\n IDataSynchronizationInput,\n IDataSynchronizationManager,\n IFactories\n} from \"~/tasks/dataSynchronization/types.js\";\nimport type { IIndexManager } from \"~/settings/types.js\";\nimport { ElasticsearchSynchronize } from \"~/tasks/dataSynchronization/elasticsearch/ElasticsearchSynchronize.js\";\nimport { ElasticsearchFetcher } from \"~/tasks/dataSynchronization/elasticsearch/ElasticsearchFetcher.js\";\n\nexport interface IDataSynchronizationTaskRunnerParams {\n manager: IDataSynchronizationManager;\n indexManager: IIndexManager;\n factories: IFactories;\n elasticsearchSynchronize: ElasticsearchSynchronize;\n}\n\nexport class DataSynchronizationTaskRunner {\n private readonly manager: IDataSynchronizationManager;\n private readonly indexManager: IIndexManager;\n private readonly factories: IFactories;\n private readonly elasticsearchSynchronize: ElasticsearchSynchronize;\n\n public constructor(params: IDataSynchronizationTaskRunnerParams) {\n this.manager = params.manager;\n this.indexManager = params.indexManager;\n this.factories = params.factories;\n this.elasticsearchSynchronize = params.elasticsearchSynchronize;\n }\n\n public async run(input: IDataSynchronizationInput) {\n this.validateFlow(input);\n /**\n * Go through the Elasticsearch and delete records which do not exist in the Elasticsearch table.\n */\n //\n if (input.flow === \"elasticsearchToDynamoDb\" && !input.elasticsearchToDynamoDb?.finished) {\n const sync = this.factories.elasticsearchToDynamoDb({\n manager: this.manager,\n indexManager: this.indexManager,\n synchronize: this.elasticsearchSynchronize,\n fetcher: new ElasticsearchFetcher({\n client: this.manager.elasticsearch\n })\n });\n try {\n return await sync.run(input);\n } catch (ex) {\n return this.manager.controller.response.error(ex);\n }\n }\n /**\n * We are done.\n */\n return this.manager.controller.response.done();\n }\n\n private validateFlow(input: IDataSynchronizationInput): void {\n if (!input.flow) {\n throw new Error(`Missing \"flow\" in the input.`);\n } else if (this.factories[input.flow]) {\n return;\n }\n throw new Error(\n `Invalid flow \"${input.flow}\". Allowed flows: ${Object.keys(this.factories).join(\n \", \"\n )}.`\n );\n }\n}\n"],"mappings":"AAOA,SAASA,oBAAoB;AAS7B,OAAO,MAAMC,6BAA6B,CAAC;EAMhCC,WAAWA,CAACC,MAA4C,EAAE;IAC7D,IAAI,CAACC,OAAO,GAAGD,MAAM,CAACC,OAAO;IAC7B,IAAI,CAACC,YAAY,GAAGF,MAAM,CAACE,YAAY;IACvC,IAAI,CAACC,SAAS,GAAGH,MAAM,CAACG,SAAS;IACjC,IAAI,CAACC,wBAAwB,GAAGJ,MAAM,CAACI,wBAAwB;EACnE;EAEA,MAAaC,GAAGA,CAACC,KAAgC,EAAE;IAC/C,IAAI,CAACC,YAAY,CAACD,KAAK,CAAC;IACxB;AACR;AACA;IACQ;IACA,IAAIA,KAAK,CAACE,IAAI,KAAK,yBAAyB,IAAI,CAACF,KAAK,CAACG,uBAAuB,EAAEC,QAAQ,EAAE;MACtF,MAAMC,IAAI,GAAG,IAAI,CAACR,SAAS,CAACM,uBAAuB,CAAC;QAChDR,OAAO,EAAE,IAAI,CAACA,OAAO;QACrBC,YAAY,EAAE,IAAI,CAACA,YAAY;QAC/BU,WAAW,EAAE,IAAI,CAACR,wBAAwB;QAC1CS,OAAO,EAAE,IAAIhB,oBAAoB,CAAC;UAC9BiB,MAAM,EAAE,IAAI,CAACb,OAAO,CAACc;QACzB,CAAC;MACL,CAAC,CAAC;MACF,IAAI;QACA,OAAO,MAAMJ,IAAI,CAACN,GAAG,CAACC,KAAK,CAAC;MAChC,CAAC,CAAC,OAAOU,EAAE,EAAE;QACT,OAAO,IAAI,CAACf,OAAO,CAACgB,UAAU,CAACC,QAAQ,CAACC,KAAK,CAACH,EAAE,CAAC;MACrD;IACJ;IACA;AACR;AACA;IACQ,OAAO,IAAI,CAACf,OAAO,CAACgB,UAAU,CAACC,QAAQ,CAACE,IAAI,CAAC,CAAC;EAClD;EAEQb,YAAYA,CAACD,KAAgC,EAAQ;IACzD,IAAI,CAACA,KAAK,CAACE,IAAI,EAAE;MACb,MAAM,IAAIa,KAAK,CAAC,8BAA8B,CAAC;IACnD,CAAC,MAAM,IAAI,IAAI,CAAClB,SAAS,CAACG,KAAK,CAACE,IAAI,CAAC,EAAE;MACnC;IACJ;IACA,MAAM,IAAIa,KAAK,CACX,iBAAiBf,KAAK,CAACE,IAAI,qBAAqBc,MAAM,CAACC,IAAI,CAAC,IAAI,CAACpB,SAAS,CAAC,CAACqB,IAAI,CAC5E,IACJ,CAAC,GACL,CAAC;EACL;AACJ","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import type { IFactories } from "./types.js";
2
+ export declare const createFactories: () => IFactories;
@@ -0,0 +1,10 @@
1
+ import { ElasticsearchToDynamoDbSynchronization } from "./elasticsearch/ElasticsearchToDynamoDbSynchronization.js";
2
+ export const createFactories = () => {
3
+ return {
4
+ elasticsearchToDynamoDb: params => {
5
+ return new ElasticsearchToDynamoDbSynchronization(params);
6
+ }
7
+ };
8
+ };
9
+
10
+ //# sourceMappingURL=createFactories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ElasticsearchToDynamoDbSynchronization","createFactories","elasticsearchToDynamoDb","params"],"sources":["createFactories.ts"],"sourcesContent":["import type { IFactories } from \"./types.js\";\nimport { ElasticsearchToDynamoDbSynchronization } from \"./elasticsearch/ElasticsearchToDynamoDbSynchronization.js\";\n\nexport const createFactories = (): IFactories => {\n return {\n elasticsearchToDynamoDb: params => {\n return new ElasticsearchToDynamoDbSynchronization(params);\n }\n };\n};\n"],"mappings":"AACA,SAASA,sCAAsC;AAE/C,OAAO,MAAMC,eAAe,GAAGA,CAAA,KAAkB;EAC7C,OAAO;IACHC,uBAAuB,EAAEC,MAAM,IAAI;MAC/B,OAAO,IAAIH,sCAAsC,CAACG,MAAM,CAAC;IAC7D;EACJ,CAAC;AACL,CAAC","ignoreList":[]}