@myko.pk/response 1.0.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.
@@ -0,0 +1,313 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
4
+ // src/response.constants.ts
5
+ var HTTP_STATUS = {
6
+ OK: 200,
7
+ CREATED: 201,
8
+ ACCEPTED: 202,
9
+ NO_CONTENT: 204,
10
+ MULTI_STATUS: 207,
11
+ FOUND: 302,
12
+ BAD_REQUEST: 400
13
+ };
14
+ var RESPONSE_MESSAGES = {
15
+ SUCCESS: "Success",
16
+ CREATED: "Created successfully",
17
+ ACCEPTED: "Request accepted",
18
+ NO_CONTENT: "No content",
19
+ UPDATED: "Updated successfully",
20
+ DELETED: "Deleted successfully",
21
+ PARTIAL_SUCCESS: "Partially successful",
22
+ REDIRECTING: "Redirecting",
23
+ FILE_READY: "File ready for download"
24
+ };
25
+
26
+ // src/builders/response.builder.ts
27
+ var ResponseBuilder = class {
28
+ static {
29
+ __name(this, "ResponseBuilder");
30
+ }
31
+ /**
32
+ * Build a success response
33
+ * @template T - Type of response data
34
+ * @param data - Response data
35
+ * @param message - Success message
36
+ * @param statusCode - HTTP status code
37
+ * @param requestId - Request tracking ID for correlation
38
+ * @returns ApiResponse with success data
39
+ */
40
+ static success(data, message = RESPONSE_MESSAGES.SUCCESS, statusCode = HTTP_STATUS.OK, requestId) {
41
+ return {
42
+ success: true,
43
+ statusCode,
44
+ message,
45
+ data,
46
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
47
+ requestId
48
+ };
49
+ }
50
+ /**
51
+ * Shorthand success response with no data payload (e.g. status-only endpoints)
52
+ * @param message - Success message
53
+ * @param statusCode - HTTP status code
54
+ * @param requestId - Request tracking ID for correlation
55
+ * @returns ApiResponse with no data field
56
+ */
57
+ static ok(message = RESPONSE_MESSAGES.SUCCESS, statusCode = HTTP_STATUS.OK, requestId) {
58
+ return {
59
+ success: true,
60
+ statusCode,
61
+ message,
62
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
63
+ requestId
64
+ };
65
+ }
66
+ /**
67
+ * Build an error response
68
+ * @param message - Error message
69
+ * @param code - Error code for categorization
70
+ * @param statusCode - HTTP status code
71
+ * @param details - Additional error details
72
+ * @param requestId - Request tracking ID for correlation
73
+ * @returns ApiResponse with error information
74
+ */
75
+ static error(message, code, statusCode = HTTP_STATUS.BAD_REQUEST, details, requestId) {
76
+ return {
77
+ success: false,
78
+ statusCode,
79
+ message,
80
+ error: {
81
+ code,
82
+ details
83
+ },
84
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
85
+ requestId
86
+ };
87
+ }
88
+ /**
89
+ * Build a paginated response
90
+ * @template T - Type of array items
91
+ * @param data - Array of items
92
+ * @param total - Total number of items available
93
+ * @param page - Current page number
94
+ * @param limit - Items per page
95
+ * @param message - Success message
96
+ * @param statusCode - HTTP status code
97
+ * @param requestId - Request tracking ID for correlation
98
+ * @returns PaginatedResponse with pagination metadata
99
+ */
100
+ static paginated(data, total, page, limit, message = RESPONSE_MESSAGES.SUCCESS, statusCode = HTTP_STATUS.OK, requestId) {
101
+ const pages = Math.ceil(total / limit);
102
+ return {
103
+ success: true,
104
+ statusCode,
105
+ message,
106
+ data,
107
+ pagination: {
108
+ total,
109
+ page,
110
+ limit,
111
+ pages
112
+ },
113
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
114
+ requestId
115
+ };
116
+ }
117
+ /**
118
+ * Build a cursor-based paginated response for infinite-scroll / "load more" patterns
119
+ * @template T - Type of array items
120
+ * @param data - Array of items for the current page
121
+ * @param total - Total number of items available
122
+ * @param nextCursor - Cursor string for the next page
123
+ * @param hasNextPage - Whether more items exist after this page
124
+ * @param limit - Items per page
125
+ * @param message - Success message
126
+ * @param statusCode - HTTP status code
127
+ * @param requestId - Request tracking ID for correlation
128
+ * @returns CursorPaginatedResponse with cursor metadata
129
+ */
130
+ static cursorPaginated(data, total, nextCursor, hasNextPage, limit, previousCursor, hasPreviousPage, message = RESPONSE_MESSAGES.SUCCESS, statusCode = HTTP_STATUS.OK, requestId) {
131
+ return {
132
+ success: true,
133
+ statusCode,
134
+ message,
135
+ data,
136
+ pagination: {
137
+ total,
138
+ nextCursor,
139
+ previousCursor,
140
+ hasNextPage,
141
+ hasPreviousPage: hasPreviousPage ?? false,
142
+ limit
143
+ },
144
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
145
+ requestId
146
+ };
147
+ }
148
+ /**
149
+ * Build a created (201) response
150
+ * @template T - Type of response data
151
+ * @param data - Created resource data
152
+ * @param message - Success message
153
+ * @param requestId - Request tracking ID for correlation
154
+ * @returns ApiResponse with 201 status code
155
+ */
156
+ static created(data, message = RESPONSE_MESSAGES.CREATED, requestId) {
157
+ return this.success(data, message, HTTP_STATUS.CREATED, requestId);
158
+ }
159
+ /**
160
+ * Build an accepted (202) response for async operations
161
+ * @template T - Type of response data
162
+ * @param data - Response data (optional)
163
+ * @param message - Success message
164
+ * @param requestId - Request tracking ID for correlation
165
+ * @returns ApiResponse with 202 status code
166
+ */
167
+ static accepted(data, message = RESPONSE_MESSAGES.ACCEPTED, requestId) {
168
+ return this.success(data, message, HTTP_STATUS.ACCEPTED, requestId);
169
+ }
170
+ /**
171
+ * Build a no content (204) response
172
+ * @param message - Success message
173
+ * @param requestId - Request tracking ID for correlation
174
+ * @returns ApiResponse with 204 status code
175
+ */
176
+ static noContent(message = RESPONSE_MESSAGES.NO_CONTENT, requestId) {
177
+ return {
178
+ success: true,
179
+ statusCode: HTTP_STATUS.NO_CONTENT,
180
+ message,
181
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
182
+ requestId
183
+ };
184
+ }
185
+ /**
186
+ * Response for successful update operations
187
+ * @param data - Updated resource data
188
+ * @param message - Success message
189
+ * @param requestId - Request tracking ID
190
+ */
191
+ static updated(data, message = RESPONSE_MESSAGES.UPDATED, requestId) {
192
+ return this.success(data, message, HTTP_STATUS.OK, requestId);
193
+ }
194
+ /**
195
+ * Response for successful delete operations
196
+ * @param message - Success message
197
+ * @param requestId - Request tracking ID
198
+ */
199
+ static deleted(message = RESPONSE_MESSAGES.DELETED, requestId) {
200
+ return {
201
+ success: true,
202
+ statusCode: HTTP_STATUS.OK,
203
+ message,
204
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
205
+ requestId
206
+ };
207
+ }
208
+ /**
209
+ * Response for bulk operations (create, update, delete multiple)
210
+ * @param succeeded - Number of successful operations
211
+ * @param failed - Number of failed operations
212
+ * @param total - Total operations attempted
213
+ * @param requestId - Request tracking ID
214
+ */
215
+ static bulkOperation(succeeded, failed, total, requestId) {
216
+ const message = failed === 0 ? `All ${total} operations completed successfully` : `${succeeded} succeeded, ${failed} failed out of ${total} operations`;
217
+ return {
218
+ success: failed === 0,
219
+ statusCode: failed === 0 ? HTTP_STATUS.OK : HTTP_STATUS.MULTI_STATUS,
220
+ message,
221
+ data: {
222
+ succeeded,
223
+ failed,
224
+ total
225
+ },
226
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
227
+ requestId
228
+ };
229
+ }
230
+ /**
231
+ * Response for partial success scenarios
232
+ * @param data - Partial data that was processed
233
+ * @param message - Message describing the partial success
234
+ * @param requestId - Request tracking ID
235
+ */
236
+ static partialSuccess(data, message = RESPONSE_MESSAGES.PARTIAL_SUCCESS, requestId) {
237
+ return {
238
+ success: true,
239
+ statusCode: HTTP_STATUS.MULTI_STATUS,
240
+ message,
241
+ data,
242
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
243
+ requestId
244
+ };
245
+ }
246
+ /**
247
+ * Response for redirect operations
248
+ * @param url - Redirect URL
249
+ * @param statusCode - HTTP status code (301, 302, 307, 308)
250
+ * @param message - Redirect message
251
+ * @param requestId - Request tracking ID
252
+ */
253
+ static redirect(url, statusCode = HTTP_STATUS.FOUND, message = RESPONSE_MESSAGES.REDIRECTING, requestId) {
254
+ return {
255
+ success: true,
256
+ statusCode,
257
+ message,
258
+ data: { url },
259
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
260
+ requestId
261
+ };
262
+ }
263
+ /**
264
+ * Response for file download operations
265
+ * @param filename - Name of the file being downloaded
266
+ * @param size - File size in bytes
267
+ * @param mimeType - MIME type of the file
268
+ * @param requestId - Request tracking ID
269
+ */
270
+ static fileDownload(filename, size, mimeType, requestId) {
271
+ return {
272
+ success: true,
273
+ statusCode: HTTP_STATUS.OK,
274
+ message: RESPONSE_MESSAGES.FILE_READY,
275
+ data: {
276
+ filename,
277
+ size,
278
+ mimeType
279
+ },
280
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
281
+ requestId
282
+ };
283
+ }
284
+ /**
285
+ * Response for import/export operations
286
+ * @param processed - Number of records processed
287
+ * @param imported - Number of records imported
288
+ * @param skipped - Number of records skipped
289
+ * @param errors - Array of error messages
290
+ * @param requestId - Request tracking ID
291
+ */
292
+ static importExport(processed, imported, skipped, errors = [], requestId) {
293
+ const hasErrors = errors.length > 0;
294
+ const message = hasErrors ? `Imported ${imported} records with ${errors.length} errors` : `Successfully imported ${imported} records`;
295
+ return {
296
+ success: !hasErrors,
297
+ statusCode: hasErrors ? HTTP_STATUS.MULTI_STATUS : HTTP_STATUS.OK,
298
+ message,
299
+ data: {
300
+ processed,
301
+ imported,
302
+ skipped,
303
+ errors: hasErrors ? errors : void 0
304
+ },
305
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
306
+ requestId
307
+ };
308
+ }
309
+ };
310
+
311
+ export { ResponseBuilder };
312
+ //# sourceMappingURL=response.builder.js.map
313
+ //# sourceMappingURL=response.builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/response.constants.ts","../../src/builders/response.builder.ts"],"names":[],"mappings":"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","file":"response.builder.js","sourcesContent":["export const RESPONSE_FILTERS = {\n GLOBAL: 'global',\n VALIDATION: 'validation',\n HTTP: 'http',\n DATABASE: 'database',\n AUTH: 'auth',\n} as const;\n\nexport const HTTP_STATUS = {\n OK: 200,\n CREATED: 201,\n ACCEPTED: 202,\n NO_CONTENT: 204,\n MULTI_STATUS: 207,\n FOUND: 302,\n BAD_REQUEST: 400,\n} as const;\n\nexport const RESPONSE_MESSAGES = {\n SUCCESS: 'Success',\n CREATED: 'Created successfully',\n ACCEPTED: 'Request accepted',\n NO_CONTENT: 'No content',\n UPDATED: 'Updated successfully',\n DELETED: 'Deleted successfully',\n PARTIAL_SUCCESS: 'Partially successful',\n REDIRECTING: 'Redirecting',\n FILE_READY: 'File ready for download',\n} as const;\n","import { ApiResponse, PaginatedResponse, CursorPaginatedResponse } from '../types';\nimport { HTTP_STATUS, RESPONSE_MESSAGES } from '../response.constants';\nimport { responseContext } from '../response.context';\n\nexport class ResponseBuilder {\n /**\n * Build a success response\n * @template T - Type of response data\n * @param data - Response data\n * @param message - Success message\n * @param statusCode - HTTP status code\n * @param requestId - Request tracking ID for correlation\n * @returns ApiResponse with success data\n */\n static success<T = any>(\n data: T,\n message: string = RESPONSE_MESSAGES.SUCCESS,\n statusCode: number = HTTP_STATUS.OK,\n requestId?: string\n ): ApiResponse<T> {\n return {\n success: true,\n statusCode,\n message,\n data,\n timestamp: new Date().toISOString(),\n requestId,\n };\n }\n\n /**\n * Shorthand success response with no data payload (e.g. status-only endpoints)\n * @param message - Success message\n * @param statusCode - HTTP status code\n * @param requestId - Request tracking ID for correlation\n * @returns ApiResponse with no data field\n */\n static ok(\n message: string = RESPONSE_MESSAGES.SUCCESS,\n statusCode: number = HTTP_STATUS.OK,\n requestId?: string\n ): ApiResponse {\n return {\n success: true,\n statusCode,\n message,\n timestamp: new Date().toISOString(),\n requestId,\n };\n }\n\n /**\n * Build an error response\n * @param message - Error message\n * @param code - Error code for categorization\n * @param statusCode - HTTP status code\n * @param details - Additional error details\n * @param requestId - Request tracking ID for correlation\n * @returns ApiResponse with error information\n */\n static error(\n message: string,\n code: string,\n statusCode: number = HTTP_STATUS.BAD_REQUEST,\n details?: string,\n requestId?: string\n ): ApiResponse {\n return {\n success: false,\n statusCode,\n message,\n error: {\n code,\n details,\n },\n timestamp: new Date().toISOString(),\n requestId,\n };\n }\n\n /**\n * Build a paginated response\n * @template T - Type of array items\n * @param data - Array of items\n * @param total - Total number of items available\n * @param page - Current page number\n * @param limit - Items per page\n * @param message - Success message\n * @param statusCode - HTTP status code\n * @param requestId - Request tracking ID for correlation\n * @returns PaginatedResponse with pagination metadata\n */\n static paginated<T = any>(\n data: T[],\n total: number,\n page: number,\n limit: number,\n message: string = RESPONSE_MESSAGES.SUCCESS,\n statusCode: number = HTTP_STATUS.OK,\n requestId?: string\n ): PaginatedResponse<T> {\n const pages = Math.ceil(total / limit);\n return {\n success: true,\n statusCode,\n message,\n data,\n pagination: {\n total,\n page,\n limit,\n pages,\n },\n timestamp: new Date().toISOString(),\n requestId,\n };\n }\n\n /**\n * Build a cursor-based paginated response for infinite-scroll / \"load more\" patterns\n * @template T - Type of array items\n * @param data - Array of items for the current page\n * @param total - Total number of items available\n * @param nextCursor - Cursor string for the next page\n * @param hasNextPage - Whether more items exist after this page\n * @param limit - Items per page\n * @param message - Success message\n * @param statusCode - HTTP status code\n * @param requestId - Request tracking ID for correlation\n * @returns CursorPaginatedResponse with cursor metadata\n */\n static cursorPaginated<T = any>(\n data: T[],\n total: number,\n nextCursor: string | undefined,\n hasNextPage: boolean,\n limit: number,\n previousCursor?: string,\n hasPreviousPage?: boolean,\n message: string = RESPONSE_MESSAGES.SUCCESS,\n statusCode: number = HTTP_STATUS.OK,\n requestId?: string\n ): CursorPaginatedResponse<T> {\n return {\n success: true,\n statusCode,\n message,\n data,\n pagination: {\n total,\n nextCursor,\n previousCursor,\n hasNextPage,\n hasPreviousPage: hasPreviousPage ?? false,\n limit,\n },\n timestamp: new Date().toISOString(),\n requestId,\n };\n }\n\n /**\n * Build a created (201) response\n * @template T - Type of response data\n * @param data - Created resource data\n * @param message - Success message\n * @param requestId - Request tracking ID for correlation\n * @returns ApiResponse with 201 status code\n */\n static created<T = any>(\n data: T,\n message: string = RESPONSE_MESSAGES.CREATED,\n requestId?: string\n ): ApiResponse<T> {\n return this.success(data, message, HTTP_STATUS.CREATED, requestId);\n }\n\n /**\n * Build an accepted (202) response for async operations\n * @template T - Type of response data\n * @param data - Response data (optional)\n * @param message - Success message\n * @param requestId - Request tracking ID for correlation\n * @returns ApiResponse with 202 status code\n */\n static accepted<T = any>(\n data: T,\n message: string = RESPONSE_MESSAGES.ACCEPTED,\n requestId?: string\n ): ApiResponse<T> {\n return this.success(data, message, HTTP_STATUS.ACCEPTED, requestId);\n }\n\n /**\n * Build a no content (204) response\n * @param message - Success message\n * @param requestId - Request tracking ID for correlation\n * @returns ApiResponse with 204 status code\n */\n static noContent(\n message: string = RESPONSE_MESSAGES.NO_CONTENT,\n requestId?: string\n ): ApiResponse {\n return {\n success: true,\n statusCode: HTTP_STATUS.NO_CONTENT,\n message,\n timestamp: new Date().toISOString(),\n requestId,\n };\n }\n\n /**\n * Response for successful update operations\n * @param data - Updated resource data\n * @param message - Success message\n * @param requestId - Request tracking ID\n */\n static updated<T = any>(\n data: T,\n message: string = RESPONSE_MESSAGES.UPDATED,\n requestId?: string\n ): ApiResponse<T> {\n return this.success(data, message, HTTP_STATUS.OK, requestId);\n }\n\n /**\n * Response for successful delete operations\n * @param message - Success message\n * @param requestId - Request tracking ID\n */\n static deleted(\n message: string = RESPONSE_MESSAGES.DELETED,\n requestId?: string\n ): ApiResponse {\n return {\n success: true,\n statusCode: HTTP_STATUS.OK,\n message,\n timestamp: new Date().toISOString(),\n requestId,\n };\n }\n\n /**\n * Response for bulk operations (create, update, delete multiple)\n * @param succeeded - Number of successful operations\n * @param failed - Number of failed operations\n * @param total - Total operations attempted\n * @param requestId - Request tracking ID\n */\n static bulkOperation(\n succeeded: number,\n failed: number,\n total: number,\n requestId?: string\n ): ApiResponse {\n const message = failed === 0\n ? `All ${total} operations completed successfully`\n : `${succeeded} succeeded, ${failed} failed out of ${total} operations`;\n\n return {\n success: failed === 0,\n statusCode: failed === 0 ? HTTP_STATUS.OK : HTTP_STATUS.MULTI_STATUS,\n message,\n data: {\n succeeded,\n failed,\n total,\n },\n timestamp: new Date().toISOString(),\n requestId,\n };\n }\n\n /**\n * Response for partial success scenarios\n * @param data - Partial data that was processed\n * @param message - Message describing the partial success\n * @param requestId - Request tracking ID\n */\n static partialSuccess<T = any>(\n data: T,\n message: string = RESPONSE_MESSAGES.PARTIAL_SUCCESS,\n requestId?: string\n ): ApiResponse<T> {\n return {\n success: true,\n statusCode: HTTP_STATUS.MULTI_STATUS,\n message,\n data,\n timestamp: new Date().toISOString(),\n requestId,\n };\n }\n\n /**\n * Response for redirect operations\n * @param url - Redirect URL\n * @param statusCode - HTTP status code (301, 302, 307, 308)\n * @param message - Redirect message\n * @param requestId - Request tracking ID\n */\n static redirect(\n url: string,\n statusCode: number = HTTP_STATUS.FOUND,\n message: string = RESPONSE_MESSAGES.REDIRECTING,\n requestId?: string\n ): ApiResponse {\n return {\n success: true,\n statusCode,\n message,\n data: { url },\n timestamp: new Date().toISOString(),\n requestId,\n };\n }\n\n /**\n * Response for file download operations\n * @param filename - Name of the file being downloaded\n * @param size - File size in bytes\n * @param mimeType - MIME type of the file\n * @param requestId - Request tracking ID\n */\n static fileDownload(\n filename: string,\n size: number,\n mimeType: string,\n requestId?: string\n ): ApiResponse {\n return {\n success: true,\n statusCode: HTTP_STATUS.OK,\n message: RESPONSE_MESSAGES.FILE_READY,\n data: {\n filename,\n size,\n mimeType,\n },\n timestamp: new Date().toISOString(),\n requestId,\n };\n }\n\n /**\n * Response for import/export operations\n * @param processed - Number of records processed\n * @param imported - Number of records imported\n * @param skipped - Number of records skipped\n * @param errors - Array of error messages\n * @param requestId - Request tracking ID\n */\n static importExport(\n processed: number,\n imported: number,\n skipped: number,\n errors: string[] = [],\n requestId?: string\n ): ApiResponse {\n const hasErrors = errors.length > 0;\n const message = hasErrors\n ? `Imported ${imported} records with ${errors.length} errors`\n : `Successfully imported ${imported} records`;\n\n return {\n success: !hasErrors,\n statusCode: hasErrors ? HTTP_STATUS.MULTI_STATUS : HTTP_STATUS.OK,\n message,\n data: {\n processed,\n imported,\n skipped,\n errors: hasErrors ? errors : undefined,\n },\n timestamp: new Date().toISOString(),\n requestId,\n };\n }\n}\n"]}