@devrev/airsync-sdk 2.0.0-beta.1 → 2.0.0-beta.11

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 (229) hide show
  1. package/README.md +7 -21
  2. package/dist/attachments-streaming/attachments-streaming-pool.d.ts +6 -7
  3. package/dist/attachments-streaming/attachments-streaming-pool.d.ts.map +1 -1
  4. package/dist/attachments-streaming/attachments-streaming-pool.interfaces.d.ts +4 -3
  5. package/dist/attachments-streaming/attachments-streaming-pool.interfaces.d.ts.map +1 -1
  6. package/dist/attachments-streaming/attachments-streaming-pool.js +69 -61
  7. package/dist/common/constants.d.ts +15 -12
  8. package/dist/common/constants.d.ts.map +1 -1
  9. package/dist/common/constants.js +20 -34
  10. package/dist/common/helpers.d.ts +3 -27
  11. package/dist/common/helpers.d.ts.map +1 -1
  12. package/dist/common/helpers.js +6 -36
  13. package/dist/http/client.d.ts +4 -0
  14. package/dist/http/client.d.ts.map +1 -0
  15. package/dist/http/client.js +80 -0
  16. package/dist/http/errors.d.ts +8 -0
  17. package/dist/http/errors.d.ts.map +1 -0
  18. package/dist/http/errors.js +31 -0
  19. package/dist/index.d.ts +30 -12
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +47 -28
  22. package/dist/logger/logger.d.ts +13 -70
  23. package/dist/logger/logger.d.ts.map +1 -1
  24. package/dist/logger/logger.interfaces.d.ts +4 -7
  25. package/dist/logger/logger.interfaces.d.ts.map +1 -1
  26. package/dist/logger/logger.js +67 -92
  27. package/dist/mappers/mappers.d.ts +10 -43
  28. package/dist/mappers/mappers.d.ts.map +1 -1
  29. package/dist/mappers/mappers.interfaces.d.ts +173 -0
  30. package/dist/mappers/mappers.interfaces.d.ts.map +1 -0
  31. package/dist/mappers/{mappers.interface.js → mappers.interfaces.js} +1 -10
  32. package/dist/mappers/mappers.js +32 -46
  33. package/dist/multithreading/adapters/base-adapter.d.ts +39 -0
  34. package/dist/multithreading/adapters/base-adapter.d.ts.map +1 -0
  35. package/dist/multithreading/adapters/base-adapter.js +212 -0
  36. package/dist/multithreading/adapters/extraction-adapter.d.ts +49 -0
  37. package/dist/multithreading/adapters/extraction-adapter.d.ts.map +1 -0
  38. package/dist/multithreading/adapters/extraction-adapter.js +375 -0
  39. package/dist/multithreading/adapters/loading-adapter.d.ts +26 -0
  40. package/dist/multithreading/adapters/loading-adapter.d.ts.map +1 -0
  41. package/dist/multithreading/adapters/loading-adapter.helpers.d.ts +12 -0
  42. package/dist/multithreading/adapters/loading-adapter.helpers.d.ts.map +1 -0
  43. package/dist/multithreading/{worker-adapter/worker-adapter.helpers.js → adapters/loading-adapter.helpers.js} +2 -12
  44. package/dist/multithreading/adapters/loading-adapter.js +279 -0
  45. package/dist/multithreading/emit.d.ts +11 -0
  46. package/dist/multithreading/emit.d.ts.map +1 -0
  47. package/dist/multithreading/emit.js +25 -0
  48. package/dist/multithreading/process-task.d.ts +6 -1
  49. package/dist/multithreading/process-task.d.ts.map +1 -1
  50. package/dist/multithreading/process-task.js +120 -82
  51. package/dist/multithreading/spawn/spawn.d.ts +10 -11
  52. package/dist/multithreading/spawn/spawn.d.ts.map +1 -1
  53. package/dist/multithreading/spawn/spawn.helpers.d.ts +12 -11
  54. package/dist/multithreading/spawn/spawn.helpers.d.ts.map +1 -1
  55. package/dist/multithreading/spawn/spawn.helpers.js +142 -77
  56. package/dist/multithreading/spawn/spawn.js +59 -75
  57. package/dist/multithreading/worker.js +16 -5
  58. package/dist/repo/repo.d.ts +14 -5
  59. package/dist/repo/repo.d.ts.map +1 -1
  60. package/dist/repo/repo.helpers.d.ts +6 -0
  61. package/dist/repo/repo.helpers.d.ts.map +1 -0
  62. package/dist/repo/repo.helpers.js +16 -0
  63. package/dist/repo/repo.interfaces.d.ts +11 -20
  64. package/dist/repo/repo.interfaces.d.ts.map +1 -1
  65. package/dist/repo/repo.js +36 -22
  66. package/dist/state/base-state.d.ts +58 -0
  67. package/dist/state/base-state.d.ts.map +1 -0
  68. package/dist/state/base-state.js +242 -0
  69. package/dist/state/extraction-state.d.ts +14 -0
  70. package/dist/state/extraction-state.d.ts.map +1 -0
  71. package/dist/state/extraction-state.js +146 -0
  72. package/dist/state/install-initial-domain-mapping.d.ts +4 -0
  73. package/dist/state/install-initial-domain-mapping.d.ts.map +1 -0
  74. package/dist/{common → state}/install-initial-domain-mapping.js +5 -7
  75. package/dist/state/loading-state.d.ts +8 -0
  76. package/dist/state/loading-state.d.ts.map +1 -0
  77. package/dist/state/loading-state.js +29 -0
  78. package/dist/state/state.d.ts +3 -29
  79. package/dist/state/state.d.ts.map +1 -1
  80. package/dist/state/state.interfaces.d.ts +31 -12
  81. package/dist/state/state.interfaces.d.ts.map +1 -1
  82. package/dist/state/state.interfaces.js +17 -1
  83. package/dist/state/state.js +9 -164
  84. package/dist/state/time-value-resolver.d.ts +17 -0
  85. package/dist/state/time-value-resolver.d.ts.map +1 -0
  86. package/dist/state/time-value-resolver.js +110 -0
  87. package/dist/testing/mock-event.d.ts +10 -0
  88. package/dist/testing/mock-event.d.ts.map +1 -0
  89. package/dist/testing/mock-event.js +96 -0
  90. package/dist/testing/mock-server.d.ts +31 -0
  91. package/dist/testing/mock-server.d.ts.map +1 -0
  92. package/dist/testing/mock-server.interfaces.d.ts +54 -0
  93. package/dist/testing/mock-server.interfaces.d.ts.map +1 -0
  94. package/dist/testing/mock-server.interfaces.js +4 -0
  95. package/dist/testing/mock-server.js +297 -0
  96. package/dist/testing/test-adapters.d.ts +22 -0
  97. package/dist/testing/test-adapters.d.ts.map +1 -0
  98. package/dist/testing/test-adapters.js +32 -0
  99. package/dist/types/common.d.ts +4 -37
  100. package/dist/types/common.d.ts.map +1 -1
  101. package/dist/types/common.js +2 -17
  102. package/dist/types/errors.d.ts +15 -0
  103. package/dist/types/errors.d.ts.map +1 -0
  104. package/dist/types/errors.js +28 -0
  105. package/dist/types/external-domain-metadata.d.ts +40 -162
  106. package/dist/types/external-domain-metadata.d.ts.map +1 -1
  107. package/dist/types/extraction.d.ts +135 -278
  108. package/dist/types/extraction.d.ts.map +1 -1
  109. package/dist/types/extraction.js +46 -133
  110. package/dist/types/loading.d.ts +15 -55
  111. package/dist/types/loading.d.ts.map +1 -1
  112. package/dist/types/loading.js +1 -23
  113. package/dist/types/workers.d.ts +70 -103
  114. package/dist/types/workers.d.ts.map +1 -1
  115. package/dist/types/workers.js +1 -6
  116. package/dist/uploader/uploader.d.ts +10 -61
  117. package/dist/uploader/uploader.d.ts.map +1 -1
  118. package/dist/uploader/uploader.helpers.d.ts +7 -27
  119. package/dist/uploader/uploader.helpers.d.ts.map +1 -1
  120. package/dist/uploader/uploader.helpers.js +80 -30
  121. package/dist/uploader/uploader.interfaces.d.ts +19 -54
  122. package/dist/uploader/uploader.interfaces.d.ts.map +1 -1
  123. package/dist/uploader/uploader.interfaces.js +8 -0
  124. package/dist/uploader/uploader.js +72 -124
  125. package/docs/MIGRATION.md +751 -0
  126. package/package.json +35 -22
  127. package/dist/attachments-streaming/attachments-streaming-pool.test.d.ts +0 -2
  128. package/dist/attachments-streaming/attachments-streaming-pool.test.d.ts.map +0 -1
  129. package/dist/attachments-streaming/attachments-streaming-pool.test.js +0 -321
  130. package/dist/common/control-protocol.d.ts +0 -10
  131. package/dist/common/control-protocol.d.ts.map +0 -1
  132. package/dist/common/control-protocol.js +0 -31
  133. package/dist/common/errors.d.ts +0 -6
  134. package/dist/common/errors.d.ts.map +0 -1
  135. package/dist/common/errors.js +0 -4
  136. package/dist/common/event-type-translation.d.ts +0 -24
  137. package/dist/common/event-type-translation.d.ts.map +0 -1
  138. package/dist/common/event-type-translation.js +0 -117
  139. package/dist/common/install-initial-domain-mapping.d.ts +0 -4
  140. package/dist/common/install-initial-domain-mapping.d.ts.map +0 -1
  141. package/dist/common/install-initial-domain-mapping.test.d.ts +0 -2
  142. package/dist/common/install-initial-domain-mapping.test.d.ts.map +0 -1
  143. package/dist/common/install-initial-domain-mapping.test.js +0 -208
  144. package/dist/deprecated/adapter/index.d.ts +0 -62
  145. package/dist/deprecated/adapter/index.d.ts.map +0 -1
  146. package/dist/deprecated/adapter/index.js +0 -151
  147. package/dist/deprecated/common/helpers.d.ts +0 -7
  148. package/dist/deprecated/common/helpers.d.ts.map +0 -1
  149. package/dist/deprecated/common/helpers.js +0 -47
  150. package/dist/deprecated/demo-extractor/external_domain_metadata.json +0 -38
  151. package/dist/deprecated/demo-extractor/index.d.ts +0 -18
  152. package/dist/deprecated/demo-extractor/index.d.ts.map +0 -1
  153. package/dist/deprecated/demo-extractor/index.js +0 -161
  154. package/dist/deprecated/http/client.d.ts +0 -22
  155. package/dist/deprecated/http/client.d.ts.map +0 -1
  156. package/dist/deprecated/http/client.js +0 -161
  157. package/dist/deprecated/uploader/index.d.ts +0 -35
  158. package/dist/deprecated/uploader/index.d.ts.map +0 -1
  159. package/dist/deprecated/uploader/index.js +0 -161
  160. package/dist/http/axios-client-internal.d.ts +0 -3
  161. package/dist/http/axios-client-internal.d.ts.map +0 -1
  162. package/dist/http/axios-client-internal.js +0 -66
  163. package/dist/http/axios-client-internal.test.d.ts +0 -2
  164. package/dist/http/axios-client-internal.test.d.ts.map +0 -1
  165. package/dist/http/axios-client-internal.test.js +0 -154
  166. package/dist/http/axios-client.d.ts +0 -27
  167. package/dist/http/axios-client.d.ts.map +0 -1
  168. package/dist/http/axios-client.js +0 -57
  169. package/dist/http/constants.d.ts +0 -4
  170. package/dist/http/constants.d.ts.map +0 -1
  171. package/dist/http/constants.js +0 -6
  172. package/dist/http/index.d.ts +0 -3
  173. package/dist/http/index.d.ts.map +0 -1
  174. package/dist/http/index.js +0 -18
  175. package/dist/http/types.d.ts +0 -17
  176. package/dist/http/types.d.ts.map +0 -1
  177. package/dist/http/types.js +0 -2
  178. package/dist/logger/logger.constants.d.ts +0 -6
  179. package/dist/logger/logger.constants.d.ts.map +0 -1
  180. package/dist/logger/logger.constants.js +0 -13
  181. package/dist/logger/logger.context.d.ts +0 -58
  182. package/dist/logger/logger.context.d.ts.map +0 -1
  183. package/dist/logger/logger.context.js +0 -86
  184. package/dist/logger/logger.test.d.ts +0 -2
  185. package/dist/logger/logger.test.d.ts.map +0 -1
  186. package/dist/logger/logger.test.js +0 -490
  187. package/dist/mappers/mappers.interface.d.ts +0 -294
  188. package/dist/mappers/mappers.interface.d.ts.map +0 -1
  189. package/dist/mappers/mappers.test.d.ts +0 -2
  190. package/dist/mappers/mappers.test.d.ts.map +0 -1
  191. package/dist/mappers/mappers.test.js +0 -107
  192. package/dist/multithreading/create-worker.test.d.ts +0 -2
  193. package/dist/multithreading/create-worker.test.d.ts.map +0 -1
  194. package/dist/multithreading/create-worker.test.js +0 -89
  195. package/dist/multithreading/spawn/spawn.helpers.test.d.ts +0 -2
  196. package/dist/multithreading/spawn/spawn.helpers.test.d.ts.map +0 -1
  197. package/dist/multithreading/spawn/spawn.helpers.test.js +0 -293
  198. package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.d.ts +0 -2
  199. package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.d.ts.map +0 -1
  200. package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.js +0 -127
  201. package/dist/multithreading/worker-adapter/worker-adapter.d.ts +0 -91
  202. package/dist/multithreading/worker-adapter/worker-adapter.d.ts.map +0 -1
  203. package/dist/multithreading/worker-adapter/worker-adapter.helpers.d.ts +0 -22
  204. package/dist/multithreading/worker-adapter/worker-adapter.helpers.d.ts.map +0 -1
  205. package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.d.ts +0 -2
  206. package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.d.ts.map +0 -1
  207. package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.js +0 -514
  208. package/dist/multithreading/worker-adapter/worker-adapter.js +0 -745
  209. package/dist/multithreading/worker-adapter/worker-adapter.test.d.ts +0 -2
  210. package/dist/multithreading/worker-adapter/worker-adapter.test.d.ts.map +0 -1
  211. package/dist/multithreading/worker-adapter/worker-adapter.test.js +0 -483
  212. package/dist/repo/repo.test.d.ts +0 -2
  213. package/dist/repo/repo.test.d.ts.map +0 -1
  214. package/dist/repo/repo.test.js +0 -131
  215. package/dist/state/state.test.d.ts +0 -2
  216. package/dist/state/state.test.d.ts.map +0 -1
  217. package/dist/state/state.test.js +0 -224
  218. package/dist/types/extraction.test.d.ts +0 -2
  219. package/dist/types/extraction.test.d.ts.map +0 -1
  220. package/dist/types/extraction.test.js +0 -70
  221. package/dist/types/index.d.ts +0 -10
  222. package/dist/types/index.d.ts.map +0 -1
  223. package/dist/types/index.js +0 -18
  224. package/dist/uploader/uploader.helpers.test.d.ts +0 -2
  225. package/dist/uploader/uploader.helpers.test.d.ts.map +0 -1
  226. package/dist/uploader/uploader.helpers.test.js +0 -267
  227. package/dist/uploader/uploader.test.d.ts +0 -2
  228. package/dist/uploader/uploader.test.d.ts.map +0 -1
  229. package/dist/uploader/uploader.test.js +0 -589
@@ -1,21 +1,22 @@
1
1
  import { EventType, ExtractorEventType } from '../../types/extraction';
2
2
  import { LoaderEventType } from '../../types/loading';
3
+ import { TaskStatus } from '../../types/workers';
3
4
  /**
4
- * Gets the event type for the timeout error.
5
- * @param {EventType} eventType - The event type to get the timeout error event type for
6
- * @returns {ExtractorEventType | LoaderEventType} The event type for the timeout error
5
+ * Resolves the outgoing event type to emit for an incoming event type and a
6
+ * {@link TaskResult} status. Resumable phases honor every status
7
+ * (success/progress/delay/error -> *_DONE/*_PROGRESS/*_DELAYED/*_ERROR);
8
+ * non-resumable phases only have done/error, so `progress`/`delay` there is
9
+ * illegal and maps to the phase's error event.
7
10
  */
11
+ export declare function getEventTypeForResult(eventType: EventType, status: TaskStatus): {
12
+ eventType: ExtractorEventType | LoaderEventType;
13
+ illegal: boolean;
14
+ };
8
15
  export declare function getTimeoutErrorEventType(eventType: EventType): {
9
16
  eventType: ExtractorEventType | LoaderEventType;
10
17
  };
11
- /**
12
- * Gets the event type for the no script error.
13
- * @param {EventType} eventType - The event type to get the no script error event type for
14
- * @returns {ExtractorEventType | LoaderEventType} The event type for the no script error
15
- */
18
+ /** Event type to emit when no worker script exists for the incoming event. */
16
19
  export declare function getNoScriptEventType(eventType: EventType): {
17
- eventType: ExtractorEventType;
18
- } | {
19
- eventType: LoaderEventType;
20
+ eventType: ExtractorEventType | LoaderEventType;
20
21
  };
21
22
  //# sourceMappingURL=spawn.helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"spawn.helpers.d.ts","sourceRoot":"","sources":["../../../src/multithreading/spawn/spawn.helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,SAAS,GAAG;IAC9D,SAAS,EAAE,kBAAkB,GAAG,eAAe,CAAC;CACjD,CAmFA;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,SAAS;;;;EA2BxD"}
1
+ {"version":3,"file":"spawn.helpers.d.ts","sourceRoot":"","sources":["../../../src/multithreading/spawn/spawn.helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,UAAU,GACjB;IACD,SAAS,EAAE,kBAAkB,GAAG,eAAe,CAAC;IAChD,OAAO,EAAE,OAAO,CAAC;CAClB,CAiCA;AAgHD,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,SAAS,GAAG;IAC9D,SAAS,EAAE,kBAAkB,GAAG,eAAe,CAAC;CACjD,CAEA;AAED,8EAA8E;AAC9E,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,SAAS;eA+BhB,kBAAkB,GAAG,eAAe;EAG5E"}
@@ -1,93 +1,158 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getEventTypeForResult = getEventTypeForResult;
3
4
  exports.getTimeoutErrorEventType = getTimeoutErrorEventType;
4
5
  exports.getNoScriptEventType = getNoScriptEventType;
6
+ const constants_1 = require("../../common/constants");
5
7
  const extraction_1 = require("../../types/extraction");
6
8
  const loading_1 = require("../../types/loading");
7
9
  /**
8
- * Gets the event type for the timeout error.
9
- * @param {EventType} eventType - The event type to get the timeout error event type for
10
- * @returns {ExtractorEventType | LoaderEventType} The event type for the timeout error
10
+ * Resolves the outgoing event type to emit for an incoming event type and a
11
+ * {@link TaskResult} status. Resumable phases honor every status
12
+ * (success/progress/delay/error -> *_DONE/*_PROGRESS/*_DELAYED/*_ERROR);
13
+ * non-resumable phases only have done/error, so `progress`/`delay` there is
14
+ * illegal and maps to the phase's error event.
11
15
  */
16
+ function getEventTypeForResult(eventType, status) {
17
+ const phase = EVENT_PHASE_MAP[eventType];
18
+ if (!phase) {
19
+ console.error('Event type not recognized in getEventTypeForResult function: ' +
20
+ eventType);
21
+ return {
22
+ eventType: constants_1.UNKNOWN_EVENT_TYPE,
23
+ illegal: true,
24
+ };
25
+ }
26
+ // Non-resumable phases only define done/error events.
27
+ if (!phase.resumable) {
28
+ if (status === 'success') {
29
+ return { eventType: phase.done, illegal: false };
30
+ }
31
+ // progress/delay are illegal here; collapse them (and error) to the error event.
32
+ return { eventType: phase.error, illegal: status !== 'error' };
33
+ }
34
+ switch (status) {
35
+ case 'success':
36
+ return { eventType: phase.done, illegal: false };
37
+ case 'progress':
38
+ return { eventType: phase.progress, illegal: false };
39
+ case 'delay':
40
+ return { eventType: phase.delayed, illegal: false };
41
+ case 'error':
42
+ return { eventType: phase.error, illegal: false };
43
+ }
44
+ }
45
+ /** Per-phase outgoing event types, keyed by the incoming {@link EventType}. */
46
+ const EVENT_PHASE_MAP = {
47
+ [extraction_1.EventType.StartExtractingExternalSyncUnits]: {
48
+ resumable: false,
49
+ done: extraction_1.ExtractorEventType.ExternalSyncUnitExtractionDone,
50
+ error: extraction_1.ExtractorEventType.ExternalSyncUnitExtractionError,
51
+ },
52
+ [extraction_1.EventType.StartExtractingMetadata]: {
53
+ resumable: true,
54
+ done: extraction_1.ExtractorEventType.MetadataExtractionDone,
55
+ error: extraction_1.ExtractorEventType.MetadataExtractionError,
56
+ progress: extraction_1.ExtractorEventType.MetadataExtractionProgress,
57
+ delayed: extraction_1.ExtractorEventType.MetadataExtractionDelayed,
58
+ },
59
+ [extraction_1.EventType.ContinueExtractingMetadata]: {
60
+ resumable: true,
61
+ done: extraction_1.ExtractorEventType.MetadataExtractionDone,
62
+ error: extraction_1.ExtractorEventType.MetadataExtractionError,
63
+ progress: extraction_1.ExtractorEventType.MetadataExtractionProgress,
64
+ delayed: extraction_1.ExtractorEventType.MetadataExtractionDelayed,
65
+ },
66
+ [extraction_1.EventType.StartExtractingData]: {
67
+ resumable: true,
68
+ done: extraction_1.ExtractorEventType.DataExtractionDone,
69
+ error: extraction_1.ExtractorEventType.DataExtractionError,
70
+ progress: extraction_1.ExtractorEventType.DataExtractionProgress,
71
+ delayed: extraction_1.ExtractorEventType.DataExtractionDelayed,
72
+ },
73
+ [extraction_1.EventType.ContinueExtractingData]: {
74
+ resumable: true,
75
+ done: extraction_1.ExtractorEventType.DataExtractionDone,
76
+ error: extraction_1.ExtractorEventType.DataExtractionError,
77
+ progress: extraction_1.ExtractorEventType.DataExtractionProgress,
78
+ delayed: extraction_1.ExtractorEventType.DataExtractionDelayed,
79
+ },
80
+ [extraction_1.EventType.StartDeletingExtractorState]: {
81
+ resumable: false,
82
+ done: extraction_1.ExtractorEventType.ExtractorStateDeletionDone,
83
+ error: extraction_1.ExtractorEventType.ExtractorStateDeletionError,
84
+ },
85
+ [extraction_1.EventType.StartExtractingAttachments]: {
86
+ resumable: true,
87
+ done: extraction_1.ExtractorEventType.AttachmentExtractionDone,
88
+ error: extraction_1.ExtractorEventType.AttachmentExtractionError,
89
+ progress: extraction_1.ExtractorEventType.AttachmentExtractionProgress,
90
+ delayed: extraction_1.ExtractorEventType.AttachmentExtractionDelayed,
91
+ },
92
+ [extraction_1.EventType.ContinueExtractingAttachments]: {
93
+ resumable: true,
94
+ done: extraction_1.ExtractorEventType.AttachmentExtractionDone,
95
+ error: extraction_1.ExtractorEventType.AttachmentExtractionError,
96
+ progress: extraction_1.ExtractorEventType.AttachmentExtractionProgress,
97
+ delayed: extraction_1.ExtractorEventType.AttachmentExtractionDelayed,
98
+ },
99
+ [extraction_1.EventType.StartDeletingExtractorAttachmentsState]: {
100
+ resumable: false,
101
+ done: extraction_1.ExtractorEventType.ExtractorAttachmentsStateDeletionDone,
102
+ error: extraction_1.ExtractorEventType.ExtractorAttachmentsStateDeletionError,
103
+ },
104
+ [extraction_1.EventType.StartLoadingData]: {
105
+ resumable: true,
106
+ done: loading_1.LoaderEventType.DataLoadingDone,
107
+ error: loading_1.LoaderEventType.DataLoadingError,
108
+ progress: loading_1.LoaderEventType.DataLoadingProgress,
109
+ delayed: loading_1.LoaderEventType.DataLoadingDelayed,
110
+ },
111
+ [extraction_1.EventType.ContinueLoadingData]: {
112
+ resumable: true,
113
+ done: loading_1.LoaderEventType.DataLoadingDone,
114
+ error: loading_1.LoaderEventType.DataLoadingError,
115
+ progress: loading_1.LoaderEventType.DataLoadingProgress,
116
+ delayed: loading_1.LoaderEventType.DataLoadingDelayed,
117
+ },
118
+ [extraction_1.EventType.StartLoadingAttachments]: {
119
+ resumable: true,
120
+ done: loading_1.LoaderEventType.AttachmentLoadingDone,
121
+ error: loading_1.LoaderEventType.AttachmentLoadingError,
122
+ progress: loading_1.LoaderEventType.AttachmentLoadingProgress,
123
+ delayed: loading_1.LoaderEventType.AttachmentLoadingDelayed,
124
+ },
125
+ [extraction_1.EventType.ContinueLoadingAttachments]: {
126
+ resumable: true,
127
+ done: loading_1.LoaderEventType.AttachmentLoadingDone,
128
+ error: loading_1.LoaderEventType.AttachmentLoadingError,
129
+ progress: loading_1.LoaderEventType.AttachmentLoadingProgress,
130
+ delayed: loading_1.LoaderEventType.AttachmentLoadingDelayed,
131
+ },
132
+ [extraction_1.EventType.StartDeletingLoaderState]: {
133
+ resumable: false,
134
+ done: loading_1.LoaderEventType.LoaderStateDeletionDone,
135
+ error: loading_1.LoaderEventType.LoaderStateDeletionError,
136
+ },
137
+ [extraction_1.EventType.StartDeletingLoaderAttachmentState]: {
138
+ resumable: false,
139
+ done: loading_1.LoaderEventType.LoaderAttachmentStateDeletionDone,
140
+ error: loading_1.LoaderEventType.LoaderAttachmentStateDeletionError,
141
+ },
142
+ };
12
143
  function getTimeoutErrorEventType(eventType) {
144
+ return { eventType: getEventTypeForResult(eventType, 'error').eventType };
145
+ }
146
+ /** Event type to emit when no worker script exists for the incoming event. */
147
+ function getNoScriptEventType(eventType) {
13
148
  switch (eventType) {
14
- // Metadata extraction (handles both old and new enum members)
149
+ // A missing metadata worker is a misconfigured connector, so report it as a
150
+ // phase error rather than an unknown event type.
15
151
  case extraction_1.EventType.StartExtractingMetadata:
16
- case extraction_1.EventType.ExtractionMetadataStart:
152
+ case extraction_1.EventType.ContinueExtractingMetadata:
17
153
  return {
18
154
  eventType: extraction_1.ExtractorEventType.MetadataExtractionError,
19
155
  };
20
- // Data extraction (handles both old and new enum members)
21
- case extraction_1.EventType.StartExtractingData:
22
- case extraction_1.EventType.ContinueExtractingData:
23
- case extraction_1.EventType.ExtractionDataStart:
24
- case extraction_1.EventType.ExtractionDataContinue:
25
- return {
26
- eventType: extraction_1.ExtractorEventType.DataExtractionError,
27
- };
28
- // Data deletion (handles both old and new enum members)
29
- case extraction_1.EventType.StartDeletingExtractorState:
30
- case extraction_1.EventType.ExtractionDataDelete:
31
- return {
32
- eventType: extraction_1.ExtractorEventType.ExtractorStateDeletionError,
33
- };
34
- // Attachments extraction (handles both old and new enum members)
35
- case extraction_1.EventType.StartExtractingAttachments:
36
- case extraction_1.EventType.ContinueExtractingAttachments:
37
- case extraction_1.EventType.ExtractionAttachmentsStart:
38
- case extraction_1.EventType.ExtractionAttachmentsContinue:
39
- return {
40
- eventType: extraction_1.ExtractorEventType.AttachmentExtractionError,
41
- };
42
- // Attachments deletion (handles both old and new enum members)
43
- case extraction_1.EventType.StartDeletingExtractorAttachmentsState:
44
- case extraction_1.EventType.ExtractionAttachmentsDelete:
45
- return {
46
- eventType: extraction_1.ExtractorEventType.ExtractorAttachmentsStateDeletionError,
47
- };
48
- // External sync units (handles both old and new enum members)
49
- case extraction_1.EventType.StartExtractingExternalSyncUnits:
50
- case extraction_1.EventType.ExtractionExternalSyncUnitsStart:
51
- return {
52
- eventType: extraction_1.ExtractorEventType.ExternalSyncUnitExtractionError,
53
- };
54
- // Loading data
55
- case extraction_1.EventType.StartLoadingData:
56
- case extraction_1.EventType.ContinueLoadingData:
57
- return {
58
- eventType: loading_1.LoaderEventType.DataLoadingError,
59
- };
60
- // Deleting loader state
61
- case extraction_1.EventType.StartDeletingLoaderState:
62
- return {
63
- eventType: loading_1.LoaderEventType.LoaderStateDeletionError,
64
- };
65
- // Loading attachments
66
- case extraction_1.EventType.StartLoadingAttachments:
67
- case extraction_1.EventType.ContinueLoadingAttachments:
68
- return {
69
- eventType: loading_1.LoaderEventType.AttachmentLoadingError,
70
- };
71
- // Deleting loader attachment state
72
- case extraction_1.EventType.StartDeletingLoaderAttachmentState:
73
- return {
74
- eventType: loading_1.LoaderEventType.LoaderAttachmentStateDeletionError,
75
- };
76
- default:
77
- console.error('Event type not recognized in getTimeoutErrorEventType function: ' +
78
- eventType);
79
- return {
80
- eventType: loading_1.LoaderEventType.UnknownEventType,
81
- };
82
- }
83
- }
84
- /**
85
- * Gets the event type for the no script error.
86
- * @param {EventType} eventType - The event type to get the no script error event type for
87
- * @returns {ExtractorEventType | LoaderEventType} The event type for the no script error
88
- */
89
- function getNoScriptEventType(eventType) {
90
- switch (eventType) {
91
156
  case extraction_1.EventType.StartDeletingExtractorState:
92
157
  return {
93
158
  eventType: extraction_1.ExtractorEventType.ExtractorStateDeletionDone,
@@ -108,7 +173,7 @@ function getNoScriptEventType(eventType) {
108
173
  console.error('Event type not recognized in getNoScriptEventType function: ' +
109
174
  eventType);
110
175
  return {
111
- eventType: loading_1.LoaderEventType.UnknownEventType,
176
+ eventType: constants_1.UNKNOWN_EVENT_TYPE,
112
177
  };
113
178
  }
114
179
  }
@@ -1,21 +1,36 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.Spawn = void 0;
4
+ exports.isLocalDevelopment = isLocalDevelopment;
7
5
  exports.spawn = spawn;
8
- const yargs_1 = __importDefault(require("yargs"));
9
- const helpers_1 = require("yargs/helpers");
10
- const control_protocol_1 = require("../../common/control-protocol");
11
- const event_type_translation_1 = require("../../common/event-type-translation");
12
- const helpers_2 = require("../../common/helpers");
6
+ const constants_1 = require("../../common/constants");
7
+ const helpers_1 = require("../../common/helpers");
13
8
  const logger_1 = require("../../logger/logger");
14
9
  const extraction_1 = require("../../types/extraction");
15
10
  const workers_1 = require("../../types/workers");
16
- const constants_1 = require("../../common/constants");
17
11
  const create_worker_1 = require("../create-worker");
12
+ const emit_1 = require("../emit");
18
13
  const spawn_helpers_1 = require("./spawn.helpers");
14
+ const LAMBDA_ENV_MARKERS = [
15
+ 'AWS_LAMBDA_FUNCTION_NAME',
16
+ 'AWS_EXECUTION_ENV',
17
+ 'LAMBDA_TASK_ROOT',
18
+ ];
19
+ /**
20
+ * Local mode is opt-in through AIRSYNC_LOCAL_DEVELOPMENT only, and refused on
21
+ * Lambda so a stray flag can never change production behavior.
22
+ */
23
+ function isLocalDevelopment(env = process.env) {
24
+ if (env.AIRSYNC_LOCAL_DEVELOPMENT !== '1') {
25
+ return false;
26
+ }
27
+ const marker = LAMBDA_ENV_MARKERS.find((name) => env[name]);
28
+ if (marker) {
29
+ console.warn(`Ignoring AIRSYNC_LOCAL_DEVELOPMENT because ${marker} is set (running on Lambda).`);
30
+ return false;
31
+ }
32
+ return true;
33
+ }
19
34
  function getWorkerPath({ event, workerBasePath, }) {
20
35
  let path = null;
21
36
  switch (event.payload.event_type) {
@@ -23,6 +38,7 @@ function getWorkerPath({ event, workerBasePath, }) {
23
38
  path = '/workers/external-sync-units-extraction';
24
39
  break;
25
40
  case extraction_1.EventType.StartExtractingMetadata:
41
+ case extraction_1.EventType.ContinueExtractingMetadata:
26
42
  path = '/workers/metadata-extraction';
27
43
  break;
28
44
  case extraction_1.EventType.StartExtractingData:
@@ -45,55 +61,22 @@ function getWorkerPath({ event, workerBasePath, }) {
45
61
  return path ? workerBasePath + path : null;
46
62
  }
47
63
  /**
48
- * Creates a new instance of Spawn class.
49
- * Spawn class is responsible for spawning a new worker thread and managing the lifecycle of the worker.
50
- * The class provides utilities to emit control events to the platform and exit the worker gracefully.
51
- * In case of lambda timeout, the class emits a lambda timeout event to the platform.
52
- * @param {SpawnFactoryInterface} options - The options to create a new instance of Spawn class
53
- * @param {AirdropEvent} options.event - The event object received from the platform
54
- * @param {object} options.initialState - The initial state of the adapter
55
- * @param {string} [options.workerPath] Remove getWorkerPath function and use baseWorkerPath: __dirname instead of workerPath
56
- * @param {string} [options.baseWorkerPath] - The base path for the worker files, usually `__dirname`
57
- * @returns {Promise<Spawn>} - A new instance of Spawn class
64
+ * Spawns a worker thread for the event and manages its lifecycle (control
65
+ * events, graceful exit, lambda timeout handling). Resolves when the worker
66
+ * run is fully finished.
58
67
  */
59
- async function spawn({ event, initialState, workerPath, initialDomainMapping, options, baseWorkerPath, }) {
60
- // Translate incoming event type for backwards compatibility. This allows the
61
- // SDK to accept both old and new event type formats. Then update the event with the translated event type.
62
- const originalEventType = event.payload.event_type;
63
- const translatedEventType = (0, event_type_translation_1.translateIncomingEventType)(event.payload.event_type);
64
- event.payload.event_type = translatedEventType;
65
- // Read the command line arguments to check if the local flag is passed.
66
- const argv = await (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv)).argv;
67
- if (argv._.includes('local')) {
68
- options = Object.assign(Object.assign({}, (options || {})), { isLocalDevelopment: true });
69
- }
68
+ async function spawn({ event, initialState, initialDomainMapping, options: spawnOptions, baseWorkerPath, workerPathOverrides, }) {
69
+ const options = Object.assign(Object.assign({}, spawnOptions), { isLocalDevelopment: isLocalDevelopment() });
70
70
  const originalConsole = console;
71
71
  // eslint-disable-next-line no-global-assign
72
72
  console = new logger_1.Logger({ event, options });
73
- if (translatedEventType !== originalEventType) {
74
- console.log(`Event type translated from ${originalEventType} to ${translatedEventType}.`);
75
- }
76
73
  if (options === null || options === void 0 ? void 0 : options.isLocalDevelopment) {
77
74
  console.log('Snap-in is running in local development mode.');
78
75
  }
79
- let script = null;
80
- if (workerPath != null) {
81
- script = workerPath;
82
- }
83
- else if (baseWorkerPath != null &&
84
- (options === null || options === void 0 ? void 0 : options.workerPathOverrides) != null &&
85
- options.workerPathOverrides[translatedEventType] != null) {
86
- script =
87
- baseWorkerPath +
88
- options.workerPathOverrides[translatedEventType];
89
- }
90
- else {
91
- script = getWorkerPath({
92
- event,
93
- workerBasePath: baseWorkerPath !== null && baseWorkerPath !== void 0 ? baseWorkerPath : __dirname,
94
- });
95
- }
96
- // If a script is found for the event type, spawn a new worker.
76
+ const override = workerPathOverrides === null || workerPathOverrides === void 0 ? void 0 : workerPathOverrides[event.payload.event_type];
77
+ const script = override != null
78
+ ? baseWorkerPath + override
79
+ : getWorkerPath({ event, workerBasePath: baseWorkerPath });
97
80
  if (script) {
98
81
  try {
99
82
  const worker = await (0, create_worker_1.createWorker)({
@@ -122,7 +105,7 @@ async function spawn({ event, initialState, workerPath, initialDomainMapping, op
122
105
  }
123
106
  else {
124
107
  const { eventType } = (0, spawn_helpers_1.getNoScriptEventType)(event.payload.event_type);
125
- await (0, control_protocol_1.emit)({
108
+ await (0, emit_1.emit)({
126
109
  event,
127
110
  eventType,
128
111
  });
@@ -143,7 +126,7 @@ class Spawn {
143
126
  ? Math.min(options.timeout, this.defaultLambdaTimeout)
144
127
  : this.defaultLambdaTimeout;
145
128
  this.resolve = resolve;
146
- // If soft timeout is reached, send a message to the worker to gracefully exit.
129
+ // Soft timeout: ask the worker to gracefully exit.
147
130
  this.softTimeoutTimer = setTimeout(() => void (async () => {
148
131
  console.log('SOFT TIMEOUT: Sending a message to the worker to gracefully exit.');
149
132
  this.softTimeoutSent = true;
@@ -157,7 +140,7 @@ class Spawn {
157
140
  await this.exitFromMainThread();
158
141
  }
159
142
  })(), this.lambdaTimeout);
160
- // If hard timeout is reached, that means the worker did not exit in time. Terminate the worker.
143
+ // Hard timeout: the worker did not exit in time, terminate it.
161
144
  this.hardTimeoutTimer = setTimeout(() => void (async () => {
162
145
  console.error('HARD TIMEOUT: Worker did not exit in time. Terminating the worker.');
163
146
  if (worker) {
@@ -168,13 +151,10 @@ class Spawn {
168
151
  await this.exitFromMainThread();
169
152
  }
170
153
  })(), this.lambdaTimeout * constants_1.HARD_TIMEOUT_MULTIPLIER);
171
- // If worker exits with process.exit(code), clear the timeouts and exit from
172
- // main thread. When a soft timeout was sent, we use setImmediate to defer
173
- // processing so that any pending WorkerMessage events (e.g.
174
- // WorkerMessageEmitted from onTimeout) already queued in the event loop are
175
- // handled first, preventing a race condition where exitFromMainThread sees
176
- // alreadyEmitted=false and emits an error even though the worker
177
- // successfully emitted an event.
154
+ // After a soft timeout, defer exit handling via setImmediate so pending
155
+ // WorkerMessage events (e.g. WorkerMessageEmitted from onTimeout) are
156
+ // handled first; otherwise exitFromMainThread could see
157
+ // alreadyEmitted=false and emit a spurious error.
178
158
  worker.on(workers_1.WorkerEvent.WorkerExit, (code) => {
179
159
  const handler = async () => {
180
160
  console.info('Worker exited with exit code: ' + code + '.');
@@ -189,32 +169,32 @@ class Spawn {
189
169
  }
190
170
  });
191
171
  worker.on(workers_1.WorkerEvent.WorkerMessage, (message) => {
192
- var _a, _b, _c, _d;
193
- // Since logs from the worker thread are handled differently in snap-in
194
- // platform, we need to catch the log messages from worker thread and log
195
- // them in main thread.
172
+ var _a, _b, _c;
173
+ // The snap-in platform handles worker-thread logs differently, so worker
174
+ // log messages are re-logged in the main thread.
196
175
  if ((message === null || message === void 0 ? void 0 : message.subject) === workers_1.WorkerMessageSubject.WorkerMessageLog) {
197
176
  const stringifiedArgs = (_a = message.payload) === null || _a === void 0 ? void 0 : _a.stringifiedArgs;
198
177
  const level = (_b = message.payload) === null || _b === void 0 ? void 0 : _b.level;
199
- const isSdkLog = (_d = (_c = message.payload) === null || _c === void 0 ? void 0 : _c.isSdkLog) !== null && _d !== void 0 ? _d : false;
200
- this.logger.logFn(stringifiedArgs, level, isSdkLog);
178
+ this.logger.logFn(stringifiedArgs, level);
201
179
  }
202
- // If worker sends a message that it has emitted an event, then set alreadyEmitted to true.
203
180
  if ((message === null || message === void 0 ? void 0 : message.subject) === workers_1.WorkerMessageSubject.WorkerMessageEmitted) {
204
- console.info('Worker has emitted message to ADaaS.');
181
+ console.info('Worker has emitted message to AirSync.');
205
182
  this.alreadyEmitted = true;
206
183
  }
184
+ // Capture the worker's failure reason for use in the error event.
185
+ if ((message === null || message === void 0 ? void 0 : message.subject) === workers_1.WorkerMessageSubject.WorkerMessageFailed) {
186
+ this.workerFailedMessage = (_c = message.payload) === null || _c === void 0 ? void 0 : _c.message;
187
+ }
207
188
  });
208
- // Log memory usage every 30 seconds
209
189
  this.memoryMonitoringInterval = setInterval(() => {
210
190
  try {
211
- const memoryInfo = (0, helpers_2.getMemoryUsage)();
191
+ const memoryInfo = (0, helpers_1.getMemoryUsage)();
212
192
  if (memoryInfo) {
213
193
  console.info(memoryInfo.formattedMessage);
214
194
  }
215
195
  }
216
196
  catch (error) {
217
- // If memory monitoring fails, log the warning and clear the interval to prevent further issues
197
+ // Stop monitoring on failure to prevent repeated crashes
218
198
  console.warn('Memory monitoring failed, stopping logging of memory usage interval', error);
219
199
  if (this.memoryMonitoringInterval) {
220
200
  clearInterval(this.memoryMonitoringInterval);
@@ -245,20 +225,24 @@ class Spawn {
245
225
  this.alreadyEmitted = true;
246
226
  const { eventType } = (0, spawn_helpers_1.getTimeoutErrorEventType)(this.event.payload.event_type);
247
227
  try {
248
- await (0, control_protocol_1.emit)({
228
+ await (0, emit_1.emit)({
249
229
  eventType,
250
230
  event: this.event,
251
231
  data: {
252
232
  error: {
253
- message: 'Worker exited the process without emitting an event. Check other logs for more information.',
233
+ message: `Worker exited without emitting event. ${this.workerFailedMessage
234
+ ? `Error: ${this.workerFailedMessage}`
235
+ : 'Check the logs for more information.'}`,
254
236
  },
255
237
  },
256
238
  });
257
- this.resolve();
258
239
  }
259
240
  catch (error) {
260
241
  console.error('Error while emitting event.', (0, logger_1.serializeError)(error));
261
242
  }
243
+ finally {
244
+ this.resolve();
245
+ }
262
246
  }
263
247
  }
264
248
  exports.Spawn = Spawn;
@@ -1,9 +1,20 @@
1
1
  "use strict";
2
2
  const { workerData } = require('node:worker_threads');
3
- require('ts-node').register();
3
+ let resolvedWorkerPath;
4
+ try {
5
+ resolvedWorkerPath = require.resolve(workerData.workerPath);
6
+ }
7
+ catch (_a) {
8
+ // Unresolvable without a TypeScript loader, so the worker is a .ts file.
9
+ }
10
+ if (!resolvedWorkerPath || resolvedWorkerPath.endsWith('.ts')) {
11
+ try {
12
+ require('ts-node').register();
13
+ }
14
+ catch (error) {
15
+ throw new Error(`Worker ${workerData.workerPath} needs ts-node to run TypeScript. Install ts-node or point the worker at compiled JavaScript. ${error.message}`);
16
+ }
17
+ }
4
18
  const { Logger } = require('../logger/logger');
5
- const { runWithUserLogContext } = require('../logger/logger.context');
6
19
  console = new Logger({ event: workerData.event, options: workerData.options });
7
- runWithUserLogContext(() => {
8
- require(workerData.workerPath);
9
- });
20
+ require(workerData.workerPath);
@@ -1,7 +1,6 @@
1
1
  import { Item } from '../repo/repo.interfaces';
2
- import { ErrorRecord } from '../types/common';
3
2
  import { Artifact } from '../uploader/uploader.interfaces';
4
- import { NormalizedAttachment, NormalizedItem, RepoFactoryInterface } from './repo.interfaces';
3
+ import { NormalizedAttachment, NormalizedItem } from './repo.interfaces';
5
4
  export declare class Repo {
6
5
  readonly itemType: string;
7
6
  private items;
@@ -10,9 +9,19 @@ export declare class Repo {
10
9
  private onUpload;
11
10
  private options?;
12
11
  uploadedArtifacts: Artifact[];
13
- constructor({ event, itemType, normalize, onUpload, options, }: RepoFactoryInterface);
12
+ dateRanges: {
13
+ creationDate: {
14
+ oldest?: number;
15
+ newest?: number;
16
+ };
17
+ modifiedDate: {
18
+ oldest?: number;
19
+ newest?: number;
20
+ };
21
+ };
14
22
  getItems(): (NormalizedItem | NormalizedAttachment | Item)[];
15
- upload(batch?: (NormalizedItem | NormalizedAttachment | Item)[]): Promise<void | ErrorRecord>;
16
- push(items: Item[]): Promise<boolean>;
23
+ upload(batch?: (NormalizedItem | NormalizedAttachment | Item)[]): Promise<void>;
24
+ /** Buffers items and uploads every full batch. Throws if an upload fails. */
25
+ push(items: Item[]): Promise<void>;
17
26
  }
18
27
  //# sourceMappingURL=repo.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"repo.d.ts","sourceRoot":"","sources":["../../src/repo/repo.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAG3D,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,oBAAoB,EACrB,MAAM,mBAAmB,CAAC;AAE3B,qBAAa,IAAI;IACf,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,KAAK,CAAmD;IAChE,OAAO,CAAC,SAAS,CAAC,CAAwD;IAC1E,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,OAAO,CAAC,CAAuB;IAChC,iBAAiB,EAAE,QAAQ,EAAE,CAAC;gBAEzB,EACV,KAAK,EACL,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,OAAO,GACR,EAAE,oBAAoB;IAUvB,QAAQ,IAAI,CAAC,cAAc,GAAG,oBAAoB,GAAG,IAAI,CAAC,EAAE;IAItD,MAAM,CACV,KAAK,CAAC,EAAE,CAAC,cAAc,GAAG,oBAAoB,GAAG,IAAI,CAAC,EAAE,GACvD,OAAO,CAAC,IAAI,GAAG,WAAW,CAAC;IAqCxB,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAuC5C"}
1
+ {"version":3,"file":"repo.d.ts","sourceRoot":"","sources":["../../src/repo/repo.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAG/C,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAG3D,OAAO,EACL,oBAAoB,EACpB,cAAc,EAEf,MAAM,mBAAmB,CAAC;AAE3B,qBAAa,IAAI;IACf,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,KAAK,CAAmD;IAChE,OAAO,CAAC,SAAS,CAAC,CAAwD;IAC1E,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,OAAO,CAAC,CAAiB;IAC1B,iBAAiB,EAAE,QAAQ,EAAE,CAAC;IAC9B,UAAU,EAAE;QACjB,YAAY,EAAE;YAAE,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACnD,YAAY,EAAE;YAAE,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KACpD,CAGC;IAoBF,QAAQ,IAAI,CAAC,cAAc,GAAG,oBAAoB,GAAG,IAAI,CAAC,EAAE;IAItD,MAAM,CACV,KAAK,CAAC,EAAE,CAAC,cAAc,GAAG,oBAAoB,GAAG,IAAI,CAAC,EAAE,GACvD,OAAO,CAAC,IAAI,CAAC;IA2DhB,6EAA6E;IACvE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CA6BzC"}
@@ -0,0 +1,6 @@
1
+ export declare function updateRange(range: {
2
+ oldest?: number;
3
+ newest?: number;
4
+ }, ms: number): void;
5
+ export declare function toValidTimestamp(value: string): number | undefined;
6
+ //# sourceMappingURL=repo.helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo.helpers.d.ts","sourceRoot":"","sources":["../../src/repo/repo.helpers.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CACzB,KAAK,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAC3C,EAAE,EAAE,MAAM,GACT,IAAI,CAON;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGlE"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateRange = updateRange;
4
+ exports.toValidTimestamp = toValidTimestamp;
5
+ function updateRange(range, ms) {
6
+ if (range.oldest === undefined || ms < range.oldest) {
7
+ range.oldest = ms;
8
+ }
9
+ if (range.newest === undefined || ms > range.newest) {
10
+ range.newest = ms;
11
+ }
12
+ }
13
+ function toValidTimestamp(value) {
14
+ const ms = new Date(value).getTime();
15
+ return Number.isFinite(ms) ? ms : undefined;
16
+ }