@devrev/airsync-sdk 2.0.0-beta.2 → 2.0.0-beta.4

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 (206) hide show
  1. package/README.md +5 -11
  2. package/dist/attachments-streaming/attachments-streaming-pool.d.ts +1 -8
  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 +11 -39
  7. package/dist/common/constants.d.ts +1 -0
  8. package/dist/common/constants.d.ts.map +1 -1
  9. package/dist/common/constants.js +2 -1
  10. package/dist/common/helpers.d.ts +0 -14
  11. package/dist/common/helpers.d.ts.map +1 -1
  12. package/dist/common/helpers.js +0 -36
  13. package/dist/http/{axios-client-internal.d.ts → client.d.ts} +1 -1
  14. package/dist/http/client.d.ts.map +1 -0
  15. package/dist/index.d.ts +25 -13
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +51 -30
  18. package/dist/logger/logger.d.ts +14 -0
  19. package/dist/logger/logger.d.ts.map +1 -1
  20. package/dist/logger/logger.js +55 -8
  21. package/dist/mappers/mappers.d.ts +9 -10
  22. package/dist/mappers/mappers.d.ts.map +1 -1
  23. package/dist/mappers/{mappers.interface.d.ts → mappers.interfaces.d.ts} +5 -5
  24. package/dist/mappers/mappers.interfaces.d.ts.map +1 -0
  25. package/dist/mappers/{mappers.interface.js → mappers.interfaces.js} +3 -3
  26. package/dist/mappers/mappers.js +13 -9
  27. package/dist/multithreading/adapters/base-adapter.d.ts +71 -0
  28. package/dist/multithreading/adapters/base-adapter.d.ts.map +1 -0
  29. package/dist/multithreading/adapters/base-adapter.js +138 -0
  30. package/dist/multithreading/adapters/extraction-adapter.d.ts +57 -0
  31. package/dist/multithreading/adapters/extraction-adapter.d.ts.map +1 -0
  32. package/dist/multithreading/adapters/extraction-adapter.js +323 -0
  33. package/dist/multithreading/adapters/loading-adapter.d.ts +44 -0
  34. package/dist/multithreading/adapters/loading-adapter.d.ts.map +1 -0
  35. package/dist/multithreading/{worker-adapter/worker-adapter.helpers.d.ts → adapters/loading-adapter.helpers.d.ts} +1 -1
  36. package/dist/multithreading/adapters/loading-adapter.helpers.d.ts.map +1 -0
  37. package/dist/multithreading/adapters/loading-adapter.js +431 -0
  38. package/dist/{common/control-protocol.d.ts → multithreading/emit.d.ts} +1 -1
  39. package/dist/multithreading/emit.d.ts.map +1 -0
  40. package/dist/{common/control-protocol.js → multithreading/emit.js} +3 -3
  41. package/dist/multithreading/process-task.d.ts +16 -1
  42. package/dist/multithreading/process-task.d.ts.map +1 -1
  43. package/dist/multithreading/process-task.js +115 -50
  44. package/dist/multithreading/spawn/spawn.helpers.d.ts +23 -3
  45. package/dist/multithreading/spawn/spawn.helpers.d.ts.map +1 -1
  46. package/dist/multithreading/spawn/spawn.helpers.js +152 -2
  47. package/dist/multithreading/spawn/spawn.js +7 -7
  48. package/dist/multithreading/worker.js +1 -2
  49. package/dist/repo/repo.js +2 -2
  50. package/dist/state/base-state.d.ts +75 -0
  51. package/dist/state/base-state.d.ts.map +1 -0
  52. package/dist/state/base-state.js +261 -0
  53. package/dist/state/extraction-state.d.ts +29 -0
  54. package/dist/state/extraction-state.d.ts.map +1 -0
  55. package/dist/state/extraction-state.js +122 -0
  56. package/dist/state/install-initial-domain-mapping.d.ts.map +1 -0
  57. package/dist/{common → state}/install-initial-domain-mapping.js +4 -4
  58. package/dist/state/loading-state.d.ts +18 -0
  59. package/dist/state/loading-state.d.ts.map +1 -0
  60. package/dist/state/loading-state.js +39 -0
  61. package/dist/state/state.d.ts +3 -35
  62. package/dist/state/state.d.ts.map +1 -1
  63. package/dist/state/state.interfaces.d.ts +20 -3
  64. package/dist/state/state.interfaces.d.ts.map +1 -1
  65. package/dist/state/state.interfaces.js +19 -1
  66. package/dist/state/state.js +9 -263
  67. package/dist/{common → state}/time-value-resolver.d.ts +4 -5
  68. package/dist/state/time-value-resolver.d.ts.map +1 -0
  69. package/dist/{common → state}/time-value-resolver.js +9 -8
  70. package/dist/{common/test-utils.d.ts → testing/mock-event.d.ts} +1 -2
  71. package/dist/testing/mock-event.d.ts.map +1 -0
  72. package/dist/{common/test-utils.js → testing/mock-event.js} +14 -3
  73. package/dist/{mock-server → testing}/mock-server.d.ts +5 -0
  74. package/dist/testing/mock-server.d.ts.map +1 -0
  75. package/dist/testing/mock-server.interfaces.d.ts.map +1 -0
  76. package/dist/{mock-server → testing}/mock-server.js +6 -1
  77. package/dist/types/errors.d.ts +9 -0
  78. package/dist/types/errors.d.ts.map +1 -0
  79. package/dist/types/extraction.d.ts +73 -18
  80. package/dist/types/extraction.d.ts.map +1 -1
  81. package/dist/types/extraction.js +4 -6
  82. package/dist/types/loading.d.ts +1 -2
  83. package/dist/types/loading.d.ts.map +1 -1
  84. package/dist/types/loading.js +0 -1
  85. package/dist/types/workers.d.ts +64 -20
  86. package/dist/types/workers.d.ts.map +1 -1
  87. package/dist/uploader/uploader.d.ts +5 -4
  88. package/dist/uploader/uploader.d.ts.map +1 -1
  89. package/dist/uploader/uploader.interfaces.d.ts +1 -1
  90. package/dist/uploader/uploader.js +10 -10
  91. package/package.json +3 -3
  92. package/dist/airsync-sdk.d.ts +0 -1802
  93. package/dist/attachments-streaming/attachments-streaming-pool.test.d.ts +0 -2
  94. package/dist/attachments-streaming/attachments-streaming-pool.test.d.ts.map +0 -1
  95. package/dist/attachments-streaming/attachments-streaming-pool.test.js +0 -516
  96. package/dist/common/control-protocol.d.ts.map +0 -1
  97. package/dist/common/errors.d.ts +0 -6
  98. package/dist/common/errors.d.ts.map +0 -1
  99. package/dist/common/install-initial-domain-mapping.d.ts.map +0 -1
  100. package/dist/common/install-initial-domain-mapping.test.d.ts +0 -2
  101. package/dist/common/install-initial-domain-mapping.test.d.ts.map +0 -1
  102. package/dist/common/install-initial-domain-mapping.test.js +0 -211
  103. package/dist/common/test-utils.d.ts.map +0 -1
  104. package/dist/common/time-value-resolver.d.ts.map +0 -1
  105. package/dist/common/time-value-resolver.test.d.ts +0 -2
  106. package/dist/common/time-value-resolver.test.d.ts.map +0 -1
  107. package/dist/common/time-value-resolver.test.js +0 -268
  108. package/dist/http/axios-client-internal.d.ts.map +0 -1
  109. package/dist/http/axios-client-internal.test.d.ts +0 -2
  110. package/dist/http/axios-client-internal.test.d.ts.map +0 -1
  111. package/dist/http/axios-client-internal.test.js +0 -175
  112. package/dist/http/axios-client.d.ts +0 -27
  113. package/dist/http/axios-client.d.ts.map +0 -1
  114. package/dist/http/axios-client.js +0 -60
  115. package/dist/http/constants.d.ts +0 -4
  116. package/dist/http/constants.d.ts.map +0 -1
  117. package/dist/http/constants.js +0 -6
  118. package/dist/http/index.d.ts +0 -2
  119. package/dist/http/index.d.ts.map +0 -1
  120. package/dist/http/index.js +0 -17
  121. package/dist/logger/logger.constants.d.ts +0 -6
  122. package/dist/logger/logger.constants.d.ts.map +0 -1
  123. package/dist/logger/logger.constants.js +0 -13
  124. package/dist/logger/logger.context.d.ts +0 -58
  125. package/dist/logger/logger.context.d.ts.map +0 -1
  126. package/dist/logger/logger.context.js +0 -86
  127. package/dist/logger/logger.test.d.ts +0 -2
  128. package/dist/logger/logger.test.d.ts.map +0 -1
  129. package/dist/logger/logger.test.js +0 -537
  130. package/dist/mappers/mappers.interface.d.ts.map +0 -1
  131. package/dist/mappers/mappers.test.d.ts +0 -2
  132. package/dist/mappers/mappers.test.d.ts.map +0 -1
  133. package/dist/mappers/mappers.test.js +0 -105
  134. package/dist/mock-server/mock-server.d.ts.map +0 -1
  135. package/dist/mock-server/mock-server.interfaces.d.ts.map +0 -1
  136. package/dist/multithreading/create-worker.test.d.ts +0 -2
  137. package/dist/multithreading/create-worker.test.d.ts.map +0 -1
  138. package/dist/multithreading/create-worker.test.js +0 -108
  139. package/dist/multithreading/process-task.test.d.ts +0 -2
  140. package/dist/multithreading/process-task.test.d.ts.map +0 -1
  141. package/dist/multithreading/process-task.test.js +0 -146
  142. package/dist/multithreading/spawn/spawn.helpers.test.d.ts +0 -2
  143. package/dist/multithreading/spawn/spawn.helpers.test.d.ts.map +0 -1
  144. package/dist/multithreading/spawn/spawn.helpers.test.js +0 -293
  145. package/dist/multithreading/spawn/spawn.test.d.ts +0 -2
  146. package/dist/multithreading/spawn/spawn.test.d.ts.map +0 -1
  147. package/dist/multithreading/spawn/spawn.test.js +0 -232
  148. package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.d.ts +0 -2
  149. package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.d.ts.map +0 -1
  150. package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.js +0 -175
  151. package/dist/multithreading/worker-adapter/worker-adapter.d.ts +0 -97
  152. package/dist/multithreading/worker-adapter/worker-adapter.d.ts.map +0 -1
  153. package/dist/multithreading/worker-adapter/worker-adapter.emit.test.d.ts +0 -2
  154. package/dist/multithreading/worker-adapter/worker-adapter.emit.test.d.ts.map +0 -1
  155. package/dist/multithreading/worker-adapter/worker-adapter.emit.test.js +0 -390
  156. package/dist/multithreading/worker-adapter/worker-adapter.extraction.test.d.ts +0 -2
  157. package/dist/multithreading/worker-adapter/worker-adapter.extraction.test.d.ts.map +0 -1
  158. package/dist/multithreading/worker-adapter/worker-adapter.extraction.test.js +0 -799
  159. package/dist/multithreading/worker-adapter/worker-adapter.helpers.d.ts.map +0 -1
  160. package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.d.ts +0 -2
  161. package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.d.ts.map +0 -1
  162. package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.js +0 -514
  163. package/dist/multithreading/worker-adapter/worker-adapter.js +0 -846
  164. package/dist/multithreading/worker-adapter/worker-adapter.loading.test.d.ts +0 -2
  165. package/dist/multithreading/worker-adapter/worker-adapter.loading.test.d.ts.map +0 -1
  166. package/dist/multithreading/worker-adapter/worker-adapter.loading.test.js +0 -596
  167. package/dist/multithreading/worker-adapter/worker-adapter.serialization.test.d.ts +0 -2
  168. package/dist/multithreading/worker-adapter/worker-adapter.serialization.test.d.ts.map +0 -1
  169. package/dist/multithreading/worker-adapter/worker-adapter.serialization.test.js +0 -71
  170. package/dist/repo/repo.test.d.ts +0 -2
  171. package/dist/repo/repo.test.d.ts.map +0 -1
  172. package/dist/repo/repo.test.js +0 -184
  173. package/dist/state/state.extract-window.test.d.ts +0 -2
  174. package/dist/state/state.extract-window.test.d.ts.map +0 -1
  175. package/dist/state/state.extract-window.test.js +0 -163
  176. package/dist/state/state.pending-boundaries.test.d.ts +0 -2
  177. package/dist/state/state.pending-boundaries.test.d.ts.map +0 -1
  178. package/dist/state/state.pending-boundaries.test.js +0 -189
  179. package/dist/state/state.post-state.test.d.ts +0 -2
  180. package/dist/state/state.post-state.test.d.ts.map +0 -1
  181. package/dist/state/state.post-state.test.js +0 -77
  182. package/dist/state/state.test.d.ts +0 -2
  183. package/dist/state/state.test.d.ts.map +0 -1
  184. package/dist/state/state.test.js +0 -268
  185. package/dist/state/state.time-value-resolution.test.d.ts +0 -2
  186. package/dist/state/state.time-value-resolution.test.d.ts.map +0 -1
  187. package/dist/state/state.time-value-resolution.test.js +0 -175
  188. package/dist/tsdoc-metadata.json +0 -11
  189. package/dist/types/extraction.test.d.ts +0 -2
  190. package/dist/types/extraction.test.d.ts.map +0 -1
  191. package/dist/types/extraction.test.js +0 -96
  192. package/dist/types/index.d.ts +0 -11
  193. package/dist/types/index.d.ts.map +0 -1
  194. package/dist/types/index.js +0 -21
  195. package/dist/uploader/uploader.helpers.test.d.ts +0 -2
  196. package/dist/uploader/uploader.helpers.test.d.ts.map +0 -1
  197. package/dist/uploader/uploader.helpers.test.js +0 -256
  198. package/dist/uploader/uploader.test.d.ts +0 -2
  199. package/dist/uploader/uploader.test.d.ts.map +0 -1
  200. package/dist/uploader/uploader.test.js +0 -601
  201. /package/dist/http/{axios-client-internal.js → client.js} +0 -0
  202. /package/dist/multithreading/{worker-adapter/worker-adapter.helpers.js → adapters/loading-adapter.helpers.js} +0 -0
  203. /package/dist/{common → state}/install-initial-domain-mapping.d.ts +0 -0
  204. /package/dist/{mock-server → testing}/mock-server.interfaces.d.ts +0 -0
  205. /package/dist/{mock-server → testing}/mock-server.interfaces.js +0 -0
  206. /package/dist/{common → types}/errors.js +0 -0
@@ -1,256 +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
- afterEach(() => {
14
- jest.clearAllMocks();
15
- });
16
- describe(uploader_helpers_1.compressGzip.name, () => {
17
- it('should compress a string to gzip buffer', () => {
18
- // Arrange
19
- const input = '{"id":1}\n{"id":2}';
20
- // Act
21
- const result = (0, uploader_helpers_1.compressGzip)(input);
22
- // Assert
23
- expect(result.response).toBeInstanceOf(Buffer);
24
- const decompressed = zlib_1.default
25
- .gunzipSync(result.response)
26
- .toString();
27
- expect(decompressed).toBe(input);
28
- });
29
- it('[edge] should return undefined and log error when compression fails', () => {
30
- // Arrange
31
- const gzipSyncSpy = jest
32
- .spyOn(zlib_1.default, 'gzipSync')
33
- .mockImplementationOnce(() => {
34
- throw new Error('Compression failed');
35
- });
36
- // Act
37
- const result = (0, uploader_helpers_1.compressGzip)('test data');
38
- // Assert
39
- expect(result.response).toBeUndefined();
40
- gzipSyncSpy.mockRestore();
41
- });
42
- });
43
- describe(uploader_helpers_1.decompressGzip.name, () => {
44
- it('should decompress a gzip buffer to string', () => {
45
- // Arrange
46
- const originalString = '{"id":1}\n{"id":2}';
47
- const compressed = zlib_1.default.gzipSync(originalString);
48
- // Act
49
- const result = (0, uploader_helpers_1.decompressGzip)(compressed);
50
- // Assert
51
- expect(result.response).toBe(originalString);
52
- });
53
- it('[edge] should return undefined and log error when decompression fails', () => {
54
- // Arrange
55
- const invalidGzip = Buffer.from('not valid gzip data');
56
- // Act
57
- const result = (0, uploader_helpers_1.decompressGzip)(invalidGzip);
58
- // Assert
59
- expect(result.response).toBeUndefined();
60
- });
61
- });
62
- describe(uploader_helpers_1.parseJsonl.name, () => {
63
- it('should parse valid JSONL string to array of objects', () => {
64
- // Arrange
65
- const data = [
66
- { id: 1, name: 'Item 1' },
67
- { id: 2, name: 'Item 2' },
68
- ];
69
- const jsonlString = js_jsonl_1.jsonl.stringify(data);
70
- // Act
71
- const result = (0, uploader_helpers_1.parseJsonl)(jsonlString);
72
- // Assert
73
- expect(result.response).toEqual(data);
74
- });
75
- it('[edge] should return null and log error when parsing fails', () => {
76
- // Arrange
77
- const invalidJsonl = 'not valid jsonl {{{';
78
- // Act
79
- const result = (0, uploader_helpers_1.parseJsonl)(invalidJsonl);
80
- // Assert
81
- expect(result.response).toBeUndefined();
82
- });
83
- });
84
- describe(uploader_helpers_1.downloadToLocal.name, () => {
85
- const mockExistsSync = jest.spyOn(fs_1.default, 'existsSync');
86
- const mockMkdirSync = jest.spyOn(fs_1.default, 'mkdirSync');
87
- afterEach(() => {
88
- mockExistsSync.mockReset();
89
- mockMkdirSync.mockReset();
90
- });
91
- it('should create extracted_files directory if it does not exist', async () => {
92
- // Arrange
93
- const itemType = 'tasks';
94
- const fetchedObjects = [{ id: 1 }];
95
- mockExistsSync.mockReturnValueOnce(false);
96
- mockMkdirSync.mockImplementationOnce(() => undefined);
97
- const mockFileHandle = {
98
- write: jest.fn().mockResolvedValue(undefined),
99
- close: jest.fn().mockResolvedValue(undefined),
100
- };
101
- const fsPromisesOpenSpy = jest
102
- .spyOn(fs_2.promises, 'open')
103
- .mockResolvedValueOnce(mockFileHandle);
104
- // Act
105
- await (0, uploader_helpers_1.downloadToLocal)(itemType, fetchedObjects);
106
- // Assert
107
- expect(mockExistsSync).toHaveBeenCalledWith('extracted_files');
108
- expect(mockMkdirSync).toHaveBeenCalledWith('extracted_files');
109
- fsPromisesOpenSpy.mockRestore();
110
- });
111
- it('should write objects as JSONL lines to file', async () => {
112
- // Arrange
113
- const itemType = 'tasks';
114
- const fetchedObjects = [{ id: 1 }, { id: 2 }];
115
- mockExistsSync.mockReturnValueOnce(true);
116
- const mockFileHandle = {
117
- write: jest.fn().mockResolvedValue(undefined),
118
- close: jest.fn().mockResolvedValue(undefined),
119
- };
120
- const fsPromisesOpenSpy = jest
121
- .spyOn(fs_2.promises, 'open')
122
- .mockResolvedValueOnce(mockFileHandle);
123
- // Act
124
- await (0, uploader_helpers_1.downloadToLocal)(itemType, fetchedObjects);
125
- // Assert
126
- expect(mockFileHandle.write).toHaveBeenCalledTimes(2);
127
- expect(mockFileHandle.write).toHaveBeenCalledWith('{"id":1}\n');
128
- expect(mockFileHandle.write).toHaveBeenCalledWith('{"id":2}\n');
129
- expect(mockFileHandle.close).toHaveBeenCalled();
130
- fsPromisesOpenSpy.mockRestore();
131
- });
132
- it('should handle single object (non-array) input', async () => {
133
- // Arrange
134
- const itemType = 'metadata';
135
- const fetchedObject = { key: 'value' };
136
- mockExistsSync.mockReturnValueOnce(true);
137
- const mockFileHandle = {
138
- write: jest.fn().mockResolvedValue(undefined),
139
- close: jest.fn().mockResolvedValue(undefined),
140
- };
141
- const fsPromisesOpenSpy = jest
142
- .spyOn(fs_2.promises, 'open')
143
- .mockResolvedValueOnce(mockFileHandle);
144
- // Act
145
- await (0, uploader_helpers_1.downloadToLocal)(itemType, fetchedObject);
146
- // Assert
147
- expect(mockFileHandle.write).toHaveBeenCalledTimes(1);
148
- expect(mockFileHandle.write).toHaveBeenCalledWith('{"key":"value"}\n');
149
- fsPromisesOpenSpy.mockRestore();
150
- });
151
- it('should use .json extension when itemType is external_domain_metadata', async () => {
152
- // Arrange
153
- const itemType = 'external_domain_metadata';
154
- const fetchedObject = { domain: 'example.com' };
155
- mockExistsSync.mockReturnValueOnce(true);
156
- const mockFileHandle = {
157
- write: jest.fn().mockResolvedValue(undefined),
158
- close: jest.fn().mockResolvedValue(undefined),
159
- };
160
- const fsPromisesOpenSpy = jest
161
- .spyOn(fs_2.promises, 'open')
162
- .mockResolvedValueOnce(mockFileHandle);
163
- // Act
164
- await (0, uploader_helpers_1.downloadToLocal)(itemType, fetchedObject);
165
- // Assert
166
- expect(fsPromisesOpenSpy).toHaveBeenCalledWith(expect.stringMatching(/extractor_external_domain_metadata_\d+\.json$/), 'w');
167
- fsPromisesOpenSpy.mockRestore();
168
- });
169
- it('[edge] should reject and log error when file operations fail', async () => {
170
- // Arrange
171
- const itemType = 'tasks';
172
- const fetchedObjects = [{ id: 1 }];
173
- const fileError = new Error('File write failed');
174
- mockExistsSync.mockReturnValueOnce(true);
175
- const fsPromisesOpenSpy = jest
176
- .spyOn(fs_2.promises, 'open')
177
- .mockRejectedValueOnce(fileError);
178
- // Act & Assert
179
- await expect((0, uploader_helpers_1.downloadToLocal)(itemType, fetchedObjects)).rejects.toThrow(fileError);
180
- fsPromisesOpenSpy.mockRestore();
181
- });
182
- });
183
- describe(uploader_helpers_1.truncateFilename.name, () => {
184
- it('should return filename unchanged when within the limit', () => {
185
- // Arrange
186
- const filename = 'short-filename.txt';
187
- // Act
188
- const result = (0, uploader_helpers_1.truncateFilename)(filename);
189
- // Assert
190
- expect(result).toBe(filename);
191
- });
192
- it('should return filename unchanged when exactly at the limit', () => {
193
- // Arrange
194
- const filename = 'a'.repeat(constants_1.MAX_DEVREV_FILENAME_LENGTH);
195
- // Act
196
- const result = (0, uploader_helpers_1.truncateFilename)(filename);
197
- // Assert
198
- expect(result).toBe(filename);
199
- expect(result.length).toBe(constants_1.MAX_DEVREV_FILENAME_LENGTH);
200
- });
201
- it('should truncate filename and preserve extension when exceeding the limit', () => {
202
- // Arrange
203
- const longName = 'a'.repeat(300);
204
- const extension = '.txt';
205
- const filename = longName + extension;
206
- // Act
207
- const result = (0, uploader_helpers_1.truncateFilename)(filename);
208
- // Assert
209
- expect(result.length).toBe(constants_1.MAX_DEVREV_FILENAME_LENGTH);
210
- expect(result).toContain('...');
211
- expect(result.endsWith(extension)).toBe(true);
212
- });
213
- it('should preserve the last MAX_DEVREV_FILENAME_EXTENSION_LENGTH characters as extension', () => {
214
- // Arrange
215
- const longName = 'document-'.repeat(50);
216
- const extension = '.verylongextension';
217
- const filename = longName + extension;
218
- // Act
219
- const result = (0, uploader_helpers_1.truncateFilename)(filename);
220
- // Assert
221
- expect(result.length).toBe(constants_1.MAX_DEVREV_FILENAME_LENGTH);
222
- const expectedExtension = filename.slice(-constants_1.MAX_DEVREV_FILENAME_EXTENSION_LENGTH);
223
- expect(result.endsWith(expectedExtension)).toBe(true);
224
- });
225
- it('should correctly format the truncated filename with ellipsis', () => {
226
- // Arrange
227
- const filename = 'x'.repeat(300) + '.pdf';
228
- // Act
229
- const result = (0, uploader_helpers_1.truncateFilename)(filename);
230
- // Assert
231
- const availableNameLength = constants_1.MAX_DEVREV_FILENAME_LENGTH - constants_1.MAX_DEVREV_FILENAME_EXTENSION_LENGTH - 3;
232
- const expectedPrefix = 'x'.repeat(availableNameLength);
233
- const expectedExtension = filename.slice(-constants_1.MAX_DEVREV_FILENAME_EXTENSION_LENGTH);
234
- expect(result).toBe(`${expectedPrefix}...${expectedExtension}`);
235
- });
236
- it('[edge] should handle filename with no extension', () => {
237
- // Arrange
238
- const filename = 'a'.repeat(300);
239
- // Act
240
- const result = (0, uploader_helpers_1.truncateFilename)(filename);
241
- // Assert
242
- expect(result.length).toBe(constants_1.MAX_DEVREV_FILENAME_LENGTH);
243
- expect(result).toContain('...');
244
- // Last 20 chars are preserved as "extension"
245
- expect(result.endsWith('a'.repeat(constants_1.MAX_DEVREV_FILENAME_EXTENSION_LENGTH))).toBe(true);
246
- });
247
- it('[edge] should handle filename that is just one character over the limit', () => {
248
- // Arrange
249
- const filename = 'a'.repeat(constants_1.MAX_DEVREV_FILENAME_LENGTH + 1);
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
- });
255
- });
256
- });
@@ -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":""}