@gravity-ui/data-source 0.6.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. package/build/cjs/core/index.d.ts +2 -1
  2. package/build/cjs/core/index.js +7 -0
  3. package/build/cjs/core/index.js.map +1 -1
  4. package/build/cjs/core/types/DataSource.d.ts +15 -19
  5. package/build/cjs/core/types/DataSource.js.map +1 -1
  6. package/build/cjs/core/utils/__tests__/composeFullKey.test.js +34 -0
  7. package/build/cjs/core/utils/__tests__/composeFullKey.test.js.map +1 -0
  8. package/build/cjs/core/utils/__tests__/composeKey.test.js +32 -0
  9. package/build/cjs/core/utils/__tests__/composeKey.test.js.map +1 -0
  10. package/build/cjs/core/utils/__tests__/getError.test.js +31 -0
  11. package/build/cjs/core/utils/__tests__/getError.test.js.map +1 -0
  12. package/build/cjs/core/utils/__tests__/getStatus.test.js +49 -0
  13. package/build/cjs/core/utils/__tests__/getStatus.test.js.map +1 -0
  14. package/build/cjs/core/utils/__tests__/hasTag.test.js +31 -0
  15. package/build/cjs/core/utils/__tests__/hasTag.test.js.map +1 -0
  16. package/build/cjs/core/utils/__tests__/mergeStatuses.test.js +25 -0
  17. package/build/cjs/core/utils/__tests__/mergeStatuses.test.js.map +1 -0
  18. package/build/cjs/core/utils/__tests__/skipContext.test.js +70 -0
  19. package/build/cjs/core/utils/__tests__/skipContext.test.js.map +1 -0
  20. package/build/cjs/core/utils/__tests__/withCancellation.test.js +106 -0
  21. package/build/cjs/core/utils/__tests__/withCancellation.test.js.map +1 -0
  22. package/build/cjs/core/utils/__tests__/withCatch.test.js +208 -0
  23. package/build/cjs/core/utils/__tests__/withCatch.test.js.map +1 -0
  24. package/build/cjs/core/utils/withCatch.d.ts +26 -0
  25. package/build/cjs/core/utils/withCatch.js +37 -0
  26. package/build/cjs/core/utils/withCatch.js.map +1 -0
  27. package/build/cjs/react/__tests__/DataManagerContext.test.js +46 -0
  28. package/build/cjs/react/__tests__/DataManagerContext.test.js.map +1 -0
  29. package/build/cjs/react/__tests__/withDataManager.test.js +58 -0
  30. package/build/cjs/react/__tests__/withDataManager.test.js.map +1 -0
  31. package/build/cjs/react/components/DataInfiniteLoader/__tests__/DataInfiniteLoader.test.js +187 -0
  32. package/build/cjs/react/components/DataInfiniteLoader/__tests__/DataInfiniteLoader.test.js.map +1 -0
  33. package/build/cjs/react/components/DataLoader/__tests__/DataLoader.test.js +119 -0
  34. package/build/cjs/react/components/DataLoader/__tests__/DataLoader.test.js.map +1 -0
  35. package/build/cjs/react/withDataManager.d.ts +1 -1
  36. package/build/cjs/react/withDataManager.js +3 -3
  37. package/build/cjs/react/withDataManager.js.map +1 -1
  38. package/build/cjs/react-query/constants.d.ts +2 -0
  39. package/build/cjs/react-query/constants.js +9 -0
  40. package/build/cjs/react-query/constants.js.map +1 -0
  41. package/build/cjs/react-query/hooks/__tests__/useQueryContext.test.js +55 -0
  42. package/build/cjs/react-query/hooks/__tests__/useQueryContext.test.js.map +1 -0
  43. package/build/cjs/react-query/hooks/__tests__/useQueryData.test.js +97 -0
  44. package/build/cjs/react-query/hooks/__tests__/useQueryData.test.js.map +1 -0
  45. package/build/cjs/react-query/hooks/__tests__/useQueryResponses.test.js +77 -0
  46. package/build/cjs/react-query/hooks/__tests__/useQueryResponses.test.js.map +1 -0
  47. package/build/cjs/react-query/hooks/__tests__/useRefetchAll.test.js +79 -0
  48. package/build/cjs/react-query/hooks/__tests__/useRefetchAll.test.js.map +1 -0
  49. package/build/cjs/react-query/hooks/__tests__/useRefetchErrored.test.js +117 -0
  50. package/build/cjs/react-query/hooks/__tests__/useRefetchErrored.test.js.map +1 -0
  51. package/build/cjs/react-query/hooks/__tests__/useRefetchInterval.test.js +156 -0
  52. package/build/cjs/react-query/hooks/__tests__/useRefetchInterval.test.js.map +1 -0
  53. package/build/cjs/react-query/hooks/useRefetchInterval.d.ts +1 -1
  54. package/build/cjs/react-query/impl/infinite/factory.d.ts +1 -1
  55. package/build/cjs/react-query/impl/infinite/factory.js.map +1 -1
  56. package/build/cjs/react-query/impl/infinite/types.d.ts +7 -7
  57. package/build/cjs/react-query/impl/infinite/types.js.map +1 -1
  58. package/build/cjs/react-query/impl/infinite/utils.js +11 -22
  59. package/build/cjs/react-query/impl/infinite/utils.js.map +1 -1
  60. package/build/cjs/react-query/impl/plain/factory.d.ts +1 -1
  61. package/build/cjs/react-query/impl/plain/factory.js.map +1 -1
  62. package/build/cjs/react-query/impl/plain/types.d.ts +4 -4
  63. package/build/cjs/react-query/impl/plain/types.js.map +1 -1
  64. package/build/cjs/react-query/impl/plain/utils.js +12 -23
  65. package/build/cjs/react-query/impl/plain/utils.js.map +1 -1
  66. package/build/cjs/react-query/utils/__tests__/formatNullableValue.test.js +27 -0
  67. package/build/cjs/react-query/utils/__tests__/formatNullableValue.test.js.map +1 -0
  68. package/build/cjs/react-query/utils/__tests__/getProgressiveRefetch.test.js +76 -0
  69. package/build/cjs/react-query/utils/__tests__/getProgressiveRefetch.test.js.map +1 -0
  70. package/build/cjs/react-query/utils/__tests__/normalizeStatus.test.js +30 -0
  71. package/build/cjs/react-query/utils/__tests__/normalizeStatus.test.js.map +1 -0
  72. package/build/cjs/react-query/utils/__tests__/notReachable.test.js +35 -0
  73. package/build/cjs/react-query/utils/__tests__/notReachable.test.js.map +1 -0
  74. package/build/cjs/react-query/utils/__tests__/parseNullableValue.test.js +27 -0
  75. package/build/cjs/react-query/utils/__tests__/parseNullableValue.test.js.map +1 -0
  76. package/build/cjs/react-query/utils/formatNullableValue.d.ts +2 -0
  77. package/build/cjs/react-query/utils/formatNullableValue.js +17 -0
  78. package/build/cjs/react-query/utils/formatNullableValue.js.map +1 -0
  79. package/build/cjs/react-query/utils/getProgressiveRefetch.d.ts +2 -2
  80. package/build/cjs/react-query/utils/parseNullableValue.d.ts +2 -0
  81. package/build/cjs/react-query/utils/parseNullableValue.js +17 -0
  82. package/build/cjs/react-query/utils/parseNullableValue.js.map +1 -0
  83. package/build/cjs/setupTests.d.ts +1 -0
  84. package/build/cjs/setupTests.js +4 -0
  85. package/build/cjs/setupTests.js.map +1 -0
  86. package/build/esm/core/index.d.ts +2 -1
  87. package/build/esm/core/index.js +1 -0
  88. package/build/esm/core/index.js.map +1 -1
  89. package/build/esm/core/types/DataSource.d.ts +15 -19
  90. package/build/esm/core/types/DataSource.js.map +1 -1
  91. package/build/esm/core/utils/__tests__/composeFullKey.test.js +32 -0
  92. package/build/esm/core/utils/__tests__/composeFullKey.test.js.map +1 -0
  93. package/build/esm/core/utils/__tests__/composeKey.test.js +30 -0
  94. package/build/esm/core/utils/__tests__/composeKey.test.js.map +1 -0
  95. package/build/esm/core/utils/__tests__/getError.test.js +29 -0
  96. package/build/esm/core/utils/__tests__/getError.test.js.map +1 -0
  97. package/build/esm/core/utils/__tests__/getStatus.test.js +47 -0
  98. package/build/esm/core/utils/__tests__/getStatus.test.js.map +1 -0
  99. package/build/esm/core/utils/__tests__/hasTag.test.js +29 -0
  100. package/build/esm/core/utils/__tests__/hasTag.test.js.map +1 -0
  101. package/build/esm/core/utils/__tests__/mergeStatuses.test.js +23 -0
  102. package/build/esm/core/utils/__tests__/mergeStatuses.test.js.map +1 -0
  103. package/build/esm/core/utils/__tests__/skipContext.test.js +67 -0
  104. package/build/esm/core/utils/__tests__/skipContext.test.js.map +1 -0
  105. package/build/esm/core/utils/__tests__/withCancellation.test.js +104 -0
  106. package/build/esm/core/utils/__tests__/withCancellation.test.js.map +1 -0
  107. package/build/esm/core/utils/__tests__/withCatch.test.js +205 -0
  108. package/build/esm/core/utils/__tests__/withCatch.test.js.map +1 -0
  109. package/build/esm/core/utils/withCatch.d.ts +26 -0
  110. package/build/esm/core/utils/withCatch.js +31 -0
  111. package/build/esm/core/utils/withCatch.js.map +1 -0
  112. package/build/esm/react/__tests__/DataManagerContext.test.js +43 -0
  113. package/build/esm/react/__tests__/DataManagerContext.test.js.map +1 -0
  114. package/build/esm/react/__tests__/withDataManager.test.js +55 -0
  115. package/build/esm/react/__tests__/withDataManager.test.js.map +1 -0
  116. package/build/esm/react/components/DataInfiniteLoader/__tests__/DataInfiniteLoader.test.js +184 -0
  117. package/build/esm/react/components/DataInfiniteLoader/__tests__/DataInfiniteLoader.test.js.map +1 -0
  118. package/build/esm/react/components/DataLoader/__tests__/DataLoader.test.js +116 -0
  119. package/build/esm/react/components/DataLoader/__tests__/DataLoader.test.js.map +1 -0
  120. package/build/esm/react/withDataManager.d.ts +1 -1
  121. package/build/esm/react/withDataManager.js +3 -3
  122. package/build/esm/react/withDataManager.js.map +1 -1
  123. package/build/esm/react-query/constants.d.ts +2 -0
  124. package/build/esm/react-query/constants.js +3 -0
  125. package/build/esm/react-query/constants.js.map +1 -0
  126. package/build/esm/react-query/hooks/__tests__/useQueryContext.test.js +52 -0
  127. package/build/esm/react-query/hooks/__tests__/useQueryContext.test.js.map +1 -0
  128. package/build/esm/react-query/hooks/__tests__/useQueryData.test.js +95 -0
  129. package/build/esm/react-query/hooks/__tests__/useQueryData.test.js.map +1 -0
  130. package/build/esm/react-query/hooks/__tests__/useQueryResponses.test.js +74 -0
  131. package/build/esm/react-query/hooks/__tests__/useQueryResponses.test.js.map +1 -0
  132. package/build/esm/react-query/hooks/__tests__/useRefetchAll.test.js +77 -0
  133. package/build/esm/react-query/hooks/__tests__/useRefetchAll.test.js.map +1 -0
  134. package/build/esm/react-query/hooks/__tests__/useRefetchErrored.test.js +115 -0
  135. package/build/esm/react-query/hooks/__tests__/useRefetchErrored.test.js.map +1 -0
  136. package/build/esm/react-query/hooks/__tests__/useRefetchInterval.test.js +154 -0
  137. package/build/esm/react-query/hooks/__tests__/useRefetchInterval.test.js.map +1 -0
  138. package/build/esm/react-query/hooks/useRefetchInterval.d.ts +1 -1
  139. package/build/esm/react-query/impl/infinite/factory.d.ts +1 -1
  140. package/build/esm/react-query/impl/infinite/factory.js.map +1 -1
  141. package/build/esm/react-query/impl/infinite/types.d.ts +7 -7
  142. package/build/esm/react-query/impl/infinite/types.js.map +1 -1
  143. package/build/esm/react-query/impl/infinite/utils.js +9 -20
  144. package/build/esm/react-query/impl/infinite/utils.js.map +1 -1
  145. package/build/esm/react-query/impl/plain/factory.d.ts +1 -1
  146. package/build/esm/react-query/impl/plain/factory.js.map +1 -1
  147. package/build/esm/react-query/impl/plain/types.d.ts +4 -4
  148. package/build/esm/react-query/impl/plain/types.js.map +1 -1
  149. package/build/esm/react-query/impl/plain/utils.js +10 -21
  150. package/build/esm/react-query/impl/plain/utils.js.map +1 -1
  151. package/build/esm/react-query/utils/__tests__/formatNullableValue.test.js +25 -0
  152. package/build/esm/react-query/utils/__tests__/formatNullableValue.test.js.map +1 -0
  153. package/build/esm/react-query/utils/__tests__/getProgressiveRefetch.test.js +74 -0
  154. package/build/esm/react-query/utils/__tests__/getProgressiveRefetch.test.js.map +1 -0
  155. package/build/esm/react-query/utils/__tests__/normalizeStatus.test.js +28 -0
  156. package/build/esm/react-query/utils/__tests__/normalizeStatus.test.js.map +1 -0
  157. package/build/esm/react-query/utils/__tests__/notReachable.test.js +33 -0
  158. package/build/esm/react-query/utils/__tests__/notReachable.test.js.map +1 -0
  159. package/build/esm/react-query/utils/__tests__/parseNullableValue.test.js +25 -0
  160. package/build/esm/react-query/utils/__tests__/parseNullableValue.test.js.map +1 -0
  161. package/build/esm/react-query/utils/formatNullableValue.d.ts +2 -0
  162. package/build/esm/react-query/utils/formatNullableValue.js +11 -0
  163. package/build/esm/react-query/utils/formatNullableValue.js.map +1 -0
  164. package/build/esm/react-query/utils/getProgressiveRefetch.d.ts +2 -2
  165. package/build/esm/react-query/utils/parseNullableValue.d.ts +2 -0
  166. package/build/esm/react-query/utils/parseNullableValue.js +11 -0
  167. package/build/esm/react-query/utils/parseNullableValue.js.map +1 -0
  168. package/build/esm/setupTests.d.ts +1 -0
  169. package/build/esm/setupTests.js +2 -0
  170. package/build/esm/setupTests.js.map +1 -0
  171. package/package.json +17 -13
  172. package/build/cjs/react-query/impl/utils.d.ts +0 -4
  173. package/build/cjs/react-query/impl/utils.js +0 -27
  174. package/build/cjs/react-query/impl/utils.js.map +0 -1
  175. package/build/esm/react-query/impl/utils.d.ts +0 -4
  176. package/build/esm/react-query/impl/utils.js +0 -21
  177. package/build/esm/react-query/impl/utils.js.map +0 -1
@@ -0,0 +1,47 @@
1
+ import { getStatus } from '../getStatus';
2
+ describe('getStatus', function () {
3
+ it('should return success when all statuses are success', function () {
4
+ var states = [{
5
+ status: 'success'
6
+ }, {
7
+ status: 'success'
8
+ }, {
9
+ status: 'success'
10
+ }];
11
+ expect(getStatus(states)).toBe('success');
12
+ });
13
+ it('should return loading when at least one status is loading', function () {
14
+ var states = [{
15
+ status: 'success'
16
+ }, {
17
+ status: 'loading'
18
+ }, {
19
+ status: 'success'
20
+ }];
21
+ expect(getStatus(states)).toBe('loading');
22
+ });
23
+ it('should return error when at least one status is error', function () {
24
+ var states = [{
25
+ status: 'success'
26
+ }, {
27
+ status: 'error'
28
+ }, {
29
+ status: 'success'
30
+ }];
31
+ expect(getStatus(states)).toBe('error');
32
+ });
33
+ it('should prioritize error over loading', function () {
34
+ var states = [{
35
+ status: 'loading'
36
+ }, {
37
+ status: 'error'
38
+ }, {
39
+ status: 'success'
40
+ }];
41
+ expect(getStatus(states)).toBe('error');
42
+ });
43
+ it('should handle empty array', function () {
44
+ expect(getStatus([])).toBe('success');
45
+ });
46
+ });
47
+ // #sourceMappingURL=getStatus.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getStatus","describe","it","states","status","expect","toBe"],"sources":["getStatus.test.ts"],"sourcesContent":["import type {DataLoaderStatus} from '../../types/DataLoaderStatus';\nimport {getStatus} from '../getStatus';\n\ndescribe('getStatus', () => {\n it('should return success when all statuses are success', () => {\n const states = [\n {status: 'success' as DataLoaderStatus},\n {status: 'success' as DataLoaderStatus},\n {status: 'success' as DataLoaderStatus},\n ];\n expect(getStatus(states)).toBe('success');\n });\n\n it('should return loading when at least one status is loading', () => {\n const states = [\n {status: 'success' as DataLoaderStatus},\n {status: 'loading' as DataLoaderStatus},\n {status: 'success' as DataLoaderStatus},\n ];\n expect(getStatus(states)).toBe('loading');\n });\n\n it('should return error when at least one status is error', () => {\n const states = [\n {status: 'success' as DataLoaderStatus},\n {status: 'error' as DataLoaderStatus},\n {status: 'success' as DataLoaderStatus},\n ];\n expect(getStatus(states)).toBe('error');\n });\n\n it('should prioritize error over loading', () => {\n const states = [\n {status: 'loading' as DataLoaderStatus},\n {status: 'error' as DataLoaderStatus},\n {status: 'success' as DataLoaderStatus},\n ];\n expect(getStatus(states)).toBe('error');\n });\n\n it('should handle empty array', () => {\n expect(getStatus([])).toBe('success');\n });\n});\n"],"mappings":"AACA,SAAQA,SAAS,QAAO,cAAc;AAEtCC,QAAQ,CAAC,WAAW,EAAE,YAAM;EACxBC,EAAE,CAAC,qDAAqD,EAAE,YAAM;IAC5D,IAAMC,MAAM,GAAG,CACX;MAACC,MAAM,EAAE;IAA6B,CAAC,EACvC;MAACA,MAAM,EAAE;IAA6B,CAAC,EACvC;MAACA,MAAM,EAAE;IAA6B,CAAC,CAC1C;IACDC,MAAM,CAACL,SAAS,CAACG,MAAM,CAAC,CAAC,CAACG,IAAI,CAAC,SAAS,CAAC;EAC7C,CAAC,CAAC;EAEFJ,EAAE,CAAC,2DAA2D,EAAE,YAAM;IAClE,IAAMC,MAAM,GAAG,CACX;MAACC,MAAM,EAAE;IAA6B,CAAC,EACvC;MAACA,MAAM,EAAE;IAA6B,CAAC,EACvC;MAACA,MAAM,EAAE;IAA6B,CAAC,CAC1C;IACDC,MAAM,CAACL,SAAS,CAACG,MAAM,CAAC,CAAC,CAACG,IAAI,CAAC,SAAS,CAAC;EAC7C,CAAC,CAAC;EAEFJ,EAAE,CAAC,uDAAuD,EAAE,YAAM;IAC9D,IAAMC,MAAM,GAAG,CACX;MAACC,MAAM,EAAE;IAA6B,CAAC,EACvC;MAACA,MAAM,EAAE;IAA2B,CAAC,EACrC;MAACA,MAAM,EAAE;IAA6B,CAAC,CAC1C;IACDC,MAAM,CAACL,SAAS,CAACG,MAAM,CAAC,CAAC,CAACG,IAAI,CAAC,OAAO,CAAC;EAC3C,CAAC,CAAC;EAEFJ,EAAE,CAAC,sCAAsC,EAAE,YAAM;IAC7C,IAAMC,MAAM,GAAG,CACX;MAACC,MAAM,EAAE;IAA6B,CAAC,EACvC;MAACA,MAAM,EAAE;IAA2B,CAAC,EACrC;MAACA,MAAM,EAAE;IAA6B,CAAC,CAC1C;IACDC,MAAM,CAACL,SAAS,CAACG,MAAM,CAAC,CAAC,CAACG,IAAI,CAAC,OAAO,CAAC;EAC3C,CAAC,CAAC;EAEFJ,EAAE,CAAC,2BAA2B,EAAE,YAAM;IAClCG,MAAM,CAACL,SAAS,CAAC,EAAE,CAAC,CAAC,CAACM,IAAI,CAAC,SAAS,CAAC;EACzC,CAAC,CAAC;AACN,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,29 @@
1
+ import { hasTag } from '../hasTag';
2
+ describe('hasTag', function () {
3
+ it('should return true when key contains tag', function () {
4
+ var key = ['dataSource', 'tag1', 'tag2', 'fullKey'];
5
+ var tag = 'tag1';
6
+ expect(hasTag(key, tag)).toBe(true);
7
+ });
8
+ it('should return false when key does not contain tag', function () {
9
+ var key = ['dataSource', 'tag1', 'tag2', 'fullKey'];
10
+ var tag = 'tag3';
11
+ expect(hasTag(key, tag)).toBe(false);
12
+ });
13
+ it('should return false when tag is at first position (data source name)', function () {
14
+ var key = ['tag1', 'tag2', 'tag3', 'fullKey'];
15
+ var tag = 'tag1';
16
+ expect(hasTag(key, tag)).toBe(false);
17
+ });
18
+ it('should return false when tag is at last position (full key)', function () {
19
+ var key = ['dataSource', 'tag1', 'tag2', 'tag3'];
20
+ var tag = 'tag3';
21
+ expect(hasTag(key, tag)).toBe(false);
22
+ });
23
+ it('should return false when key is not an array', function () {
24
+ var key = 'not an array';
25
+ var tag = 'tag';
26
+ expect(hasTag(key, tag)).toBe(false);
27
+ });
28
+ });
29
+ // #sourceMappingURL=hasTag.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["hasTag","describe","it","key","tag","expect","toBe"],"sources":["hasTag.test.ts"],"sourcesContent":["import type {DataSourceKey, DataSourceTag} from '../../types/DataSource';\nimport {hasTag} from '../hasTag';\n\ndescribe('hasTag', () => {\n it('should return true when key contains tag', () => {\n const key: DataSourceKey = ['dataSource', 'tag1', 'tag2', 'fullKey'];\n const tag: DataSourceTag = 'tag1';\n expect(hasTag(key, tag)).toBe(true);\n });\n\n it('should return false when key does not contain tag', () => {\n const key: DataSourceKey = ['dataSource', 'tag1', 'tag2', 'fullKey'];\n const tag: DataSourceTag = 'tag3';\n expect(hasTag(key, tag)).toBe(false);\n });\n\n it('should return false when tag is at first position (data source name)', () => {\n const key: DataSourceKey = ['tag1', 'tag2', 'tag3', 'fullKey'];\n const tag: DataSourceTag = 'tag1';\n expect(hasTag(key, tag)).toBe(false);\n });\n\n it('should return false when tag is at last position (full key)', () => {\n const key: DataSourceKey = ['dataSource', 'tag1', 'tag2', 'tag3'];\n const tag: DataSourceTag = 'tag3';\n expect(hasTag(key, tag)).toBe(false);\n });\n\n it('should return false when key is not an array', () => {\n const key = 'not an array';\n const tag: DataSourceTag = 'tag';\n expect(hasTag(key as unknown as DataSourceKey, tag)).toBe(false);\n });\n});\n"],"mappings":"AACA,SAAQA,MAAM,QAAO,WAAW;AAEhCC,QAAQ,CAAC,QAAQ,EAAE,YAAM;EACrBC,EAAE,CAAC,0CAA0C,EAAE,YAAM;IACjD,IAAMC,GAAkB,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC;IACpE,IAAMC,GAAkB,GAAG,MAAM;IACjCC,MAAM,CAACL,MAAM,CAACG,GAAG,EAAEC,GAAG,CAAC,CAAC,CAACE,IAAI,CAAC,IAAI,CAAC;EACvC,CAAC,CAAC;EAEFJ,EAAE,CAAC,mDAAmD,EAAE,YAAM;IAC1D,IAAMC,GAAkB,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC;IACpE,IAAMC,GAAkB,GAAG,MAAM;IACjCC,MAAM,CAACL,MAAM,CAACG,GAAG,EAAEC,GAAG,CAAC,CAAC,CAACE,IAAI,CAAC,KAAK,CAAC;EACxC,CAAC,CAAC;EAEFJ,EAAE,CAAC,sEAAsE,EAAE,YAAM;IAC7E,IAAMC,GAAkB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC;IAC9D,IAAMC,GAAkB,GAAG,MAAM;IACjCC,MAAM,CAACL,MAAM,CAACG,GAAG,EAAEC,GAAG,CAAC,CAAC,CAACE,IAAI,CAAC,KAAK,CAAC;EACxC,CAAC,CAAC;EAEFJ,EAAE,CAAC,6DAA6D,EAAE,YAAM;IACpE,IAAMC,GAAkB,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;IACjE,IAAMC,GAAkB,GAAG,MAAM;IACjCC,MAAM,CAACL,MAAM,CAACG,GAAG,EAAEC,GAAG,CAAC,CAAC,CAACE,IAAI,CAAC,KAAK,CAAC;EACxC,CAAC,CAAC;EAEFJ,EAAE,CAAC,8CAA8C,EAAE,YAAM;IACrD,IAAMC,GAAG,GAAG,cAAc;IAC1B,IAAMC,GAAkB,GAAG,KAAK;IAChCC,MAAM,CAACL,MAAM,CAACG,GAAG,EAA8BC,GAAG,CAAC,CAAC,CAACE,IAAI,CAAC,KAAK,CAAC;EACpE,CAAC,CAAC;AACN,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,23 @@
1
+ import { mergeStatuses } from '../mergeStatuses';
2
+ describe('mergeStatuses', function () {
3
+ it('should return success when all statuses are success', function () {
4
+ var statuses = ['success', 'success', 'success'];
5
+ expect(mergeStatuses(statuses)).toBe('success');
6
+ });
7
+ it('should return loading when at least one status is loading', function () {
8
+ var statuses = ['success', 'loading', 'success'];
9
+ expect(mergeStatuses(statuses)).toBe('loading');
10
+ });
11
+ it('should return error when at least one status is error', function () {
12
+ var statuses = ['success', 'error', 'success'];
13
+ expect(mergeStatuses(statuses)).toBe('error');
14
+ });
15
+ it('should prioritize error over loading', function () {
16
+ var statuses = ['loading', 'error', 'success'];
17
+ expect(mergeStatuses(statuses)).toBe('error');
18
+ });
19
+ it('should handle empty array', function () {
20
+ expect(mergeStatuses([])).toBe('success');
21
+ });
22
+ });
23
+ // #sourceMappingURL=mergeStatuses.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["mergeStatuses","describe","it","statuses","expect","toBe"],"sources":["mergeStatuses.test.ts"],"sourcesContent":["import type {DataLoaderStatus} from '../../types/DataLoaderStatus';\nimport {mergeStatuses} from '../mergeStatuses';\n\ndescribe('mergeStatuses', () => {\n it('should return success when all statuses are success', () => {\n const statuses: DataLoaderStatus[] = ['success', 'success', 'success'];\n expect(mergeStatuses(statuses)).toBe('success');\n });\n\n it('should return loading when at least one status is loading', () => {\n const statuses: DataLoaderStatus[] = ['success', 'loading', 'success'];\n expect(mergeStatuses(statuses)).toBe('loading');\n });\n\n it('should return error when at least one status is error', () => {\n const statuses: DataLoaderStatus[] = ['success', 'error', 'success'];\n expect(mergeStatuses(statuses)).toBe('error');\n });\n\n it('should prioritize error over loading', () => {\n const statuses: DataLoaderStatus[] = ['loading', 'error', 'success'];\n expect(mergeStatuses(statuses)).toBe('error');\n });\n\n it('should handle empty array', () => {\n expect(mergeStatuses([])).toBe('success');\n });\n});\n"],"mappings":"AACA,SAAQA,aAAa,QAAO,kBAAkB;AAE9CC,QAAQ,CAAC,eAAe,EAAE,YAAM;EAC5BC,EAAE,CAAC,qDAAqD,EAAE,YAAM;IAC5D,IAAMC,QAA4B,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;IACtEC,MAAM,CAACJ,aAAa,CAACG,QAAQ,CAAC,CAAC,CAACE,IAAI,CAAC,SAAS,CAAC;EACnD,CAAC,CAAC;EAEFH,EAAE,CAAC,2DAA2D,EAAE,YAAM;IAClE,IAAMC,QAA4B,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;IACtEC,MAAM,CAACJ,aAAa,CAACG,QAAQ,CAAC,CAAC,CAACE,IAAI,CAAC,SAAS,CAAC;EACnD,CAAC,CAAC;EAEFH,EAAE,CAAC,uDAAuD,EAAE,YAAM;IAC9D,IAAMC,QAA4B,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC;IACpEC,MAAM,CAACJ,aAAa,CAACG,QAAQ,CAAC,CAAC,CAACE,IAAI,CAAC,OAAO,CAAC;EACjD,CAAC,CAAC;EAEFH,EAAE,CAAC,sCAAsC,EAAE,YAAM;IAC7C,IAAMC,QAA4B,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC;IACpEC,MAAM,CAACJ,aAAa,CAACG,QAAQ,CAAC,CAAC,CAACE,IAAI,CAAC,OAAO,CAAC;EACjD,CAAC,CAAC;EAEFH,EAAE,CAAC,2BAA2B,EAAE,YAAM;IAClCE,MAAM,CAACJ,aAAa,CAAC,EAAE,CAAC,CAAC,CAACK,IAAI,CAAC,SAAS,CAAC;EAC7C,CAAC,CAAC;AACN,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,67 @@
1
+ import _regeneratorRuntime from "@babel/runtime/helpers/regeneratorRuntime";
2
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
3
+ import { skipContext } from '../skipContext';
4
+ describe('skipContext', function () {
5
+ it('should ignore context and query function context parameters', function () {
6
+ var mockFn = jest.fn(function (arg1, arg2) {
7
+ return "".concat(arg1, "-").concat(arg2);
8
+ });
9
+ var wrappedFn = skipContext(mockFn);
10
+ var result = wrappedFn('context', 'queryFnContext', 'hello', 42);
11
+ expect(mockFn).toHaveBeenCalledWith('hello', 42);
12
+ expect(result).toBe('hello-42');
13
+ });
14
+ it('should work with functions that have no parameters', function () {
15
+ var mockFn = jest.fn(function () {
16
+ return 'result';
17
+ });
18
+ var wrappedFn = skipContext(mockFn);
19
+ var result = wrappedFn('context', 'queryFnContext');
20
+ expect(mockFn).toHaveBeenCalledWith();
21
+ expect(result).toBe('result');
22
+ });
23
+ it('should work with async functions', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
24
+ var mockFn, wrappedFn, result;
25
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
26
+ while (1) switch (_context2.prev = _context2.next) {
27
+ case 0:
28
+ mockFn = jest.fn(/*#__PURE__*/function () {
29
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(arg) {
30
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
31
+ while (1) switch (_context.prev = _context.next) {
32
+ case 0:
33
+ return _context.abrupt("return", "async-".concat(arg));
34
+ case 1:
35
+ case "end":
36
+ return _context.stop();
37
+ }
38
+ }, _callee);
39
+ }));
40
+ return function (_x) {
41
+ return _ref2.apply(this, arguments);
42
+ };
43
+ }());
44
+ wrappedFn = skipContext(mockFn);
45
+ _context2.next = 4;
46
+ return wrappedFn('context', 'queryFnContext', 'test');
47
+ case 4:
48
+ result = _context2.sent;
49
+ expect(mockFn).toHaveBeenCalledWith('test');
50
+ expect(result).toBe('async-test');
51
+ case 7:
52
+ case "end":
53
+ return _context2.stop();
54
+ }
55
+ }, _callee2);
56
+ })));
57
+ it('should pass multiple arguments correctly', function () {
58
+ var mockFn = jest.fn(function (arg1, arg2, arg3) {
59
+ return "".concat(arg1, "-").concat(arg2, "-").concat(arg3);
60
+ });
61
+ var wrappedFn = skipContext(mockFn);
62
+ var result = wrappedFn('context', 'queryFnContext', 'hello', 42, true);
63
+ expect(mockFn).toHaveBeenCalledWith('hello', 42, true);
64
+ expect(result).toBe('hello-42-true');
65
+ });
66
+ });
67
+ // #sourceMappingURL=skipContext.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["skipContext","describe","it","mockFn","jest","fn","arg1","arg2","concat","wrappedFn","result","expect","toHaveBeenCalledWith","toBe","_asyncToGenerator","_regeneratorRuntime","mark","_callee2","wrap","_callee2$","_context2","prev","next","_ref2","_callee","arg","_callee$","_context","abrupt","stop","_x","apply","arguments","sent","arg3"],"sources":["skipContext.test.ts"],"sourcesContent":["import {skipContext} from '../skipContext';\n\ndescribe('skipContext', () => {\n it('should ignore context and query function context parameters', () => {\n const mockFn = jest.fn((arg1: string, arg2: number) => `${arg1}-${arg2}`);\n const wrappedFn = skipContext(mockFn);\n const result = wrappedFn('context', 'queryFnContext', 'hello', 42);\n expect(mockFn).toHaveBeenCalledWith('hello', 42);\n expect(result).toBe('hello-42');\n });\n\n it('should work with functions that have no parameters', () => {\n const mockFn = jest.fn(() => 'result');\n const wrappedFn = skipContext(mockFn);\n const result = wrappedFn('context', 'queryFnContext');\n expect(mockFn).toHaveBeenCalledWith();\n expect(result).toBe('result');\n });\n\n it('should work with async functions', async () => {\n const mockFn = jest.fn(async (arg: string) => `async-${arg}`);\n const wrappedFn = skipContext(mockFn);\n const result = await wrappedFn('context', 'queryFnContext', 'test');\n expect(mockFn).toHaveBeenCalledWith('test');\n expect(result).toBe('async-test');\n });\n\n it('should pass multiple arguments correctly', () => {\n const mockFn = jest.fn(\n (arg1: string, arg2: number, arg3: boolean) => `${arg1}-${arg2}-${arg3}`,\n );\n const wrappedFn = skipContext(mockFn);\n const result = wrappedFn('context', 'queryFnContext', 'hello', 42, true);\n expect(mockFn).toHaveBeenCalledWith('hello', 42, true);\n expect(result).toBe('hello-42-true');\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,104 @@
1
+ import { isAbortable, isCancellable, withCancellation } from '../withCancellation';
2
+ describe('withCancellation', function () {
3
+ describe('isCancellable', function () {
4
+ it('should return true for objects with cancel method', function () {
5
+ var cancellable = {
6
+ cancel: jest.fn()
7
+ };
8
+ expect(isCancellable(cancellable)).toBe(true);
9
+ });
10
+ it('should return false for null', function () {
11
+ expect(isCancellable(null)).toBe(false);
12
+ });
13
+ it('should return false for objects without cancel method', function () {
14
+ expect(isCancellable({})).toBe(false);
15
+ });
16
+ it('should return false for objects with invalid cancel method', function () {
17
+ expect(isCancellable({
18
+ cancel: 'not a function'
19
+ })).toBe(false);
20
+ });
21
+ });
22
+ describe('isAbortable', function () {
23
+ it('should return true for objects with valid signal', function () {
24
+ var abortController = new AbortController();
25
+ var abortable = {
26
+ signal: abortController.signal
27
+ };
28
+ expect(isAbortable(abortable)).toBe(true);
29
+ });
30
+ it('should return false for null', function () {
31
+ expect(isAbortable(null)).toBe(false);
32
+ });
33
+ it('should return false for objects without signal', function () {
34
+ expect(isAbortable({})).toBe(false);
35
+ });
36
+ it('should return false for objects with invalid signal', function () {
37
+ expect(isAbortable({
38
+ signal: {}
39
+ })).toBe(false);
40
+ });
41
+ });
42
+ describe('withCancellation', function () {
43
+ it('should add abort listener when fetch returns cancellable and context is abortable', function () {
44
+ var mockCancel = jest.fn();
45
+ var cancellable = {
46
+ cancel: mockCancel
47
+ };
48
+ var abortController = new AbortController();
49
+ var fetchContext = {
50
+ signal: abortController.signal
51
+ };
52
+ var mockFetch = jest.fn().mockReturnValue(cancellable);
53
+ var dataSource = {
54
+ name: 'test',
55
+ fetch: mockFetch
56
+ };
57
+ var wrappedFetch = withCancellation(dataSource.fetch);
58
+ var result = wrappedFetch({}, fetchContext, {});
59
+ expect(mockFetch).toHaveBeenCalledWith({}, fetchContext, {});
60
+ expect(result).toBe(cancellable);
61
+ expect(mockCancel).not.toHaveBeenCalled();
62
+
63
+ // Simulate abort
64
+ abortController.abort();
65
+ expect(mockCancel).toHaveBeenCalled();
66
+ });
67
+ it('should not add abort listener when fetch returns non-cancellable', function () {
68
+ var abortController = new AbortController();
69
+ var fetchContext = {
70
+ signal: abortController.signal
71
+ };
72
+ var mockFetch = jest.fn().mockReturnValue('not cancellable');
73
+ var dataSource = {
74
+ name: 'test',
75
+ fetch: mockFetch
76
+ };
77
+ var wrappedFetch = withCancellation(dataSource.fetch);
78
+ var result = wrappedFetch({}, fetchContext, {});
79
+ expect(mockFetch).toHaveBeenCalledWith({}, fetchContext, {});
80
+ expect(result).toBe('not cancellable');
81
+
82
+ // No error should occur when aborting
83
+ abortController.abort();
84
+ });
85
+ it('should not add abort listener when context is not abortable', function () {
86
+ var mockCancel = jest.fn();
87
+ var cancellable = {
88
+ cancel: mockCancel
89
+ };
90
+ var fetchContext = {};
91
+ var mockFetch = jest.fn().mockReturnValue(cancellable);
92
+ var dataSource = {
93
+ name: 'test',
94
+ fetch: mockFetch
95
+ };
96
+ var wrappedFetch = withCancellation(dataSource.fetch);
97
+ var result = wrappedFetch({}, fetchContext, {});
98
+ expect(mockFetch).toHaveBeenCalledWith({}, fetchContext, {});
99
+ expect(result).toBe(cancellable);
100
+ expect(mockCancel).not.toHaveBeenCalled();
101
+ });
102
+ });
103
+ });
104
+ // #sourceMappingURL=withCancellation.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isAbortable","isCancellable","withCancellation","describe","it","cancellable","cancel","jest","fn","expect","toBe","abortController","AbortController","abortable","signal","mockCancel","fetchContext","mockFetch","mockReturnValue","dataSource","name","fetch","wrappedFetch","result","toHaveBeenCalledWith","not","toHaveBeenCalled","abort"],"sources":["withCancellation.test.ts"],"sourcesContent":["import type {AnyDataSource} from '../../types/DataSource';\nimport type {Cancellable} from '../withCancellation';\nimport {isAbortable, isCancellable, withCancellation} from '../withCancellation';\n\ndescribe('withCancellation', () => {\n describe('isCancellable', () => {\n it('should return true for objects with cancel method', () => {\n const cancellable: Cancellable = {\n cancel: jest.fn(),\n };\n expect(isCancellable(cancellable)).toBe(true);\n });\n\n it('should return false for null', () => {\n expect(isCancellable(null)).toBe(false);\n });\n\n it('should return false for objects without cancel method', () => {\n expect(isCancellable({})).toBe(false);\n });\n\n it('should return false for objects with invalid cancel method', () => {\n expect(isCancellable({cancel: 'not a function'})).toBe(false);\n });\n });\n\n describe('isAbortable', () => {\n it('should return true for objects with valid signal', () => {\n const abortController = new AbortController();\n const abortable = {signal: abortController.signal};\n expect(isAbortable(abortable)).toBe(true);\n });\n\n it('should return false for null', () => {\n expect(isAbortable(null)).toBe(false);\n });\n\n it('should return false for objects without signal', () => {\n expect(isAbortable({})).toBe(false);\n });\n\n it('should return false for objects with invalid signal', () => {\n expect(isAbortable({signal: {}})).toBe(false);\n });\n });\n\n describe('withCancellation', () => {\n it('should add abort listener when fetch returns cancellable and context is abortable', () => {\n const mockCancel = jest.fn();\n const cancellable: Cancellable = {\n cancel: mockCancel,\n };\n\n const abortController = new AbortController();\n const fetchContext = {signal: abortController.signal};\n\n const mockFetch = jest.fn().mockReturnValue(cancellable);\n const dataSource: AnyDataSource = {\n name: 'test',\n fetch: mockFetch,\n };\n\n const wrappedFetch = withCancellation(dataSource.fetch);\n const result = wrappedFetch({}, fetchContext, {});\n\n expect(mockFetch).toHaveBeenCalledWith({}, fetchContext, {});\n expect(result).toBe(cancellable);\n expect(mockCancel).not.toHaveBeenCalled();\n\n // Simulate abort\n abortController.abort();\n expect(mockCancel).toHaveBeenCalled();\n });\n\n it('should not add abort listener when fetch returns non-cancellable', () => {\n const abortController = new AbortController();\n const fetchContext = {signal: abortController.signal};\n\n const mockFetch = jest.fn().mockReturnValue('not cancellable');\n const dataSource: AnyDataSource = {\n name: 'test',\n fetch: mockFetch,\n };\n\n const wrappedFetch = withCancellation(dataSource.fetch);\n const result = wrappedFetch({}, fetchContext, {});\n\n expect(mockFetch).toHaveBeenCalledWith({}, fetchContext, {});\n expect(result).toBe('not cancellable');\n\n // No error should occur when aborting\n abortController.abort();\n });\n\n it('should not add abort listener when context is not abortable', () => {\n const mockCancel = jest.fn();\n const cancellable: Cancellable = {\n cancel: mockCancel,\n };\n\n const fetchContext = {};\n\n const mockFetch = jest.fn().mockReturnValue(cancellable);\n const dataSource: AnyDataSource = {\n name: 'test',\n fetch: mockFetch,\n };\n\n const wrappedFetch = withCancellation(dataSource.fetch);\n const result = wrappedFetch({}, fetchContext, {});\n\n expect(mockFetch).toHaveBeenCalledWith({}, fetchContext, {});\n expect(result).toBe(cancellable);\n expect(mockCancel).not.toHaveBeenCalled();\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,205 @@
1
+ import _typeof from "@babel/runtime/helpers/typeof";
2
+ import _regeneratorRuntime from "@babel/runtime/helpers/regeneratorRuntime";
3
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
4
+ import { withCatch } from '../withCatch';
5
+ describe('withCatch', function () {
6
+ it('should return the result of the fetch function when it succeeds', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
7
+ var mockFetch, mockErrorHandler, safeFetch, result;
8
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
9
+ while (1) switch (_context.prev = _context.next) {
10
+ case 0:
11
+ mockFetch = jest.fn().mockResolvedValue({
12
+ data: 'success'
13
+ });
14
+ mockErrorHandler = jest.fn().mockReturnValue({
15
+ error: 'handled'
16
+ });
17
+ safeFetch = withCatch(mockFetch, mockErrorHandler);
18
+ _context.next = 5;
19
+ return safeFetch('arg1', 42);
20
+ case 5:
21
+ result = _context.sent;
22
+ expect(mockFetch).toHaveBeenCalledWith('arg1', 42);
23
+ expect(mockErrorHandler).not.toHaveBeenCalled();
24
+ expect(result).toEqual({
25
+ data: 'success'
26
+ });
27
+ case 9:
28
+ case "end":
29
+ return _context.stop();
30
+ }
31
+ }, _callee);
32
+ })));
33
+ it('should call the error handler when the fetch function fails', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
34
+ var error, mockFetch, mockErrorHandler, safeFetch, result;
35
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
36
+ while (1) switch (_context2.prev = _context2.next) {
37
+ case 0:
38
+ error = new Error('fetch failed');
39
+ mockFetch = jest.fn().mockRejectedValue(error);
40
+ mockErrorHandler = jest.fn().mockReturnValue({
41
+ error: 'handled'
42
+ });
43
+ safeFetch = withCatch(mockFetch, mockErrorHandler);
44
+ _context2.next = 6;
45
+ return safeFetch('arg1', 42);
46
+ case 6:
47
+ result = _context2.sent;
48
+ expect(mockFetch).toHaveBeenCalledWith('arg1', 42);
49
+ expect(mockErrorHandler).toHaveBeenCalledWith(error);
50
+ expect(result).toEqual({
51
+ error: 'handled'
52
+ });
53
+ case 10:
54
+ case "end":
55
+ return _context2.stop();
56
+ }
57
+ }, _callee2);
58
+ })));
59
+ it('should work with functions that take no parameters', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
60
+ var mockFetch, mockErrorHandler, safeFetch, result;
61
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
62
+ while (1) switch (_context3.prev = _context3.next) {
63
+ case 0:
64
+ mockFetch = jest.fn().mockResolvedValue({
65
+ data: 'success'
66
+ });
67
+ mockErrorHandler = jest.fn().mockReturnValue({
68
+ error: 'handled'
69
+ });
70
+ safeFetch = withCatch(mockFetch, mockErrorHandler);
71
+ _context3.next = 5;
72
+ return safeFetch();
73
+ case 5:
74
+ result = _context3.sent;
75
+ expect(mockFetch).toHaveBeenCalledWith();
76
+ expect(mockErrorHandler).not.toHaveBeenCalled();
77
+ expect(result).toEqual({
78
+ data: 'success'
79
+ });
80
+ case 9:
81
+ case "end":
82
+ return _context3.stop();
83
+ }
84
+ }, _callee3);
85
+ })));
86
+ it('should work with functions that take multiple parameters', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
87
+ var mockFetch, mockErrorHandler, safeFetch, result;
88
+ return _regeneratorRuntime().wrap(function _callee4$(_context4) {
89
+ while (1) switch (_context4.prev = _context4.next) {
90
+ case 0:
91
+ mockFetch = jest.fn().mockResolvedValue({
92
+ data: 'success'
93
+ });
94
+ mockErrorHandler = jest.fn().mockReturnValue({
95
+ error: 'handled'
96
+ });
97
+ safeFetch = withCatch(mockFetch, mockErrorHandler);
98
+ _context4.next = 5;
99
+ return safeFetch('arg1', 42, true, {
100
+ complex: 'object'
101
+ });
102
+ case 5:
103
+ result = _context4.sent;
104
+ expect(mockFetch).toHaveBeenCalledWith('arg1', 42, true, {
105
+ complex: 'object'
106
+ });
107
+ expect(mockErrorHandler).not.toHaveBeenCalled();
108
+ expect(result).toEqual({
109
+ data: 'success'
110
+ });
111
+ case 9:
112
+ case "end":
113
+ return _context4.stop();
114
+ }
115
+ }, _callee4);
116
+ })));
117
+ it('should handle error handlers that return promises', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {
118
+ var error, mockFetch, mockErrorHandler, safeFetch, result;
119
+ return _regeneratorRuntime().wrap(function _callee5$(_context5) {
120
+ while (1) switch (_context5.prev = _context5.next) {
121
+ case 0:
122
+ error = new Error('fetch failed');
123
+ mockFetch = jest.fn().mockRejectedValue(error);
124
+ mockErrorHandler = jest.fn().mockResolvedValue({
125
+ error: 'async handled'
126
+ });
127
+ safeFetch = withCatch(mockFetch, mockErrorHandler);
128
+ _context5.next = 6;
129
+ return safeFetch('arg1');
130
+ case 6:
131
+ result = _context5.sent;
132
+ expect(mockFetch).toHaveBeenCalledWith('arg1');
133
+ expect(mockErrorHandler).toHaveBeenCalledWith(error);
134
+ expect(result).toEqual({
135
+ error: 'async handled'
136
+ });
137
+ case 10:
138
+ case "end":
139
+ return _context5.stop();
140
+ }
141
+ }, _callee5);
142
+ })));
143
+ it('should preserve the type of the fetch function return value', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6() {
144
+ var mockFetch, mockErrorHandler, safeFetch, result, userName;
145
+ return _regeneratorRuntime().wrap(function _callee6$(_context6) {
146
+ while (1) switch (_context6.prev = _context6.next) {
147
+ case 0:
148
+ mockFetch = jest.fn().mockResolvedValue({
149
+ id: 1,
150
+ name: 'John Doe'
151
+ });
152
+ mockErrorHandler = jest.fn().mockReturnValue(null);
153
+ safeFetch = withCatch(mockFetch, mockErrorHandler);
154
+ _context6.next = 5;
155
+ return safeFetch('user1');
156
+ case 5:
157
+ result = _context6.sent;
158
+ expect(result).toEqual({
159
+ id: 1,
160
+ name: 'John Doe'
161
+ });
162
+ // TypeScript should recognize result as User | null
163
+ if (result !== null) {
164
+ // This should compile without errors
165
+ userName = result.name;
166
+ expect(userName).toBe('John Doe');
167
+ }
168
+ case 8:
169
+ case "end":
170
+ return _context6.stop();
171
+ }
172
+ }, _callee6);
173
+ })));
174
+ it('should preserve the type of the error handler return value', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee7() {
175
+ var error, mockFetch, mockErrorHandler, safeFetch, result, errorCode;
176
+ return _regeneratorRuntime().wrap(function _callee7$(_context7) {
177
+ while (1) switch (_context7.prev = _context7.next) {
178
+ case 0:
179
+ error = new Error('fetch failed');
180
+ mockFetch = jest.fn().mockRejectedValue(error);
181
+ mockErrorHandler = jest.fn().mockReturnValue({
182
+ code: 500,
183
+ message: 'Internal Server Error'
184
+ });
185
+ safeFetch = withCatch(mockFetch, mockErrorHandler);
186
+ _context7.next = 6;
187
+ return safeFetch('user1');
188
+ case 6:
189
+ result = _context7.sent;
190
+ expect(mockErrorHandler).toHaveBeenCalledWith(error);
191
+
192
+ // TypeScript should recognize result as unknown | ErrorResponse
193
+ if (_typeof(result) === 'object' && result !== null && 'code' in result) {
194
+ // This should compile without errors
195
+ errorCode = result.code;
196
+ expect(errorCode).toBe(500);
197
+ }
198
+ case 9:
199
+ case "end":
200
+ return _context7.stop();
201
+ }
202
+ }, _callee7);
203
+ })));
204
+ });
205
+ // #sourceMappingURL=withCatch.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["withCatch","describe","it","_asyncToGenerator","_regeneratorRuntime","mark","_callee","mockFetch","mockErrorHandler","safeFetch","result","wrap","_callee$","_context","prev","next","jest","fn","mockResolvedValue","data","mockReturnValue","error","sent","expect","toHaveBeenCalledWith","not","toHaveBeenCalled","toEqual","stop","_callee2","_callee2$","_context2","Error","mockRejectedValue","_callee3","_callee3$","_context3","_callee4","_callee4$","_context4","complex","_callee5","_callee5$","_context5","_callee6","userName","_callee6$","_context6","id","name","toBe","_callee7","errorCode","_callee7$","_context7","code","message","_typeof"],"sources":["withCatch.test.ts"],"sourcesContent":["import {withCatch} from '../withCatch';\n\ndescribe('withCatch', () => {\n it('should return the result of the fetch function when it succeeds', async () => {\n const mockFetch = jest.fn().mockResolvedValue({data: 'success'});\n const mockErrorHandler = jest.fn().mockReturnValue({error: 'handled'});\n\n const safeFetch = withCatch(mockFetch, mockErrorHandler);\n const result = await safeFetch('arg1', 42);\n\n expect(mockFetch).toHaveBeenCalledWith('arg1', 42);\n expect(mockErrorHandler).not.toHaveBeenCalled();\n expect(result).toEqual({data: 'success'});\n });\n\n it('should call the error handler when the fetch function fails', async () => {\n const error = new Error('fetch failed');\n const mockFetch = jest.fn().mockRejectedValue(error);\n const mockErrorHandler = jest.fn().mockReturnValue({error: 'handled'});\n\n const safeFetch = withCatch(mockFetch, mockErrorHandler);\n const result = await safeFetch('arg1', 42);\n\n expect(mockFetch).toHaveBeenCalledWith('arg1', 42);\n expect(mockErrorHandler).toHaveBeenCalledWith(error);\n expect(result).toEqual({error: 'handled'});\n });\n\n it('should work with functions that take no parameters', async () => {\n const mockFetch = jest.fn().mockResolvedValue({data: 'success'});\n const mockErrorHandler = jest.fn().mockReturnValue({error: 'handled'});\n\n const safeFetch = withCatch(mockFetch, mockErrorHandler);\n const result = await safeFetch();\n\n expect(mockFetch).toHaveBeenCalledWith();\n expect(mockErrorHandler).not.toHaveBeenCalled();\n expect(result).toEqual({data: 'success'});\n });\n\n it('should work with functions that take multiple parameters', async () => {\n const mockFetch = jest.fn().mockResolvedValue({data: 'success'});\n const mockErrorHandler = jest.fn().mockReturnValue({error: 'handled'});\n\n const safeFetch = withCatch(mockFetch, mockErrorHandler);\n const result = await safeFetch('arg1', 42, true, {complex: 'object'});\n\n expect(mockFetch).toHaveBeenCalledWith('arg1', 42, true, {complex: 'object'});\n expect(mockErrorHandler).not.toHaveBeenCalled();\n expect(result).toEqual({data: 'success'});\n });\n\n it('should handle error handlers that return promises', async () => {\n const error = new Error('fetch failed');\n const mockFetch = jest.fn().mockRejectedValue(error);\n const mockErrorHandler = jest.fn().mockResolvedValue({error: 'async handled'});\n\n const safeFetch = withCatch(mockFetch, mockErrorHandler);\n const result = await safeFetch('arg1');\n\n expect(mockFetch).toHaveBeenCalledWith('arg1');\n expect(mockErrorHandler).toHaveBeenCalledWith(error);\n expect(result).toEqual({error: 'async handled'});\n });\n\n it('should preserve the type of the fetch function return value', async () => {\n interface User {\n id: number;\n name: string;\n }\n\n const mockFetch = jest.fn().mockResolvedValue({\n id: 1,\n name: 'John Doe',\n } as User);\n\n const mockErrorHandler = jest.fn().mockReturnValue(null);\n\n const safeFetch = withCatch<[string], User, null>(mockFetch, mockErrorHandler);\n const result = await safeFetch('user1');\n\n expect(result).toEqual({id: 1, name: 'John Doe'});\n // TypeScript should recognize result as User | null\n if (result !== null) {\n // This should compile without errors\n const userName = result.name;\n expect(userName).toBe('John Doe');\n }\n });\n\n it('should preserve the type of the error handler return value', async () => {\n interface ErrorResponse {\n code: number;\n message: string;\n }\n\n const error = new Error('fetch failed');\n const mockFetch = jest.fn<Promise<unknown>, [string]>().mockRejectedValue(error);\n\n const mockErrorHandler = jest.fn().mockReturnValue({\n code: 500,\n message: 'Internal Server Error',\n } as ErrorResponse);\n\n const safeFetch = withCatch<[string], unknown, ErrorResponse>(mockFetch, mockErrorHandler);\n const result = await safeFetch('user1');\n\n expect(mockErrorHandler).toHaveBeenCalledWith(error);\n\n // TypeScript should recognize result as unknown | ErrorResponse\n if (typeof result === 'object' && result !== null && 'code' in result) {\n // This should compile without errors\n const errorCode = (result as ErrorResponse).code;\n expect(errorCode).toBe(500);\n }\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Creates a wrapper around a function that safely handles errors using a provided error handler.
3
+ *
4
+ * This utility function enhances a Promise-returning function by adding standardized error handling.
5
+ * It catches any errors thrown by the original function and processes them through the provided
6
+ * error handler, allowing for consistent error management across the application.
7
+ *
8
+ * @template TArgs - The argument types of the original function
9
+ * @template TFetchReturnType - The return type of the original function's Promise
10
+ * @template TCatchReturnType - The return type of the error handler function
11
+ *
12
+ * @param fetchFn - The original function that returns a Promise
13
+ * @param onCatchFn - The error handler function that processes any caught errors
14
+ *
15
+ * @returns A new function with the same signature as the original function,
16
+ * but with error handling applied. The returned function will resolve to either
17
+ * the successful result of the original function or the result of the error handler.
18
+ *
19
+ * @example
20
+ * // Basic usage with a string parameter
21
+ * const fetchUser = withCatch(
22
+ * someFetchFunction,
23
+ * (error) => ({ error: true, message: error.message })
24
+ * );
25
+ */
26
+ export declare function withCatch<TArgs extends unknown[], TFetchReturnType, TCatchReturnType>(fetchFn: (...args: TArgs) => Promise<TFetchReturnType>, onCatchFn: (reason: unknown) => TCatchReturnType): (...args: TArgs) => Promise<TFetchReturnType | TCatchReturnType>;
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Creates a wrapper around a function that safely handles errors using a provided error handler.
3
+ *
4
+ * This utility function enhances a Promise-returning function by adding standardized error handling.
5
+ * It catches any errors thrown by the original function and processes them through the provided
6
+ * error handler, allowing for consistent error management across the application.
7
+ *
8
+ * @template TArgs - The argument types of the original function
9
+ * @template TFetchReturnType - The return type of the original function's Promise
10
+ * @template TCatchReturnType - The return type of the error handler function
11
+ *
12
+ * @param fetchFn - The original function that returns a Promise
13
+ * @param onCatchFn - The error handler function that processes any caught errors
14
+ *
15
+ * @returns A new function with the same signature as the original function,
16
+ * but with error handling applied. The returned function will resolve to either
17
+ * the successful result of the original function or the result of the error handler.
18
+ *
19
+ * @example
20
+ * // Basic usage with a string parameter
21
+ * const fetchUser = withCatch(
22
+ * someFetchFunction,
23
+ * (error) => ({ error: true, message: error.message })
24
+ * );
25
+ */
26
+ export function withCatch(fetchFn, onCatchFn) {
27
+ return function () {
28
+ return fetchFn.apply(void 0, arguments)["catch"](onCatchFn);
29
+ };
30
+ }
31
+ // #sourceMappingURL=withCatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["withCatch","fetchFn","onCatchFn","apply","arguments"],"sources":["withCatch.ts"],"sourcesContent":["/**\n * Creates a wrapper around a function that safely handles errors using a provided error handler.\n *\n * This utility function enhances a Promise-returning function by adding standardized error handling.\n * It catches any errors thrown by the original function and processes them through the provided\n * error handler, allowing for consistent error management across the application.\n *\n * @template TArgs - The argument types of the original function\n * @template TFetchReturnType - The return type of the original function's Promise\n * @template TCatchReturnType - The return type of the error handler function\n *\n * @param fetchFn - The original function that returns a Promise\n * @param onCatchFn - The error handler function that processes any caught errors\n *\n * @returns A new function with the same signature as the original function,\n * but with error handling applied. The returned function will resolve to either\n * the successful result of the original function or the result of the error handler.\n *\n * @example\n * // Basic usage with a string parameter\n * const fetchUser = withCatch(\n * someFetchFunction,\n * (error) => ({ error: true, message: error.message })\n * );\n */\nexport function withCatch<TArgs extends unknown[], TFetchReturnType, TCatchReturnType>(\n fetchFn: (...args: TArgs) => Promise<TFetchReturnType>,\n onCatchFn: (reason: unknown) => TCatchReturnType,\n): (...args: TArgs) => Promise<TFetchReturnType | TCatchReturnType> {\n return (...args) => {\n return fetchFn(...args).catch(onCatchFn) as Promise<TFetchReturnType | TCatchReturnType>;\n };\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,SAASA,CACrBC,OAAsD,EACtDC,SAAgD,EACgB;EAChE,OAAO,YAAa;IAChB,OAAOD,OAAO,CAAAE,KAAA,SAAAC,SAAQ,CAAC,SAAM,CAACF,SAAS,CAAC;EAC5C,CAAC;AACL","ignoreList":[]}