@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,224 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const constants_1 = require("../common/constants");
4
- const test_helpers_1 = require("../tests/test-helpers");
5
- const extraction_1 = require("../types/extraction");
6
- const state_1 = require("./state");
7
- const state_interfaces_1 = require("./state.interfaces");
8
- /* eslint-disable @typescript-eslint/no-require-imports */
9
- describe(state_1.State.name, () => {
10
- let initSpy;
11
- let postStateSpy;
12
- let fetchStateSpy;
13
- let installInitialDomainMappingSpy;
14
- let processExitSpy;
15
- beforeEach(() => {
16
- jest.clearAllMocks();
17
- jest.restoreAllMocks();
18
- initSpy = jest.spyOn(state_1.State.prototype, 'init');
19
- postStateSpy = jest.spyOn(state_1.State.prototype, 'postState');
20
- fetchStateSpy = jest.spyOn(state_1.State.prototype, 'fetchState');
21
- installInitialDomainMappingSpy = jest.spyOn(require('../common/install-initial-domain-mapping'), 'installInitialDomainMapping');
22
- processExitSpy = jest.spyOn(process, 'exit').mockImplementation(() => {
23
- throw new Error('process.exit called');
24
- });
25
- });
26
- it.each(constants_1.STATELESS_EVENT_TYPES)('should not init, fetch, post or install IDM for stateless event type %s', async (eventType) => {
27
- // Arrange
28
- const event = (0, test_helpers_1.createEvent)({
29
- eventType: eventType,
30
- });
31
- // Act
32
- await (0, state_1.createAdapterState)({
33
- event,
34
- initialState: {},
35
- initialDomainMapping: {},
36
- });
37
- // Assert
38
- expect(initSpy).not.toHaveBeenCalled();
39
- expect(fetchStateSpy).not.toHaveBeenCalled();
40
- expect(postStateSpy).not.toHaveBeenCalled();
41
- expect(installInitialDomainMappingSpy).not.toHaveBeenCalled();
42
- });
43
- it.each(constants_1.STATEFUL_EVENT_TYPES)('should exit the process if fetching the state fails', async (eventType) => {
44
- // Arrange
45
- const event = (0, test_helpers_1.createEvent)({
46
- eventType: eventType,
47
- });
48
- fetchStateSpy.mockRejectedValue({
49
- isAxiosError: true,
50
- response: { status: 500 },
51
- });
52
- jest.spyOn(console, 'error').mockImplementation(() => { });
53
- // Act & Assert
54
- await expect((0, state_1.createAdapterState)({
55
- event,
56
- initialState: {},
57
- initialDomainMapping: {},
58
- })).rejects.toThrow('process.exit called');
59
- expect(processExitSpy).toHaveBeenCalledWith(1);
60
- });
61
- it.each(constants_1.STATEFUL_EVENT_TYPES)('should exit the process if parsing the state fails', async (eventType) => {
62
- // Arrange
63
- const event = (0, test_helpers_1.createEvent)({
64
- eventType: eventType,
65
- });
66
- fetchStateSpy.mockResolvedValue('invalid-json');
67
- jest.spyOn(console, 'error').mockImplementation(() => { });
68
- // Act & Assert
69
- await expect((0, state_1.createAdapterState)({
70
- event,
71
- initialState: {},
72
- initialDomainMapping: {},
73
- })).rejects.toThrow('process.exit called');
74
- expect(processExitSpy).toHaveBeenCalledWith(1);
75
- });
76
- it.each(constants_1.STATEFUL_EVENT_TYPES)('should exit the process if fetching is successful but there is no state in the response', async (eventType) => {
77
- // Arrange
78
- const event = (0, test_helpers_1.createEvent)({
79
- eventType: eventType,
80
- });
81
- fetchStateSpy.mockResolvedValue(null);
82
- jest.spyOn(console, 'error').mockImplementation(() => { });
83
- // Act & Assert
84
- await expect((0, state_1.createAdapterState)({
85
- event,
86
- initialState: {},
87
- initialDomainMapping: {},
88
- })).rejects.toThrow('process.exit called');
89
- expect(processExitSpy).toHaveBeenCalledWith(1);
90
- });
91
- it.each(constants_1.STATEFUL_EVENT_TYPES.filter((eventType) => eventType !== extraction_1.EventType.StartExtractingData))('should call post state with full adapter state if fetching returns 404 for event type %s', async (eventType) => {
92
- // Arrange
93
- const initialState = {
94
- test: 'test',
95
- };
96
- const event = (0, test_helpers_1.createEvent)({
97
- eventType: eventType,
98
- contextOverrides: {
99
- snap_in_version_id: '',
100
- },
101
- });
102
- fetchStateSpy.mockRejectedValue({
103
- isAxiosError: true,
104
- response: { status: 404 },
105
- });
106
- installInitialDomainMappingSpy.mockResolvedValue({
107
- success: true,
108
- });
109
- postStateSpy.mockResolvedValue({
110
- success: true,
111
- });
112
- jest.spyOn(console, 'log').mockImplementation(() => { });
113
- // Act
114
- await (0, state_1.createAdapterState)({
115
- event,
116
- initialState,
117
- initialDomainMapping: {},
118
- });
119
- const expectedState = Object.assign(Object.assign({}, initialState), state_interfaces_1.extractionSdkState);
120
- expect(postStateSpy).toHaveBeenCalledWith(expectedState);
121
- });
122
- it(extraction_1.EventType.StartExtractingData, async () => {
123
- // Arrange
124
- const initialState = {
125
- test: 'test',
126
- };
127
- const event = (0, test_helpers_1.createEvent)({
128
- eventType: extraction_1.EventType.StartExtractingData,
129
- contextOverrides: {
130
- snap_in_version_id: '',
131
- },
132
- });
133
- fetchStateSpy.mockRejectedValue({
134
- isAxiosError: true,
135
- response: { status: 404 },
136
- });
137
- installInitialDomainMappingSpy.mockResolvedValue({
138
- success: true,
139
- });
140
- postStateSpy.mockResolvedValue({
141
- success: true,
142
- });
143
- jest.spyOn(console, 'log').mockImplementation(() => { });
144
- // Act
145
- await (0, state_1.createAdapterState)({
146
- event,
147
- initialState,
148
- initialDomainMapping: {},
149
- });
150
- // Assert
151
- // Verify that post state is called with object that contains
152
- // lastSyncStarted which is not empty string
153
- expect(postStateSpy).toHaveBeenCalledWith(expect.objectContaining({
154
- lastSyncStarted: expect.not.stringMatching(/^$/),
155
- }));
156
- });
157
- it.each(constants_1.STATEFUL_EVENT_TYPES)('should exit the process if initialDomainMapping is not provided for event type %s', async (eventType) => {
158
- // Arrange
159
- const event = (0, test_helpers_1.createEvent)({
160
- eventType: eventType,
161
- });
162
- fetchStateSpy.mockResolvedValue(JSON.stringify({
163
- test: 'test',
164
- }));
165
- jest.spyOn(console, 'log').mockImplementation(() => { });
166
- jest.spyOn(console, 'error').mockImplementation(() => { });
167
- // Act & Assert
168
- await expect((0, state_1.createAdapterState)({
169
- event,
170
- initialState: {},
171
- initialDomainMapping: undefined,
172
- })).rejects.toThrow('process.exit called');
173
- expect(processExitSpy).toHaveBeenCalledWith(1);
174
- });
175
- it.each(constants_1.STATEFUL_EVENT_TYPES)('should not install IDM if version matches for event type %s', async (eventType) => {
176
- // Arrange
177
- const event = (0, test_helpers_1.createEvent)({
178
- eventType: eventType,
179
- contextOverrides: {
180
- snap_in_version_id: '1.0.0',
181
- },
182
- });
183
- const stringifiedState = JSON.stringify({
184
- test: 'test',
185
- snapInVersionId: '1.0.0',
186
- });
187
- fetchStateSpy.mockResolvedValue(stringifiedState);
188
- jest.spyOn(console, 'log').mockImplementation(() => { });
189
- // Act & Assert
190
- await (0, state_1.createAdapterState)({
191
- event,
192
- initialState: {},
193
- initialDomainMapping: {},
194
- });
195
- // Assert
196
- expect(installInitialDomainMappingSpy).not.toHaveBeenCalled();
197
- });
198
- it.each(constants_1.STATEFUL_EVENT_TYPES)('should install IDM if version does not match for event type %s', async (eventType) => {
199
- // Arrange
200
- const event = (0, test_helpers_1.createEvent)({
201
- eventType: eventType,
202
- contextOverrides: {
203
- snap_in_version_id: '2.0.0',
204
- },
205
- });
206
- const stringifiedState = JSON.stringify({
207
- test: 'test',
208
- snapInVersionId: '1.0.0',
209
- });
210
- fetchStateSpy.mockResolvedValue(stringifiedState);
211
- installInitialDomainMappingSpy.mockResolvedValue({
212
- success: true,
213
- });
214
- jest.spyOn(console, 'log').mockImplementation(() => { });
215
- // Act
216
- await (0, state_1.createAdapterState)({
217
- event,
218
- initialState: {},
219
- initialDomainMapping: {},
220
- });
221
- // Assert
222
- expect(installInitialDomainMappingSpy).toHaveBeenCalled();
223
- });
224
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=extraction.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extraction.test.d.ts","sourceRoot":"","sources":["../../src/types/extraction.test.ts"],"names":[],"mappings":""}
@@ -1,70 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const test_helpers_1 = require("../tests/test-helpers");
4
- const extraction_1 = require("./extraction");
5
- // Test the EventContext interface and related extraction types
6
- describe('ExtractionTypes', () => {
7
- const baseEvent = (0, test_helpers_1.createEvent)({ eventType: extraction_1.EventType.ExtractionDataStart });
8
- it('should create event context without optional fields', () => {
9
- const event = Object.assign({}, baseEvent);
10
- // If this compiles, the test passes
11
- expect(event).toBeDefined();
12
- expect(event.payload.event_context).toBeDefined();
13
- });
14
- it('should create event context with all optional fields', () => {
15
- const event = Object.assign({}, baseEvent);
16
- event.payload.event_context = Object.assign(Object.assign({}, baseEvent.payload.event_context), { extract_from: '2024-01-01T00:00:00Z', initial_sync_scope: extraction_1.InitialSyncScope.TIME_SCOPED, reset_extract_from: true });
17
- expect(event).toBeDefined();
18
- expect(event.payload.event_context.extract_from).toBe('2024-01-01T00:00:00Z');
19
- expect(event.payload.event_context.initial_sync_scope).toBe(extraction_1.InitialSyncScope.TIME_SCOPED);
20
- expect(event.payload.event_context.reset_extract_from).toBe(true);
21
- });
22
- it('should create event context with partial optional fields', () => {
23
- const event = Object.assign({}, baseEvent);
24
- event.payload.event_context = Object.assign(Object.assign({}, baseEvent.payload.event_context), { extract_from: '2024-01-01T00:00:00Z' });
25
- expect(event).toBeDefined();
26
- expect(event.payload.event_context.extract_from).toBe('2024-01-01T00:00:00Z');
27
- });
28
- it('should handle different InitialSyncScope values', () => {
29
- const event = Object.assign({}, baseEvent);
30
- event.payload.event_context = Object.assign(Object.assign({}, baseEvent.payload.event_context), { initial_sync_scope: extraction_1.InitialSyncScope.FULL_HISTORY });
31
- expect(event.payload.event_context.initial_sync_scope).toBe(extraction_1.InitialSyncScope.FULL_HISTORY);
32
- });
33
- it('[edge] should handle null event context gracefully', () => {
34
- const event = Object.assign({}, baseEvent);
35
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
36
- event.payload.event_context = null;
37
- expect(event.payload.event_context).toBeNull();
38
- });
39
- it('[edge] should handle undefined optional fields', () => {
40
- const event = Object.assign({}, baseEvent);
41
- event.payload.event_context = Object.assign(Object.assign({}, baseEvent.payload.event_context), { extract_from: undefined, initial_sync_scope: undefined, reset_extract_from: undefined });
42
- expect(event.payload.event_context.extract_from).toBeUndefined();
43
- expect(event.payload.event_context.initial_sync_scope).toBeUndefined();
44
- expect(event.payload.event_context.reset_extract_from).toBeUndefined();
45
- });
46
- it('[edge] should handle invalid date format in extract_from', () => {
47
- const event = Object.assign({}, baseEvent);
48
- event.payload.event_context = Object.assign(Object.assign({}, baseEvent.payload.event_context), { extract_from: 'invalid-date-format' });
49
- expect(event.payload.event_context.extract_from).toBe('invalid-date-format');
50
- // Note: Type validation would typically happen at runtime, not compile time
51
- });
52
- it('[edge] should handle explicit boolean values for reset_extract_from', () => {
53
- const eventWithTrue = (0, test_helpers_1.createEvent)({
54
- eventType: extraction_1.EventType.ExtractionDataStart,
55
- eventContextOverrides: {
56
- reset_extract_from: true,
57
- },
58
- });
59
- const eventWithFalse = (0, test_helpers_1.createEvent)({
60
- eventType: extraction_1.EventType.ExtractionDataStart,
61
- eventContextOverrides: {
62
- reset_extract_from: false,
63
- },
64
- });
65
- expect(eventWithTrue.payload.event_context.reset_extract_from).toBe(true);
66
- expect(eventWithFalse.payload.event_context.reset_extract_from).toBe(false);
67
- expect(typeof eventWithTrue.payload.event_context.reset_extract_from).toBe('boolean');
68
- expect(typeof eventWithFalse.payload.event_context.reset_extract_from).toBe('boolean');
69
- });
70
- });
@@ -1,10 +0,0 @@
1
- export { AdapterUpdateParams, ErrorLevel, ErrorRecord, InitialDomainMapping, LogRecord, SyncMode, } from './common';
2
- export { AirdropEvent, AirdropMessage, ConnectionData, DomainObjectState, EventContextIn, EventContextOut, EventData, EventType, ExternalProcessAttachmentFunction, ExternalSyncUnit, ExternalSystemAttachmentIteratorFunction, ExternalSystemAttachmentReducerFunction, ExternalSystemAttachmentStreamingFunction, ExternalSystemAttachmentStreamingParams, ExternalSystemAttachmentStreamingResponse, ExtractionMode, ExtractorEvent, ExtractorEventType, ProcessAttachmentReturnType, } from './extraction';
3
- export { ExternalSystemAttachment, ExternalSystemItem, ExternalSystemItemLoadingParams, ExternalSystemItemLoadingResponse, LoaderEventType, } from './loading';
4
- export { NormalizedAttachment, NormalizedItem, RepoInterface, } from '../repo/repo.interfaces';
5
- export { AdapterState } from '../state/state.interfaces';
6
- export { Artifact, ArtifactsPrepareResponse, SsorAttachment, StreamAttachmentsResponse, StreamResponse, UploadResponse, } from '../uploader/uploader.interfaces';
7
- export type { MappersCreateParams, MappersGetByExternalIdParams, MappersGetByTargetIdParams, MappersUpdateParams, } from '../mappers/mappers.interface';
8
- export { SyncMapperRecordStatus, SyncMapperRecordTargetType, } from '../mappers/mappers.interface';
9
- export type { CollectionData, ConditionalPrivilegeData, CustomLinkData, CustomLinkNames, CustomStage, CustomState, EnumData, EnumValue, EnumValueKey, ExternalDomainMetadata, Field, FieldCondition, FieldConditionComparator, FieldConditionEffect, FieldConditions, FieldKey, FieldPrivilegeData, FieldReferenceData, FieldType, FloatData, IntData, PermissionData, RecordType, RecordTypeCategory, RecordTypeCategoryKey, RecordTypeKey, RecordTypePrivilegeData, RecordTypeScope, ReferenceData, ReferenceDetail, ReferenceType, SchemaVersion, StageKey, StageDiagram, StateKey, StructData, StructTypeKey, StructType, TargetTypeKeyData, TextData, TypedReferenceData, } from './external-domain-metadata';
10
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EACnB,UAAU,EACV,WAAW,EACX,oBAAoB,EACpB,SAAS,EACT,QAAQ,GACT,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,YAAY,EACZ,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,SAAS,EACT,SAAS,EACT,iCAAiC,EACjC,gBAAgB,EAChB,wCAAwC,EACxC,uCAAuC,EACvC,yCAAyC,EACzC,uCAAuC,EACvC,yCAAyC,EACzC,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,2BAA2B,GAC5B,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,+BAA+B,EAC/B,iCAAiC,EACjC,eAAe,GAChB,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,aAAa,GACd,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,OAAO,EACL,QAAQ,EACR,wBAAwB,EACxB,cAAc,EACd,yBAAyB,EACzB,cAAc,EACd,cAAc,GACf,MAAM,iCAAiC,CAAC;AAGzC,YAAY,EACV,mBAAmB,EACnB,4BAA4B,EAC5B,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,8BAA8B,CAAC;AAGtC,YAAY,EACV,cAAc,EACd,wBAAwB,EACxB,cAAc,EACd,eAAe,EACf,WAAW,EACX,WAAW,EACX,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,sBAAsB,EACtB,KAAK,EACL,cAAc,EACd,wBAAwB,EACxB,oBAAoB,EACpB,eAAe,EACf,QAAQ,EACR,kBAAkB,EAClB,kBAAkB,EAClB,SAAS,EACT,SAAS,EACT,OAAO,EACP,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,qBAAqB,EACrB,aAAa,EACb,uBAAuB,EACvB,eAAe,EACf,aAAa,EACb,eAAe,EACf,aAAa,EACb,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,QAAQ,EACR,kBAAkB,GACnB,MAAM,4BAA4B,CAAC"}
@@ -1,18 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SyncMapperRecordTargetType = exports.SyncMapperRecordStatus = exports.LoaderEventType = exports.ExtractorEventType = exports.ExtractionMode = exports.EventType = exports.SyncMode = exports.ErrorLevel = void 0;
4
- // Common
5
- var common_1 = require("./common");
6
- Object.defineProperty(exports, "ErrorLevel", { enumerable: true, get: function () { return common_1.ErrorLevel; } });
7
- Object.defineProperty(exports, "SyncMode", { enumerable: true, get: function () { return common_1.SyncMode; } });
8
- // Extraction
9
- var extraction_1 = require("./extraction");
10
- Object.defineProperty(exports, "EventType", { enumerable: true, get: function () { return extraction_1.EventType; } });
11
- Object.defineProperty(exports, "ExtractionMode", { enumerable: true, get: function () { return extraction_1.ExtractionMode; } });
12
- Object.defineProperty(exports, "ExtractorEventType", { enumerable: true, get: function () { return extraction_1.ExtractorEventType; } });
13
- // Loading
14
- var loading_1 = require("./loading");
15
- Object.defineProperty(exports, "LoaderEventType", { enumerable: true, get: function () { return loading_1.LoaderEventType; } });
16
- var mappers_interface_1 = require("../mappers/mappers.interface");
17
- Object.defineProperty(exports, "SyncMapperRecordStatus", { enumerable: true, get: function () { return mappers_interface_1.SyncMapperRecordStatus; } });
18
- Object.defineProperty(exports, "SyncMapperRecordTargetType", { enumerable: true, get: function () { return mappers_interface_1.SyncMapperRecordTargetType; } });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=uploader.helpers.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"uploader.helpers.test.d.ts","sourceRoot":"","sources":["../../src/uploader/uploader.helpers.test.ts"],"names":[],"mappings":""}
@@ -1,267 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const fs_1 = __importDefault(require("fs"));
7
- const fs_2 = require("fs");
8
- const js_jsonl_1 = require("js-jsonl");
9
- const zlib_1 = __importDefault(require("zlib"));
10
- const constants_1 = require("../common/constants");
11
- const uploader_helpers_1 = require("./uploader.helpers");
12
- describe('uploader.helpers', () => {
13
- let consoleErrorSpy;
14
- let consoleLogSpy;
15
- let consoleWarnSpy;
16
- beforeEach(() => {
17
- consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation();
18
- consoleLogSpy = jest.spyOn(console, 'log').mockImplementation();
19
- consoleWarnSpy = jest.spyOn(console, 'warn').mockImplementation();
20
- });
21
- afterEach(() => {
22
- jest.clearAllMocks();
23
- consoleErrorSpy.mockRestore();
24
- consoleLogSpy.mockRestore();
25
- consoleWarnSpy.mockRestore();
26
- });
27
- describe(uploader_helpers_1.compressGzip.name, () => {
28
- it('should compress a string to gzip buffer', () => {
29
- // Arrange
30
- const input = '{"id":1}\n{"id":2}';
31
- // Act
32
- const result = (0, uploader_helpers_1.compressGzip)(input);
33
- // Assert
34
- expect(result.response).toBeInstanceOf(Buffer);
35
- const decompressed = zlib_1.default
36
- .gunzipSync(result.response)
37
- .toString();
38
- expect(decompressed).toBe(input);
39
- });
40
- it('[edge] should return undefined and log error when compression fails', () => {
41
- // Arrange
42
- const gzipSyncSpy = jest
43
- .spyOn(zlib_1.default, 'gzipSync')
44
- .mockImplementationOnce(() => {
45
- throw new Error('Compression failed');
46
- });
47
- // Act
48
- const result = (0, uploader_helpers_1.compressGzip)('test data');
49
- // Assert
50
- expect(result.response).toBeUndefined();
51
- gzipSyncSpy.mockRestore();
52
- });
53
- });
54
- describe(uploader_helpers_1.decompressGzip.name, () => {
55
- it('should decompress a gzip buffer to string', () => {
56
- // Arrange
57
- const originalString = '{"id":1}\n{"id":2}';
58
- const compressed = zlib_1.default.gzipSync(originalString);
59
- // Act
60
- const result = (0, uploader_helpers_1.decompressGzip)(compressed);
61
- // Assert
62
- expect(result.response).toBe(originalString);
63
- });
64
- it('[edge] should return undefined and log error when decompression fails', () => {
65
- // Arrange
66
- const invalidGzip = Buffer.from('not valid gzip data');
67
- // Act
68
- const result = (0, uploader_helpers_1.decompressGzip)(invalidGzip);
69
- // Assert
70
- expect(result.response).toBeUndefined();
71
- });
72
- });
73
- describe(uploader_helpers_1.parseJsonl.name, () => {
74
- it('should parse valid JSONL string to array of objects', () => {
75
- // Arrange
76
- const data = [
77
- { id: 1, name: 'Item 1' },
78
- { id: 2, name: 'Item 2' },
79
- ];
80
- const jsonlString = js_jsonl_1.jsonl.stringify(data);
81
- // Act
82
- const result = (0, uploader_helpers_1.parseJsonl)(jsonlString);
83
- // Assert
84
- expect(result.response).toEqual(data);
85
- });
86
- it('[edge] should return null and log error when parsing fails', () => {
87
- // Arrange
88
- const invalidJsonl = 'not valid jsonl {{{';
89
- // Act
90
- const result = (0, uploader_helpers_1.parseJsonl)(invalidJsonl);
91
- // Assert
92
- expect(result.response).toBeUndefined();
93
- });
94
- });
95
- describe(uploader_helpers_1.downloadToLocal.name, () => {
96
- const mockExistsSync = jest.spyOn(fs_1.default, 'existsSync');
97
- const mockMkdirSync = jest.spyOn(fs_1.default, 'mkdirSync');
98
- afterEach(() => {
99
- mockExistsSync.mockReset();
100
- mockMkdirSync.mockReset();
101
- });
102
- it('should create extracted_files directory if it does not exist', async () => {
103
- // Arrange
104
- const itemType = 'tasks';
105
- const fetchedObjects = [{ id: 1 }];
106
- mockExistsSync.mockReturnValueOnce(false);
107
- mockMkdirSync.mockImplementationOnce(() => undefined);
108
- const mockFileHandle = {
109
- write: jest.fn().mockResolvedValue(undefined),
110
- close: jest.fn().mockResolvedValue(undefined),
111
- };
112
- const fsPromisesOpenSpy = jest
113
- .spyOn(fs_2.promises, 'open')
114
- .mockResolvedValueOnce(mockFileHandle);
115
- // Act
116
- await (0, uploader_helpers_1.downloadToLocal)(itemType, fetchedObjects);
117
- // Assert
118
- expect(mockExistsSync).toHaveBeenCalledWith('extracted_files');
119
- expect(mockMkdirSync).toHaveBeenCalledWith('extracted_files');
120
- fsPromisesOpenSpy.mockRestore();
121
- });
122
- it('should write objects as JSONL lines to file', async () => {
123
- // Arrange
124
- const itemType = 'tasks';
125
- const fetchedObjects = [{ id: 1 }, { id: 2 }];
126
- mockExistsSync.mockReturnValueOnce(true);
127
- const mockFileHandle = {
128
- write: jest.fn().mockResolvedValue(undefined),
129
- close: jest.fn().mockResolvedValue(undefined),
130
- };
131
- const fsPromisesOpenSpy = jest
132
- .spyOn(fs_2.promises, 'open')
133
- .mockResolvedValueOnce(mockFileHandle);
134
- // Act
135
- await (0, uploader_helpers_1.downloadToLocal)(itemType, fetchedObjects);
136
- // Assert
137
- expect(mockFileHandle.write).toHaveBeenCalledTimes(2);
138
- expect(mockFileHandle.write).toHaveBeenCalledWith('{"id":1}\n');
139
- expect(mockFileHandle.write).toHaveBeenCalledWith('{"id":2}\n');
140
- expect(mockFileHandle.close).toHaveBeenCalled();
141
- fsPromisesOpenSpy.mockRestore();
142
- });
143
- it('should handle single object (non-array) input', async () => {
144
- // Arrange
145
- const itemType = 'metadata';
146
- const fetchedObject = { key: 'value' };
147
- mockExistsSync.mockReturnValueOnce(true);
148
- const mockFileHandle = {
149
- write: jest.fn().mockResolvedValue(undefined),
150
- close: jest.fn().mockResolvedValue(undefined),
151
- };
152
- const fsPromisesOpenSpy = jest
153
- .spyOn(fs_2.promises, 'open')
154
- .mockResolvedValueOnce(mockFileHandle);
155
- // Act
156
- await (0, uploader_helpers_1.downloadToLocal)(itemType, fetchedObject);
157
- // Assert
158
- expect(mockFileHandle.write).toHaveBeenCalledTimes(1);
159
- expect(mockFileHandle.write).toHaveBeenCalledWith('{"key":"value"}\n');
160
- fsPromisesOpenSpy.mockRestore();
161
- });
162
- it('should use .json extension when itemType is external_domain_metadata', async () => {
163
- // Arrange
164
- const itemType = 'external_domain_metadata';
165
- const fetchedObject = { domain: 'example.com' };
166
- mockExistsSync.mockReturnValueOnce(true);
167
- const mockFileHandle = {
168
- write: jest.fn().mockResolvedValue(undefined),
169
- close: jest.fn().mockResolvedValue(undefined),
170
- };
171
- const fsPromisesOpenSpy = jest
172
- .spyOn(fs_2.promises, 'open')
173
- .mockResolvedValueOnce(mockFileHandle);
174
- // Act
175
- await (0, uploader_helpers_1.downloadToLocal)(itemType, fetchedObject);
176
- // Assert
177
- expect(fsPromisesOpenSpy).toHaveBeenCalledWith(expect.stringMatching(/extractor_external_domain_metadata_\d+\.json$/), 'w');
178
- fsPromisesOpenSpy.mockRestore();
179
- });
180
- it('[edge] should reject and log error when file operations fail', async () => {
181
- // Arrange
182
- const itemType = 'tasks';
183
- const fetchedObjects = [{ id: 1 }];
184
- const fileError = new Error('File write failed');
185
- mockExistsSync.mockReturnValueOnce(true);
186
- const fsPromisesOpenSpy = jest
187
- .spyOn(fs_2.promises, 'open')
188
- .mockRejectedValueOnce(fileError);
189
- // Act & Assert
190
- await expect((0, uploader_helpers_1.downloadToLocal)(itemType, fetchedObjects)).rejects.toThrow(fileError);
191
- fsPromisesOpenSpy.mockRestore();
192
- });
193
- });
194
- describe(uploader_helpers_1.truncateFilename.name, () => {
195
- it('should return filename unchanged when within the limit', () => {
196
- // Arrange
197
- const filename = 'short-filename.txt';
198
- // Act
199
- const result = (0, uploader_helpers_1.truncateFilename)(filename);
200
- // Assert
201
- expect(result).toBe(filename);
202
- });
203
- it('should return filename unchanged when exactly at the limit', () => {
204
- // Arrange
205
- const filename = 'a'.repeat(constants_1.MAX_DEVREV_FILENAME_LENGTH);
206
- // Act
207
- const result = (0, uploader_helpers_1.truncateFilename)(filename);
208
- // Assert
209
- expect(result).toBe(filename);
210
- expect(result.length).toBe(constants_1.MAX_DEVREV_FILENAME_LENGTH);
211
- });
212
- it('should truncate filename and preserve extension when exceeding the limit', () => {
213
- // Arrange
214
- const longName = 'a'.repeat(300);
215
- const extension = '.txt';
216
- const filename = longName + extension;
217
- // Act
218
- const result = (0, uploader_helpers_1.truncateFilename)(filename);
219
- // Assert
220
- expect(result.length).toBe(constants_1.MAX_DEVREV_FILENAME_LENGTH);
221
- expect(result).toContain('...');
222
- expect(result.endsWith(extension)).toBe(true);
223
- });
224
- it('should preserve the last MAX_DEVREV_FILENAME_EXTENSION_LENGTH characters as extension', () => {
225
- // Arrange
226
- const longName = 'document-'.repeat(50);
227
- const extension = '.verylongextension';
228
- const filename = longName + extension;
229
- // Act
230
- const result = (0, uploader_helpers_1.truncateFilename)(filename);
231
- // Assert
232
- expect(result.length).toBe(constants_1.MAX_DEVREV_FILENAME_LENGTH);
233
- const expectedExtension = filename.slice(-constants_1.MAX_DEVREV_FILENAME_EXTENSION_LENGTH);
234
- expect(result.endsWith(expectedExtension)).toBe(true);
235
- });
236
- it('should correctly format the truncated filename with ellipsis', () => {
237
- // Arrange
238
- const filename = 'x'.repeat(300) + '.pdf';
239
- // Act
240
- const result = (0, uploader_helpers_1.truncateFilename)(filename);
241
- // Assert
242
- const availableNameLength = constants_1.MAX_DEVREV_FILENAME_LENGTH - constants_1.MAX_DEVREV_FILENAME_EXTENSION_LENGTH - 3;
243
- const expectedPrefix = 'x'.repeat(availableNameLength);
244
- const expectedExtension = filename.slice(-constants_1.MAX_DEVREV_FILENAME_EXTENSION_LENGTH);
245
- expect(result).toBe(`${expectedPrefix}...${expectedExtension}`);
246
- });
247
- it('[edge] should handle filename with no extension', () => {
248
- // Arrange
249
- const filename = 'a'.repeat(300);
250
- // Act
251
- const result = (0, uploader_helpers_1.truncateFilename)(filename);
252
- // Assert
253
- expect(result.length).toBe(constants_1.MAX_DEVREV_FILENAME_LENGTH);
254
- expect(result).toContain('...');
255
- // Last 20 chars are preserved as "extension"
256
- expect(result.endsWith('a'.repeat(constants_1.MAX_DEVREV_FILENAME_EXTENSION_LENGTH))).toBe(true);
257
- });
258
- it('[edge] should handle filename that is just one character over the limit', () => {
259
- // Arrange
260
- const filename = 'a'.repeat(constants_1.MAX_DEVREV_FILENAME_LENGTH + 1);
261
- // Act
262
- const result = (0, uploader_helpers_1.truncateFilename)(filename);
263
- // Assert
264
- expect(result.length).toBe(constants_1.MAX_DEVREV_FILENAME_LENGTH);
265
- });
266
- });
267
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=uploader.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"uploader.test.d.ts","sourceRoot":"","sources":["../../src/uploader/uploader.test.ts"],"names":[],"mappings":""}