@dismissible/nestjs-dismissible 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/README.md +490 -0
  2. package/package.json +68 -0
  3. package/src/api/dismissible-item-response.dto.d.ts +9 -0
  4. package/src/api/dismissible-item-response.dto.js +40 -0
  5. package/src/api/dismissible-item-response.dto.js.map +1 -0
  6. package/src/api/dismissible-item.mapper.d.ts +12 -0
  7. package/src/api/dismissible-item.mapper.js +30 -0
  8. package/src/api/dismissible-item.mapper.js.map +1 -0
  9. package/src/api/dismissible-item.mapper.spec.d.ts +1 -0
  10. package/src/api/dismissible-item.mapper.spec.js +43 -0
  11. package/src/api/dismissible-item.mapper.spec.js.map +1 -0
  12. package/src/api/index.d.ts +4 -0
  13. package/src/api/index.js +8 -0
  14. package/src/api/index.js.map +1 -0
  15. package/src/api/use-cases/api-tags.constants.d.ts +4 -0
  16. package/src/api/use-cases/api-tags.constants.js +8 -0
  17. package/src/api/use-cases/api-tags.constants.js.map +1 -0
  18. package/src/api/use-cases/dismiss/dismiss.controller.d.ts +15 -0
  19. package/src/api/use-cases/dismiss/dismiss.controller.js +74 -0
  20. package/src/api/use-cases/dismiss/dismiss.controller.js.map +1 -0
  21. package/src/api/use-cases/dismiss/dismiss.controller.spec.d.ts +1 -0
  22. package/src/api/use-cases/dismiss/dismiss.controller.spec.js +37 -0
  23. package/src/api/use-cases/dismiss/dismiss.controller.spec.js.map +1 -0
  24. package/src/api/use-cases/dismiss/dismiss.response.dto.d.ts +12 -0
  25. package/src/api/use-cases/dismiss/dismiss.response.dto.js +12 -0
  26. package/src/api/use-cases/dismiss/dismiss.response.dto.js.map +1 -0
  27. package/src/api/use-cases/dismiss/index.d.ts +2 -0
  28. package/src/api/use-cases/dismiss/index.js +6 -0
  29. package/src/api/use-cases/dismiss/index.js.map +1 -0
  30. package/src/api/use-cases/get-or-create/get-or-create.controller.d.ts +15 -0
  31. package/src/api/use-cases/get-or-create/get-or-create.controller.js +70 -0
  32. package/src/api/use-cases/get-or-create/get-or-create.controller.js.map +1 -0
  33. package/src/api/use-cases/get-or-create/get-or-create.controller.spec.d.ts +1 -0
  34. package/src/api/use-cases/get-or-create/get-or-create.controller.spec.js +32 -0
  35. package/src/api/use-cases/get-or-create/get-or-create.controller.spec.js.map +1 -0
  36. package/src/api/use-cases/get-or-create/get-or-create.response.dto.d.ts +12 -0
  37. package/src/api/use-cases/get-or-create/get-or-create.response.dto.js +12 -0
  38. package/src/api/use-cases/get-or-create/get-or-create.response.dto.js.map +1 -0
  39. package/src/api/use-cases/get-or-create/index.d.ts +2 -0
  40. package/src/api/use-cases/get-or-create/index.js +6 -0
  41. package/src/api/use-cases/get-or-create/index.js.map +1 -0
  42. package/src/api/use-cases/index.d.ts +3 -0
  43. package/src/api/use-cases/index.js +7 -0
  44. package/src/api/use-cases/index.js.map +1 -0
  45. package/src/api/use-cases/restore/index.d.ts +2 -0
  46. package/src/api/use-cases/restore/index.js +6 -0
  47. package/src/api/use-cases/restore/index.js.map +1 -0
  48. package/src/api/use-cases/restore/restore.controller.d.ts +15 -0
  49. package/src/api/use-cases/restore/restore.controller.js +74 -0
  50. package/src/api/use-cases/restore/restore.controller.js.map +1 -0
  51. package/src/api/use-cases/restore/restore.controller.spec.d.ts +1 -0
  52. package/src/api/use-cases/restore/restore.controller.spec.js +37 -0
  53. package/src/api/use-cases/restore/restore.controller.spec.js.map +1 -0
  54. package/src/api/use-cases/restore/restore.response.dto.d.ts +12 -0
  55. package/src/api/use-cases/restore/restore.response.dto.js +12 -0
  56. package/src/api/use-cases/restore/restore.response.dto.js.map +1 -0
  57. package/src/api/validation/index.d.ts +2 -0
  58. package/src/api/validation/index.js +6 -0
  59. package/src/api/validation/index.js.map +1 -0
  60. package/src/api/validation/param-validation.pipe.d.ts +11 -0
  61. package/src/api/validation/param-validation.pipe.js +36 -0
  62. package/src/api/validation/param-validation.pipe.js.map +1 -0
  63. package/src/api/validation/param-validation.pipe.spec.d.ts +1 -0
  64. package/src/api/validation/param-validation.pipe.spec.js +269 -0
  65. package/src/api/validation/param-validation.pipe.spec.js.map +1 -0
  66. package/src/api/validation/param.decorators.d.ts +28 -0
  67. package/src/api/validation/param.decorators.js +36 -0
  68. package/src/api/validation/param.decorators.js.map +1 -0
  69. package/src/core/dismissible-core.service.d.ts +56 -0
  70. package/src/core/dismissible-core.service.js +147 -0
  71. package/src/core/dismissible-core.service.js.map +1 -0
  72. package/src/core/dismissible-core.service.spec.d.ts +1 -0
  73. package/src/core/dismissible-core.service.spec.js +309 -0
  74. package/src/core/dismissible-core.service.spec.js.map +1 -0
  75. package/src/core/dismissible.service.d.ts +45 -0
  76. package/src/core/dismissible.service.js +127 -0
  77. package/src/core/dismissible.service.js.map +1 -0
  78. package/src/core/dismissible.service.spec.d.ts +1 -0
  79. package/src/core/dismissible.service.spec.js +159 -0
  80. package/src/core/dismissible.service.spec.js.map +1 -0
  81. package/src/core/hook-runner.service.d.ts +88 -0
  82. package/src/core/hook-runner.service.js +226 -0
  83. package/src/core/hook-runner.service.js.map +1 -0
  84. package/src/core/hook-runner.service.spec.d.ts +1 -0
  85. package/src/core/hook-runner.service.spec.js +538 -0
  86. package/src/core/hook-runner.service.spec.js.map +1 -0
  87. package/src/core/index.d.ts +5 -0
  88. package/src/core/index.js +9 -0
  89. package/src/core/index.js.map +1 -0
  90. package/src/core/lifecycle-hook.interface.d.ts +1 -0
  91. package/src/core/lifecycle-hook.interface.js +7 -0
  92. package/src/core/lifecycle-hook.interface.js.map +1 -0
  93. package/src/core/service-responses.interface.d.ts +28 -0
  94. package/src/core/service-responses.interface.js +3 -0
  95. package/src/core/service-responses.interface.js.map +1 -0
  96. package/src/dismissible.module.d.ts +13 -0
  97. package/src/dismissible.module.integration.spec.d.ts +1 -0
  98. package/src/dismissible.module.integration.spec.js +529 -0
  99. package/src/dismissible.module.integration.spec.js.map +1 -0
  100. package/src/dismissible.module.js +77 -0
  101. package/src/dismissible.module.js.map +1 -0
  102. package/src/events/dismissible.events.d.ts +45 -0
  103. package/src/events/dismissible.events.js +53 -0
  104. package/src/events/dismissible.events.js.map +1 -0
  105. package/src/events/events.constants.d.ts +17 -0
  106. package/src/events/events.constants.js +17 -0
  107. package/src/events/events.constants.js.map +1 -0
  108. package/src/events/index.d.ts +2 -0
  109. package/src/events/index.js +6 -0
  110. package/src/events/index.js.map +1 -0
  111. package/src/exceptions/dismissible.exceptions.d.ts +26 -0
  112. package/src/exceptions/dismissible.exceptions.js +49 -0
  113. package/src/exceptions/dismissible.exceptions.js.map +1 -0
  114. package/src/exceptions/dismissible.exceptions.spec.d.ts +1 -0
  115. package/src/exceptions/dismissible.exceptions.spec.js +40 -0
  116. package/src/exceptions/dismissible.exceptions.spec.js.map +1 -0
  117. package/src/exceptions/index.d.ts +1 -0
  118. package/src/exceptions/index.js +5 -0
  119. package/src/exceptions/index.js.map +1 -0
  120. package/src/index.d.ts +8 -0
  121. package/src/index.js +12 -0
  122. package/src/index.js.map +1 -0
  123. package/src/response/dtos/base-response.dto.d.ts +6 -0
  124. package/src/response/dtos/base-response.dto.js +18 -0
  125. package/src/response/dtos/base-response.dto.js.map +1 -0
  126. package/src/response/dtos/error-response.dto.d.ts +19 -0
  127. package/src/response/dtos/error-response.dto.js +39 -0
  128. package/src/response/dtos/error-response.dto.js.map +1 -0
  129. package/src/response/dtos/index.d.ts +3 -0
  130. package/src/response/dtos/index.js +7 -0
  131. package/src/response/dtos/index.js.map +1 -0
  132. package/src/response/dtos/success-response.dto.d.ts +28 -0
  133. package/src/response/dtos/success-response.dto.js +34 -0
  134. package/src/response/dtos/success-response.dto.js.map +1 -0
  135. package/src/response/http-exception-filter.d.ts +4 -0
  136. package/src/response/http-exception-filter.js +24 -0
  137. package/src/response/http-exception-filter.js.map +1 -0
  138. package/src/response/http-exception-filter.spec.d.ts +1 -0
  139. package/src/response/http-exception-filter.spec.js +137 -0
  140. package/src/response/http-exception-filter.spec.js.map +1 -0
  141. package/src/response/index.d.ts +4 -0
  142. package/src/response/index.js +8 -0
  143. package/src/response/index.js.map +1 -0
  144. package/src/response/response.module.d.ts +2 -0
  145. package/src/response/response.module.js +17 -0
  146. package/src/response/response.module.js.map +1 -0
  147. package/src/response/response.service.d.ts +6 -0
  148. package/src/response/response.service.js +25 -0
  149. package/src/response/response.service.js.map +1 -0
  150. package/src/response/response.service.spec.d.ts +1 -0
  151. package/src/response/response.service.spec.js +58 -0
  152. package/src/response/response.service.spec.js.map +1 -0
  153. package/src/testing/factories.d.ts +14 -0
  154. package/src/testing/factories.js +58 -0
  155. package/src/testing/factories.js.map +1 -0
  156. package/src/testing/index.d.ts +1 -0
  157. package/src/testing/index.js +5 -0
  158. package/src/testing/index.js.map +1 -0
  159. package/src/utils/date/date.service.d.ts +8 -0
  160. package/src/utils/date/date.service.js +24 -0
  161. package/src/utils/date/date.service.js.map +1 -0
  162. package/src/utils/date/date.service.spec.d.ts +1 -0
  163. package/src/utils/date/date.service.spec.js +83 -0
  164. package/src/utils/date/date.service.spec.js.map +1 -0
  165. package/src/utils/date/index.d.ts +1 -0
  166. package/src/utils/date/index.js +5 -0
  167. package/src/utils/date/index.js.map +1 -0
  168. package/src/utils/dismissible.helper.d.ts +4 -0
  169. package/src/utils/dismissible.helper.js +15 -0
  170. package/src/utils/dismissible.helper.js.map +1 -0
  171. package/src/utils/index.d.ts +3 -0
  172. package/src/utils/index.js +7 -0
  173. package/src/utils/index.js.map +1 -0
  174. package/src/validation/dismissible-input.dto.d.ts +21 -0
  175. package/src/validation/dismissible-input.dto.js +54 -0
  176. package/src/validation/dismissible-input.dto.js.map +1 -0
  177. package/src/validation/index.d.ts +1 -0
  178. package/src/validation/index.js +5 -0
  179. package/src/validation/index.js.map +1 -0
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const ts_jest_mocker_1 = require("ts-jest-mocker");
4
+ const common_1 = require("@nestjs/common");
5
+ const http_exception_filter_1 = require("./http-exception-filter");
6
+ describe('HttpExceptionFilter', () => {
7
+ let filter;
8
+ let mockArgumentsHost;
9
+ let mockHttpArgumentsHost;
10
+ let mockResponse;
11
+ beforeEach(() => {
12
+ filter = new http_exception_filter_1.HttpExceptionFilter();
13
+ mockResponse = (0, ts_jest_mocker_1.mock)({ failIfMockNotProvided: false });
14
+ mockResponse.status = jest.fn().mockReturnThis();
15
+ mockResponse.send = jest.fn().mockReturnThis();
16
+ mockHttpArgumentsHost = {
17
+ getResponse: jest.fn().mockReturnValue(mockResponse),
18
+ getRequest: jest.fn(),
19
+ getNext: jest.fn(),
20
+ };
21
+ mockArgumentsHost = (0, ts_jest_mocker_1.mock)({ failIfMockNotProvided: false });
22
+ mockArgumentsHost.switchToHttp = jest.fn().mockReturnValue(mockHttpArgumentsHost);
23
+ });
24
+ afterEach(() => {
25
+ jest.clearAllMocks();
26
+ });
27
+ describe('catch', () => {
28
+ it('should handle HttpException with 404 status', () => {
29
+ const exception = new common_1.HttpException('Not found', common_1.HttpStatus.NOT_FOUND);
30
+ filter.catch(exception, mockArgumentsHost);
31
+ expect(mockArgumentsHost.switchToHttp).toHaveBeenCalled();
32
+ expect(mockHttpArgumentsHost.getResponse).toHaveBeenCalled();
33
+ expect(mockResponse.status).toHaveBeenCalledWith(404);
34
+ expect(mockResponse.send).toHaveBeenCalledWith({
35
+ error: {
36
+ message: 'Not found',
37
+ code: 404,
38
+ },
39
+ });
40
+ });
41
+ it('should handle HttpException with 400 status', () => {
42
+ const exception = new common_1.HttpException('Bad request', common_1.HttpStatus.BAD_REQUEST);
43
+ filter.catch(exception, mockArgumentsHost);
44
+ expect(mockResponse.status).toHaveBeenCalledWith(400);
45
+ expect(mockResponse.send).toHaveBeenCalledWith({
46
+ error: {
47
+ message: 'Bad request',
48
+ code: 400,
49
+ },
50
+ });
51
+ });
52
+ it('should handle HttpException with 401 status', () => {
53
+ const exception = new common_1.HttpException('Unauthorized', common_1.HttpStatus.UNAUTHORIZED);
54
+ filter.catch(exception, mockArgumentsHost);
55
+ expect(mockResponse.status).toHaveBeenCalledWith(401);
56
+ expect(mockResponse.send).toHaveBeenCalledWith({
57
+ error: {
58
+ message: 'Unauthorized',
59
+ code: 401,
60
+ },
61
+ });
62
+ });
63
+ it('should handle HttpException with 403 status', () => {
64
+ const exception = new common_1.HttpException('Forbidden', common_1.HttpStatus.FORBIDDEN);
65
+ filter.catch(exception, mockArgumentsHost);
66
+ expect(mockResponse.status).toHaveBeenCalledWith(403);
67
+ expect(mockResponse.send).toHaveBeenCalledWith({
68
+ error: {
69
+ message: 'Forbidden',
70
+ code: 403,
71
+ },
72
+ });
73
+ });
74
+ it('should handle HttpException with 500 status', () => {
75
+ const exception = new common_1.HttpException('Internal server error', common_1.HttpStatus.INTERNAL_SERVER_ERROR);
76
+ filter.catch(exception, mockArgumentsHost);
77
+ expect(mockResponse.status).toHaveBeenCalledWith(500);
78
+ expect(mockResponse.send).toHaveBeenCalledWith({
79
+ error: {
80
+ message: 'Internal server error',
81
+ code: 500,
82
+ },
83
+ });
84
+ });
85
+ it('should handle HttpException with custom status code', () => {
86
+ const exception = new common_1.HttpException('Custom error', 418);
87
+ filter.catch(exception, mockArgumentsHost);
88
+ expect(mockResponse.status).toHaveBeenCalledWith(418);
89
+ expect(mockResponse.send).toHaveBeenCalledWith({
90
+ error: {
91
+ message: 'Custom error',
92
+ code: 418,
93
+ },
94
+ });
95
+ });
96
+ it('should handle HttpException with empty message', () => {
97
+ const exception = new common_1.HttpException('', common_1.HttpStatus.BAD_REQUEST);
98
+ filter.catch(exception, mockArgumentsHost);
99
+ expect(mockResponse.status).toHaveBeenCalledWith(400);
100
+ expect(mockResponse.send).toHaveBeenCalledWith({
101
+ error: {
102
+ message: '',
103
+ code: 400,
104
+ },
105
+ });
106
+ });
107
+ it('should handle HttpException with long message', () => {
108
+ const longMessage = 'This is a very long error message that contains multiple words and should be handled correctly by the filter';
109
+ const exception = new common_1.HttpException(longMessage, common_1.HttpStatus.BAD_REQUEST);
110
+ filter.catch(exception, mockArgumentsHost);
111
+ expect(mockResponse.status).toHaveBeenCalledWith(400);
112
+ expect(mockResponse.send).toHaveBeenCalledWith({
113
+ error: {
114
+ message: longMessage,
115
+ code: 400,
116
+ },
117
+ });
118
+ });
119
+ it('should chain status and send methods correctly', () => {
120
+ const exception = new common_1.HttpException('Test error', common_1.HttpStatus.NOT_FOUND);
121
+ filter.catch(exception, mockArgumentsHost);
122
+ expect(mockResponse.status).toHaveBeenCalled();
123
+ expect(mockResponse.send).toHaveBeenCalled();
124
+ expect(mockResponse.status).toHaveReturnedWith(mockResponse);
125
+ const statusCallOrder = mockResponse.status.mock.invocationCallOrder[0];
126
+ const sendCallOrder = mockResponse.send.mock.invocationCallOrder[0];
127
+ expect(statusCallOrder).toBeLessThan(sendCallOrder);
128
+ });
129
+ it('should extract response from HTTP context correctly', () => {
130
+ const exception = new common_1.HttpException('Test', common_1.HttpStatus.BAD_REQUEST);
131
+ filter.catch(exception, mockArgumentsHost);
132
+ expect(mockArgumentsHost.switchToHttp).toHaveBeenCalledTimes(1);
133
+ expect(mockHttpArgumentsHost.getResponse).toHaveBeenCalledTimes(1);
134
+ });
135
+ });
136
+ });
137
+ //# sourceMappingURL=http-exception-filter.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-exception-filter.spec.js","sourceRoot":"","sources":["../../../../../libs/dismissible/src/response/http-exception-filter.spec.ts"],"names":[],"mappings":";;AAAA,mDAAsC;AACtC,2CAA0E;AAE1E,mEAA8D;AAE9D,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,IAAI,MAA2B,CAAC;IAChC,IAAI,iBAA6C,CAAC;IAClD,IAAI,qBAIH,CAAC;IACF,IAAI,YAAuC,CAAC;IAE5C,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,IAAI,2CAAmB,EAAE,CAAC;QAEnC,YAAY,GAAG,IAAA,qBAAI,EAAe,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC,CAAC;QACpE,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,cAAc,EAAE,CAAC;QACjD,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,cAAc,EAAE,CAAC;QAE/C,qBAAqB,GAAG;YACtB,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,YAAY,CAAC;YACpD,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE;YACrB,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE;SACnB,CAAC;QAEF,iBAAiB,GAAG,IAAA,qBAAI,EAAgB,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1E,iBAAiB,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACrB,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,SAAS,GAAG,IAAI,sBAAa,CAAC,WAAW,EAAE,mBAAU,CAAC,SAAS,CAAC,CAAC;YAEvE,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;YAE3C,MAAM,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC,gBAAgB,EAAE,CAAC;YAC1D,MAAM,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC,gBAAgB,EAAE,CAAC;YAC7D,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;YACtD,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC;gBAC7C,KAAK,EAAE;oBACL,OAAO,EAAE,WAAW;oBACpB,IAAI,EAAE,GAAG;iBACV;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,SAAS,GAAG,IAAI,sBAAa,CAAC,aAAa,EAAE,mBAAU,CAAC,WAAW,CAAC,CAAC;YAE3E,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;YAE3C,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;YACtD,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC;gBAC7C,KAAK,EAAE;oBACL,OAAO,EAAE,aAAa;oBACtB,IAAI,EAAE,GAAG;iBACV;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,SAAS,GAAG,IAAI,sBAAa,CAAC,cAAc,EAAE,mBAAU,CAAC,YAAY,CAAC,CAAC;YAE7E,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;YAE3C,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;YACtD,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC;gBAC7C,KAAK,EAAE;oBACL,OAAO,EAAE,cAAc;oBACvB,IAAI,EAAE,GAAG;iBACV;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,SAAS,GAAG,IAAI,sBAAa,CAAC,WAAW,EAAE,mBAAU,CAAC,SAAS,CAAC,CAAC;YAEvE,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;YAE3C,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;YACtD,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC;gBAC7C,KAAK,EAAE;oBACL,OAAO,EAAE,WAAW;oBACpB,IAAI,EAAE,GAAG;iBACV;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,SAAS,GAAG,IAAI,sBAAa,CACjC,uBAAuB,EACvB,mBAAU,CAAC,qBAAqB,CACjC,CAAC;YAEF,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;YAE3C,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;YACtD,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC;gBAC7C,KAAK,EAAE;oBACL,OAAO,EAAE,uBAAuB;oBAChC,IAAI,EAAE,GAAG;iBACV;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC7D,MAAM,SAAS,GAAG,IAAI,sBAAa,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;YAEzD,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;YAE3C,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;YACtD,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC;gBAC7C,KAAK,EAAE;oBACL,OAAO,EAAE,cAAc;oBACvB,IAAI,EAAE,GAAG;iBACV;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,SAAS,GAAG,IAAI,sBAAa,CAAC,EAAE,EAAE,mBAAU,CAAC,WAAW,CAAC,CAAC;YAEhE,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;YAE3C,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;YACtD,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC;gBAC7C,KAAK,EAAE;oBACL,OAAO,EAAE,EAAE;oBACX,IAAI,EAAE,GAAG;iBACV;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACvD,MAAM,WAAW,GACf,8GAA8G,CAAC;YACjH,MAAM,SAAS,GAAG,IAAI,sBAAa,CAAC,WAAW,EAAE,mBAAU,CAAC,WAAW,CAAC,CAAC;YAEzE,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;YAE3C,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;YACtD,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC;gBAC7C,KAAK,EAAE;oBACL,OAAO,EAAE,WAAW;oBACpB,IAAI,EAAE,GAAG;iBACV;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,SAAS,GAAG,IAAI,sBAAa,CAAC,YAAY,EAAE,mBAAU,CAAC,SAAS,CAAC,CAAC;YAExE,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;YAE3C,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,gBAAgB,EAAE,CAAC;YAC/C,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;YAC7C,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;YAC7D,MAAM,eAAe,GAAI,YAAY,CAAC,MAAoB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;YACvF,MAAM,aAAa,GAAI,YAAY,CAAC,IAAkB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;YACnF,MAAM,CAAC,eAAe,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC7D,MAAM,SAAS,GAAG,IAAI,sBAAa,CAAC,MAAM,EAAE,mBAAU,CAAC,WAAW,CAAC,CAAC;YAEpE,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;YAE3C,MAAM,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YAChE,MAAM,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './response.module';
2
+ export * from './response.service';
3
+ export * from './http-exception-filter';
4
+ export * from './dtos';
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./response.module"), exports);
5
+ tslib_1.__exportStar(require("./response.service"), exports);
6
+ tslib_1.__exportStar(require("./http-exception-filter"), exports);
7
+ tslib_1.__exportStar(require("./dtos"), exports);
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/dismissible/src/response/index.ts"],"names":[],"mappings":";;;AAAA,4DAAkC;AAClC,6DAAmC;AACnC,kEAAwC;AACxC,iDAAuB"}
@@ -0,0 +1,2 @@
1
+ export declare class ResponseModule {
2
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResponseModule = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const common_1 = require("@nestjs/common");
6
+ const response_service_1 = require("./response.service");
7
+ let ResponseModule = class ResponseModule {
8
+ };
9
+ exports.ResponseModule = ResponseModule;
10
+ exports.ResponseModule = ResponseModule = tslib_1.__decorate([
11
+ (0, common_1.Global)(),
12
+ (0, common_1.Module)({
13
+ providers: [response_service_1.ResponseService],
14
+ exports: [response_service_1.ResponseService],
15
+ })
16
+ ], ResponseModule);
17
+ //# sourceMappingURL=response.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.module.js","sourceRoot":"","sources":["../../../../../libs/dismissible/src/response/response.module.ts"],"names":[],"mappings":";;;;AAAA,2CAAgD;AAChD,yDAAqD;AAO9C,IAAM,cAAc,GAApB,MAAM,cAAc;CAAG,CAAA;AAAjB,wCAAc;yBAAd,cAAc;IAL1B,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,kCAAe,CAAC;QAC5B,OAAO,EAAE,CAAC,kCAAe,CAAC;KAC3B,CAAC;GACW,cAAc,CAAG"}
@@ -0,0 +1,6 @@
1
+ import { HttpException } from '@nestjs/common';
2
+ import { IErrorResponseDto, ISuccessResponseDto } from './dtos';
3
+ export declare class ResponseService {
4
+ success<T>(data: T): ISuccessResponseDto<T>;
5
+ error(error: HttpException): IErrorResponseDto;
6
+ }
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResponseService = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const common_1 = require("@nestjs/common");
6
+ let ResponseService = class ResponseService {
7
+ success(data) {
8
+ return {
9
+ data,
10
+ };
11
+ }
12
+ error(error) {
13
+ return {
14
+ error: {
15
+ message: error.message,
16
+ code: error.getStatus(),
17
+ },
18
+ };
19
+ }
20
+ };
21
+ exports.ResponseService = ResponseService;
22
+ exports.ResponseService = ResponseService = tslib_1.__decorate([
23
+ (0, common_1.Injectable)()
24
+ ], ResponseService);
25
+ //# sourceMappingURL=response.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.service.js","sourceRoot":"","sources":["../../../../../libs/dismissible/src/response/response.service.ts"],"names":[],"mappings":";;;;AAAA,2CAA2D;AAIpD,IAAM,eAAe,GAArB,MAAM,eAAe;IAC1B,OAAO,CAAI,IAAO;QAChB,OAAO;YACL,IAAI;SACL,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAoB;QACxB,OAAO;YACL,KAAK,EAAE;gBACL,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE;aACxB;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AAfY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,mBAAU,GAAE;GACA,eAAe,CAe3B"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const response_service_1 = require("./response.service");
4
+ const common_1 = require("@nestjs/common");
5
+ describe('ResponseService', () => {
6
+ let service;
7
+ beforeEach(() => {
8
+ service = new response_service_1.ResponseService();
9
+ });
10
+ describe('success', () => {
11
+ it('should return a success response with the provided data', () => {
12
+ const testData = { id: '123', name: 'Test Item' };
13
+ const result = service.success(testData);
14
+ expect(result).toEqual({
15
+ data: testData,
16
+ });
17
+ });
18
+ it('should work with primitive data types', () => {
19
+ const testString = 'Test String';
20
+ const result = service.success(testString);
21
+ expect(result).toEqual({
22
+ data: testString,
23
+ });
24
+ });
25
+ it('should work with array data', () => {
26
+ const testArray = [1, 2, 3];
27
+ const result = service.success(testArray);
28
+ expect(result).toEqual({
29
+ data: testArray,
30
+ });
31
+ });
32
+ it('should handle null data', () => {
33
+ const result = service.success(null);
34
+ expect(result).toEqual({
35
+ data: null,
36
+ });
37
+ });
38
+ it('should handle undefined data', () => {
39
+ const result = service.success(undefined);
40
+ expect(result).toEqual({
41
+ data: undefined,
42
+ });
43
+ });
44
+ });
45
+ describe('error', () => {
46
+ it('should return an error response with the provided message', () => {
47
+ const errorMessage = new common_1.NotFoundException('Not found');
48
+ const result = service.error(errorMessage);
49
+ expect(result).toEqual({
50
+ error: {
51
+ message: 'Not found',
52
+ code: 404,
53
+ },
54
+ });
55
+ });
56
+ });
57
+ });
58
+ //# sourceMappingURL=response.service.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.service.spec.js","sourceRoot":"","sources":["../../../../../libs/dismissible/src/response/response.service.spec.ts"],"names":[],"mappings":";;AAAA,yDAAqD;AACrD,2CAAmD;AAEnD,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,IAAI,OAAwB,CAAC;IAE7B,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,GAAG,IAAI,kCAAe,EAAE,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACjE,MAAM,QAAQ,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;YAElD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAEzC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,IAAI,EAAE,QAAQ;aACf,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,UAAU,GAAG,aAAa,CAAC;YAEjC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAE3C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,IAAI,EAAE,UAAU;aACjB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAE5B,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAE1C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,IAAI,EAAE,SAAS;aAChB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACjC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAErC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACtC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAE1C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,IAAI,EAAE,SAAS;aAChB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACrB,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;YACnE,MAAM,YAAY,GAAG,IAAI,0BAAiB,CAAC,WAAW,CAAC,CAAC;YACxD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAE3C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,KAAK,EAAE;oBACL,OAAO,EAAE,WAAW;oBACpB,IAAI,EAAE,GAAG;iBACV;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { DismissibleItemDto } from '@dismissible/nestjs-dismissible-item';
2
+ import { IRequestContext } from '@dismissible/nestjs-dismissible-request';
3
+ /**
4
+ * Create a test dismissible item.
5
+ */
6
+ export declare function createTestItem(overrides?: Partial<DismissibleItemDto>): DismissibleItemDto;
7
+ /**
8
+ * Create a test request context.
9
+ */
10
+ export declare function createTestContext(overrides?: Partial<IRequestContext>): IRequestContext;
11
+ /**
12
+ * Create a dismissed test item.
13
+ */
14
+ export declare function createDismissedTestItem(overrides?: Partial<DismissibleItemDto>): DismissibleItemDto;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createTestItem = createTestItem;
4
+ exports.createTestContext = createTestContext;
5
+ exports.createDismissedTestItem = createDismissedTestItem;
6
+ const nestjs_dismissible_item_1 = require("@dismissible/nestjs-dismissible-item");
7
+ /**
8
+ * Shared factory instance for test helpers.
9
+ */
10
+ const testItemFactory = new nestjs_dismissible_item_1.DismissibleItemFactory();
11
+ /**
12
+ * Create a test dismissible item.
13
+ */
14
+ function createTestItem(overrides = {}) {
15
+ return testItemFactory.create({
16
+ id: overrides.id ?? 'test-item-id',
17
+ createdAt: overrides.createdAt ?? new Date('2024-01-15T10:00:00.000Z'),
18
+ userId: overrides.userId ?? 'test-user-id',
19
+ dismissedAt: overrides.dismissedAt,
20
+ });
21
+ }
22
+ /**
23
+ * Create a test request context.
24
+ */
25
+ function createTestContext(overrides = {}) {
26
+ return {
27
+ requestId: 'test-request-id',
28
+ headers: {},
29
+ query: {},
30
+ params: {},
31
+ body: {},
32
+ user: {},
33
+ ip: '127.0.0.1',
34
+ method: 'GET',
35
+ url: '/test',
36
+ protocol: 'http',
37
+ secure: false,
38
+ hostname: 'localhost',
39
+ port: 3000,
40
+ path: '/test',
41
+ search: '',
42
+ searchParams: {},
43
+ origin: 'http://localhost:3000',
44
+ referer: '',
45
+ userAgent: 'test-agent',
46
+ ...overrides,
47
+ };
48
+ }
49
+ /**
50
+ * Create a dismissed test item.
51
+ */
52
+ function createDismissedTestItem(overrides = {}) {
53
+ return createTestItem({
54
+ dismissedAt: new Date('2024-01-15T12:00:00.000Z'),
55
+ ...overrides,
56
+ });
57
+ }
58
+ //# sourceMappingURL=factories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factories.js","sourceRoot":"","sources":["../../../../../libs/dismissible/src/testing/factories.ts"],"names":[],"mappings":";;AAYA,wCAOC;AAKD,8CAuBC;AAKD,0DAOC;AA1DD,kFAA8E;AAG9E;;GAEG;AACH,MAAM,eAAe,GAAG,IAAI,gDAAsB,EAAE,CAAC;AAErD;;GAEG;AACH,SAAgB,cAAc,CAAC,YAAyC,EAAE;IACxE,OAAO,eAAe,CAAC,MAAM,CAAC;QAC5B,EAAE,EAAE,SAAS,CAAC,EAAE,IAAI,cAAc;QAClC,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,IAAI,IAAI,CAAC,0BAA0B,CAAC;QACtE,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,cAAc;QAC1C,WAAW,EAAE,SAAS,CAAC,WAAW;KACnC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,YAAsC,EAAE;IACxE,OAAO;QACL,SAAS,EAAE,iBAAiB;QAC5B,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,EAAE;QACR,EAAE,EAAE,WAAW;QACf,MAAM,EAAE,KAAK;QACb,GAAG,EAAE,OAAO;QACZ,QAAQ,EAAE,MAAM;QAChB,MAAM,EAAE,KAAK;QACb,QAAQ,EAAE,WAAW;QACrB,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,EAAE;QACV,YAAY,EAAE,EAAE;QAChB,MAAM,EAAE,uBAAuB;QAC/B,OAAO,EAAE,EAAE;QACX,SAAS,EAAE,YAAY;QACvB,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,uBAAuB,CACrC,YAAyC,EAAE;IAE3C,OAAO,cAAc,CAAC;QACpB,WAAW,EAAE,IAAI,IAAI,CAAC,0BAA0B,CAAC;QACjD,GAAG,SAAS;KACb,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1 @@
1
+ export * from './factories';
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./factories"), exports);
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/dismissible/src/testing/index.ts"],"names":[],"mappings":";;;AAAA,sDAA4B"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Service for date operations.
3
+ */
4
+ export declare class DateService {
5
+ getNow(): Date;
6
+ parseIso(isoString: string): Date;
7
+ toIso(date: Date): string;
8
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DateService = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const common_1 = require("@nestjs/common");
6
+ /**
7
+ * Service for date operations.
8
+ */
9
+ let DateService = class DateService {
10
+ getNow() {
11
+ return new Date();
12
+ }
13
+ parseIso(isoString) {
14
+ return new Date(isoString);
15
+ }
16
+ toIso(date) {
17
+ return date.toISOString();
18
+ }
19
+ };
20
+ exports.DateService = DateService;
21
+ exports.DateService = DateService = tslib_1.__decorate([
22
+ (0, common_1.Injectable)()
23
+ ], DateService);
24
+ //# sourceMappingURL=date.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date.service.js","sourceRoot":"","sources":["../../../../../../libs/dismissible/src/utils/date/date.service.ts"],"names":[],"mappings":";;;;AAAA,2CAA4C;AAE5C;;GAEG;AAEI,IAAM,WAAW,GAAjB,MAAM,WAAW;IACtB,MAAM;QACJ,OAAO,IAAI,IAAI,EAAE,CAAC;IACpB,CAAC;IAED,QAAQ,CAAC,SAAiB;QACxB,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,IAAU;QACd,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;CACF,CAAA;AAZY,kCAAW;sBAAX,WAAW;IADvB,IAAA,mBAAU,GAAE;GACA,WAAW,CAYvB"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const date_service_1 = require("./date.service");
4
+ describe('DateService', () => {
5
+ let service;
6
+ beforeEach(() => {
7
+ service = new date_service_1.DateService();
8
+ });
9
+ describe('getNow', () => {
10
+ it('should return current date', () => {
11
+ const before = new Date();
12
+ const result = service.getNow();
13
+ const after = new Date();
14
+ expect(result).toBeInstanceOf(Date);
15
+ expect(result.getTime()).toBeGreaterThanOrEqual(before.getTime());
16
+ expect(result.getTime()).toBeLessThanOrEqual(after.getTime());
17
+ });
18
+ it('should return a new date instance each time', () => {
19
+ const date1 = service.getNow();
20
+ const date2 = service.getNow();
21
+ expect(date1).not.toBe(date2);
22
+ });
23
+ });
24
+ describe('parseIso', () => {
25
+ it('should parse ISO 8601 string to Date', () => {
26
+ const isoString = '2024-01-15T10:30:00.000Z';
27
+ const result = service.parseIso(isoString);
28
+ expect(result).toBeInstanceOf(Date);
29
+ expect(result.toISOString()).toBe(isoString);
30
+ });
31
+ it('should parse date-only ISO string', () => {
32
+ const isoString = '2024-01-15';
33
+ const result = service.parseIso(isoString);
34
+ expect(result).toBeInstanceOf(Date);
35
+ expect(result.getFullYear()).toBe(2024);
36
+ expect(result.getMonth()).toBe(0); // January is 0
37
+ expect(result.getDate()).toBe(15);
38
+ });
39
+ it('should parse ISO string with timezone offset', () => {
40
+ const isoString = '2024-01-15T10:30:00+05:00';
41
+ const result = service.parseIso(isoString);
42
+ expect(result).toBeInstanceOf(Date);
43
+ });
44
+ it('should handle various ISO formats', () => {
45
+ const testCases = ['2024-01-15T10:30:00.000Z', '2024-01-15T10:30:00Z', '2024-01-15'];
46
+ testCases.forEach((isoString) => {
47
+ const result = service.parseIso(isoString);
48
+ expect(result).toBeInstanceOf(Date);
49
+ expect(isNaN(result.getTime())).toBe(false);
50
+ });
51
+ });
52
+ });
53
+ describe('toIso', () => {
54
+ it('should convert Date to ISO 8601 string', () => {
55
+ const date = new Date('2024-01-15T10:30:00.000Z');
56
+ const result = service.toIso(date);
57
+ expect(result).toBe('2024-01-15T10:30:00.000Z');
58
+ });
59
+ it('should produce valid ISO string format', () => {
60
+ const date = new Date('2024-12-25T23:59:59.999Z');
61
+ const result = service.toIso(date);
62
+ expect(result).toMatch(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/);
63
+ expect(result).toBe('2024-12-25T23:59:59.999Z');
64
+ });
65
+ it('should handle dates at start of epoch', () => {
66
+ const date = new Date('1970-01-01T00:00:00.000Z');
67
+ const result = service.toIso(date);
68
+ expect(result).toBe('1970-01-01T00:00:00.000Z');
69
+ });
70
+ it('should handle dates in the future', () => {
71
+ const date = new Date('2099-12-31T23:59:59.999Z');
72
+ const result = service.toIso(date);
73
+ expect(result).toBe('2099-12-31T23:59:59.999Z');
74
+ });
75
+ it('should round-trip through parseIso and toIso', () => {
76
+ const originalIso = '2024-01-15T10:30:00.000Z';
77
+ const date = service.parseIso(originalIso);
78
+ const result = service.toIso(date);
79
+ expect(result).toBe(originalIso);
80
+ });
81
+ });
82
+ });
83
+ //# sourceMappingURL=date.service.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date.service.spec.js","sourceRoot":"","sources":["../../../../../../libs/dismissible/src/utils/date/date.service.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export * from './date.service';
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./date.service"), exports);
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/dismissible/src/utils/date/index.ts"],"names":[],"mappings":";;;AAAA,yDAA+B"}
@@ -0,0 +1,4 @@
1
+ import { DismissibleItemDto } from '@dismissible/nestjs-dismissible-item';
2
+ export declare class DismissibleHelper {
3
+ isDismissed(item: DismissibleItemDto): boolean;
4
+ }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DismissibleHelper = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const common_1 = require("@nestjs/common");
6
+ let DismissibleHelper = class DismissibleHelper {
7
+ isDismissed(item) {
8
+ return item.dismissedAt !== undefined && item.dismissedAt !== null;
9
+ }
10
+ };
11
+ exports.DismissibleHelper = DismissibleHelper;
12
+ exports.DismissibleHelper = DismissibleHelper = tslib_1.__decorate([
13
+ (0, common_1.Injectable)()
14
+ ], DismissibleHelper);
15
+ //# sourceMappingURL=dismissible.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dismissible.helper.js","sourceRoot":"","sources":["../../../../../libs/dismissible/src/utils/dismissible.helper.ts"],"names":[],"mappings":";;;;AAAA,2CAA4C;AAIrC,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAC5B,WAAW,CAAC,IAAwB;QAClC,OAAO,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC;IACrE,CAAC;CACF,CAAA;AAJY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;GACA,iBAAiB,CAI7B"}
@@ -0,0 +1,3 @@
1
+ export * from './date';
2
+ export * from '../response';
3
+ export * from './dismissible.helper';
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./date"), exports);
5
+ tslib_1.__exportStar(require("../response"), exports);
6
+ tslib_1.__exportStar(require("./dismissible.helper"), exports);
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/dismissible/src/utils/index.ts"],"names":[],"mappings":";;;AAAA,iDAAuB;AACvB,sDAA4B;AAC5B,+DAAqC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Validation constants for dismissible input fields.
3
+ */
4
+ export declare const VALIDATION_CONSTANTS: {
5
+ /** Maximum length for userId and itemId */
6
+ readonly ID_MAX_LENGTH: 64;
7
+ /** Minimum length for userId and itemId */
8
+ readonly ID_MIN_LENGTH: 1;
9
+ /** Pattern for valid userId and itemId (alphanumeric, dash, underscore) */
10
+ readonly ID_PATTERN: RegExp;
11
+ /** Human-readable description of the ID pattern */
12
+ readonly ID_PATTERN_MESSAGE: "must contain only alphanumeric characters, dashes, and underscores";
13
+ };
14
+ /**
15
+ * DTO for validating dismissible input parameters (userId and itemId).
16
+ * Used at both controller and service layers for defense in depth.
17
+ */
18
+ export declare class DismissibleInputDto {
19
+ itemId: string;
20
+ userId: string;
21
+ }