glasswork 0.9.2 → 0.10.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 (105) hide show
  1. package/dist/core/bootstrap.d.ts +2 -1
  2. package/dist/core/bootstrap.d.ts.map +1 -1
  3. package/dist/core/bootstrap.js +121 -44
  4. package/dist/core/bootstrap.js.map +1 -1
  5. package/dist/core/types.d.ts +53 -3
  6. package/dist/core/types.d.ts.map +1 -1
  7. package/dist/http/error-handler.d.ts +28 -3
  8. package/dist/http/error-handler.d.ts.map +1 -1
  9. package/dist/http/error-handler.js +97 -22
  10. package/dist/http/error-handler.js.map +1 -1
  11. package/dist/http/errors.d.ts +52 -22
  12. package/dist/http/errors.d.ts.map +1 -1
  13. package/dist/http/errors.js +62 -42
  14. package/dist/http/errors.js.map +1 -1
  15. package/dist/http/route-helpers.d.ts +13 -0
  16. package/dist/http/route-helpers.d.ts.map +1 -1
  17. package/dist/http/route-helpers.js +15 -3
  18. package/dist/http/route-helpers.js.map +1 -1
  19. package/dist/index.d.ts +5 -2
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +9 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/list-query/builder.d.ts +5 -0
  24. package/dist/list-query/builder.d.ts.map +1 -1
  25. package/dist/list-query/builder.js +34 -1
  26. package/dist/list-query/builder.js.map +1 -1
  27. package/dist/middleware/rate-limit.d.ts.map +1 -1
  28. package/dist/middleware/rate-limit.js +28 -18
  29. package/dist/middleware/rate-limit.js.map +1 -1
  30. package/dist/observability/exception-tracking.d.ts +214 -0
  31. package/dist/observability/exception-tracking.d.ts.map +1 -0
  32. package/dist/observability/exception-tracking.js +238 -0
  33. package/dist/observability/exception-tracking.js.map +1 -0
  34. package/dist/observability/pino-logger.d.ts +108 -0
  35. package/dist/observability/pino-logger.d.ts.map +1 -0
  36. package/dist/observability/pino-logger.js +158 -0
  37. package/dist/observability/pino-logger.js.map +1 -0
  38. package/dist/observability/request-context.d.ts +105 -0
  39. package/dist/observability/request-context.d.ts.map +1 -0
  40. package/dist/observability/request-context.js +115 -0
  41. package/dist/observability/request-context.js.map +1 -0
  42. package/dist/openapi/openapi.d.ts.map +1 -1
  43. package/dist/openapi/openapi.js +3 -1
  44. package/dist/openapi/openapi.js.map +1 -1
  45. package/dist/utils/environment.d.ts +2 -1
  46. package/dist/utils/environment.d.ts.map +1 -1
  47. package/dist/utils/environment.js +11 -2
  48. package/dist/utils/environment.js.map +1 -1
  49. package/dist/utils/logger.d.ts +43 -9
  50. package/dist/utils/logger.d.ts.map +1 -1
  51. package/dist/utils/logger.js +60 -16
  52. package/dist/utils/logger.js.map +1 -1
  53. package/package.json +6 -1
  54. package/dist/authorization/ability-middleware.d.ts +0 -61
  55. package/dist/authorization/ability-middleware.d.ts.map +0 -1
  56. package/dist/authorization/ability-middleware.js +0 -74
  57. package/dist/authorization/ability-middleware.js.map +0 -1
  58. package/dist/authorization/index.d.ts +0 -46
  59. package/dist/authorization/index.d.ts.map +0 -1
  60. package/dist/authorization/index.js +0 -46
  61. package/dist/authorization/index.js.map +0 -1
  62. package/dist/authorization/route-helpers.d.ts +0 -106
  63. package/dist/authorization/route-helpers.d.ts.map +0 -1
  64. package/dist/authorization/route-helpers.js +0 -136
  65. package/dist/authorization/route-helpers.js.map +0 -1
  66. package/dist/authorization/service-proxy.d.ts +0 -59
  67. package/dist/authorization/service-proxy.d.ts.map +0 -1
  68. package/dist/authorization/service-proxy.js +0 -110
  69. package/dist/authorization/service-proxy.js.map +0 -1
  70. package/dist/authorization/types.d.ts +0 -58
  71. package/dist/authorization/types.d.ts.map +0 -1
  72. package/dist/authorization/types.js +0 -7
  73. package/dist/authorization/types.js.map +0 -1
  74. package/dist/hooks/authorization-hook.d.ts +0 -100
  75. package/dist/hooks/authorization-hook.d.ts.map +0 -1
  76. package/dist/hooks/authorization-hook.js +0 -93
  77. package/dist/hooks/authorization-hook.js.map +0 -1
  78. package/dist/hooks/index.d.ts +0 -54
  79. package/dist/hooks/index.d.ts.map +0 -1
  80. package/dist/hooks/index.js +0 -55
  81. package/dist/hooks/index.js.map +0 -1
  82. package/dist/hooks/service-hooks.d.ts +0 -82
  83. package/dist/hooks/service-hooks.d.ts.map +0 -1
  84. package/dist/hooks/service-hooks.js +0 -158
  85. package/dist/hooks/service-hooks.js.map +0 -1
  86. package/dist/hooks/types.d.ts +0 -151
  87. package/dist/hooks/types.d.ts.map +0 -1
  88. package/dist/hooks/types.js +0 -2
  89. package/dist/hooks/types.js.map +0 -1
  90. package/dist/openapi/hooks.d.ts +0 -14
  91. package/dist/openapi/hooks.d.ts.map +0 -1
  92. package/dist/openapi/hooks.js +0 -83
  93. package/dist/openapi/hooks.js.map +0 -1
  94. package/dist/openapi/openapi-transformer.d.ts +0 -13
  95. package/dist/openapi/openapi-transformer.d.ts.map +0 -1
  96. package/dist/openapi/openapi-transformer.js +0 -87
  97. package/dist/openapi/openapi-transformer.js.map +0 -1
  98. package/dist/utils/pagination.d.ts +0 -48
  99. package/dist/utils/pagination.d.ts.map +0 -1
  100. package/dist/utils/pagination.js +0 -42
  101. package/dist/utils/pagination.js.map +0 -1
  102. package/dist/utils/serialize-dates.d.ts +0 -27
  103. package/dist/utils/serialize-dates.d.ts.map +0 -1
  104. package/dist/utils/serialize-dates.js +0 -39
  105. package/dist/utils/serialize-dates.js.map +0 -1
@@ -1,83 +0,0 @@
1
- /**
2
- * Create a hook that adds CORS headers to responses
3
- */
4
- export function createCorsHeadersHook(enabled) {
5
- return (response, _context) => {
6
- if (!enabled)
7
- return response;
8
- return {
9
- ...response,
10
- headers: {
11
- ...response.headers,
12
- 'Access-Control-Allow-Origin': {
13
- $ref: '#/components/headers/Access-Control-Allow-Origin',
14
- },
15
- },
16
- };
17
- };
18
- }
19
- /**
20
- * Create a hook that adds rate limiting headers to responses
21
- */
22
- export function createRateLimitHeadersHook(enabled) {
23
- return (response, context) => {
24
- if (!enabled)
25
- return response;
26
- const { statusCode } = context;
27
- const headers = {
28
- 'RateLimit-Limit': {
29
- $ref: '#/components/headers/RateLimit-Limit',
30
- },
31
- 'RateLimit-Remaining': {
32
- $ref: '#/components/headers/RateLimit-Remaining',
33
- },
34
- 'RateLimit-Reset': {
35
- $ref: '#/components/headers/RateLimit-Reset',
36
- },
37
- };
38
- // Add Retry-After header for 429 responses
39
- if (statusCode === '429') {
40
- headers['Retry-After'] = {
41
- $ref: '#/components/headers/Retry-After',
42
- };
43
- }
44
- return {
45
- ...response,
46
- headers: {
47
- ...response.headers,
48
- ...headers,
49
- },
50
- };
51
- };
52
- }
53
- /**
54
- * Create a hook that adds pagination headers to 200 responses
55
- */
56
- export function createPaginationHeadersHook() {
57
- return (response, context) => {
58
- const { statusCode, routeConfig } = context;
59
- // Only add pagination headers to 200 responses with paginate flag
60
- if (statusCode !== '200' || !routeConfig.paginate) {
61
- return response;
62
- }
63
- return {
64
- ...response,
65
- headers: {
66
- ...response.headers,
67
- 'X-Total-Count': {
68
- $ref: '#/components/headers/X-Total-Count',
69
- },
70
- 'X-Total-Pages': {
71
- $ref: '#/components/headers/X-Total-Pages',
72
- },
73
- 'X-Current-Page': {
74
- $ref: '#/components/headers/X-Current-Page',
75
- },
76
- 'X-Page-Size': {
77
- $ref: '#/components/headers/X-Page-Size',
78
- },
79
- },
80
- };
81
- };
82
- }
83
- //# sourceMappingURL=hooks.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/openapi/hooks.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;QAC5B,IAAI,CAAC,OAAO;YAAE,OAAO,QAAQ,CAAC;QAE9B,OAAO;YACL,GAAG,QAAQ;YACX,OAAO,EAAE;gBACP,GAAG,QAAQ,CAAC,OAAO;gBACnB,6BAA6B,EAAE;oBAC7B,IAAI,EAAE,kDAAkD;iBACzD;aACF;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAAgB;IACzD,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE;QAC3B,IAAI,CAAC,OAAO;YAAE,OAAO,QAAQ,CAAC;QAE9B,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;QAC/B,MAAM,OAAO,GAAqC;YAChD,iBAAiB,EAAE;gBACjB,IAAI,EAAE,sCAAsC;aAC7C;YACD,qBAAqB,EAAE;gBACrB,IAAI,EAAE,0CAA0C;aACjD;YACD,iBAAiB,EAAE;gBACjB,IAAI,EAAE,sCAAsC;aAC7C;SACF,CAAC;QAEF,2CAA2C;QAC3C,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,aAAa,CAAC,GAAG;gBACvB,IAAI,EAAE,kCAAkC;aACzC,CAAC;QACJ,CAAC;QAED,OAAO;YACL,GAAG,QAAQ;YACX,OAAO,EAAE;gBACP,GAAG,QAAQ,CAAC,OAAO;gBACnB,GAAG,OAAO;aACX;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B;IACzC,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE;QAC3B,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;QAE5C,kEAAkE;QAClE,IAAI,UAAU,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;YAClD,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,OAAO;YACL,GAAG,QAAQ;YACX,OAAO,EAAE;gBACP,GAAG,QAAQ,CAAC,OAAO;gBACnB,eAAe,EAAE;oBACf,IAAI,EAAE,oCAAoC;iBAC3C;gBACD,eAAe,EAAE;oBACf,IAAI,EAAE,oCAAoC;iBAC3C;gBACD,gBAAgB,EAAE;oBAChB,IAAI,EAAE,qCAAqC;iBAC5C;gBACD,aAAa,EAAE;oBACb,IAAI,EAAE,kCAAkC;iBACzC;aACF;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -1,13 +0,0 @@
1
- import type { OpenAPIV3_1 } from 'openapi-types';
2
- /**
3
- * Transforms an OpenAPI document to ensure OpenAPI 3.1.0 compatibility
4
- *
5
- * This function:
6
- * - Converts OpenAPI 3.0-style nullable syntax to OpenAPI 3.1.0 format
7
- * - Recursively processes all schemas in components, paths, and responses
8
- *
9
- * @param doc - OpenAPI document to transform
10
- * @returns Transformed OpenAPI document
11
- */
12
- export declare function transformOpenAPIDocument(doc: OpenAPIV3_1.Document): OpenAPIV3_1.Document;
13
- //# sourceMappingURL=openapi-transformer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openapi-transformer.d.ts","sourceRoot":"","sources":["../../src/openapi/openapi-transformer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAmFjD;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,WAAW,CAAC,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAExF"}
@@ -1,87 +0,0 @@
1
- /**
2
- * Checks if an array of anyOf/oneOf items contains a schema with nullable: true
3
- */
4
- function hasNullableSchema(items) {
5
- return items.some((item) => typeof item === 'object' && item !== null && 'nullable' in item && item.nullable === true);
6
- }
7
- /**
8
- * Removes the nullable property from a schema object
9
- */
10
- function removeNullableProperty(item) {
11
- if (typeof item !== 'object' || item === null) {
12
- return item;
13
- }
14
- const { ...rest } = item;
15
- delete rest.nullable;
16
- return rest;
17
- }
18
- /**
19
- * Transforms an anyOf array that contains nullable schemas to include explicit null type
20
- */
21
- function transformAnyOfWithNullable(items) {
22
- const transformed = items.map(removeNullableProperty).filter((item) => {
23
- if (typeof item !== 'object' || item === null) {
24
- return true;
25
- }
26
- return Object.keys(item).length > 0;
27
- });
28
- transformed.push({ type: 'null' });
29
- return transformed;
30
- }
31
- /**
32
- * Transforms a single key-value pair in a schema object
33
- */
34
- function transformSchemaProperty(key, value) {
35
- if (key === 'anyOf' && Array.isArray(value)) {
36
- if (hasNullableSchema(value)) {
37
- return transformAnyOfWithNullable(value).map(transformNullable);
38
- }
39
- return transformNullable(value);
40
- }
41
- if (key === 'allOf' || key === 'oneOf' || key === 'properties' || key === 'items') {
42
- return transformNullable(value);
43
- }
44
- return transformNullable(value);
45
- }
46
- /**
47
- * Transforms OpenAPI 3.0-style nullable syntax to OpenAPI 3.1.0-compatible format
48
- *
49
- * Converts patterns like:
50
- * {"anyOf": [{"type": "string", "nullable": true}]}
51
- * To:
52
- * {"anyOf": [{"type": "string"}, {"type": "null"}]}
53
- *
54
- * @param schema - OpenAPI schema to transform
55
- * @returns Transformed schema with OpenAPI 3.1.0-compatible nullable syntax
56
- */
57
- function transformNullable(schema) {
58
- if (schema === null || schema === undefined || typeof schema !== 'object') {
59
- return schema;
60
- }
61
- if (Array.isArray(schema)) {
62
- return schema.map(transformNullable);
63
- }
64
- const obj = schema;
65
- const result = {};
66
- for (const [key, value] of Object.entries(obj)) {
67
- if (key === 'nullable' && value === true) {
68
- continue;
69
- }
70
- result[key] = transformSchemaProperty(key, value);
71
- }
72
- return result;
73
- }
74
- /**
75
- * Transforms an OpenAPI document to ensure OpenAPI 3.1.0 compatibility
76
- *
77
- * This function:
78
- * - Converts OpenAPI 3.0-style nullable syntax to OpenAPI 3.1.0 format
79
- * - Recursively processes all schemas in components, paths, and responses
80
- *
81
- * @param doc - OpenAPI document to transform
82
- * @returns Transformed OpenAPI document
83
- */
84
- export function transformOpenAPIDocument(doc) {
85
- return transformNullable(doc);
86
- }
87
- //# sourceMappingURL=openapi-transformer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openapi-transformer.js","sourceRoot":"","sources":["../../src/openapi/openapi-transformer.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,SAAS,iBAAiB,CAAC,KAAgB;IACzC,OAAO,KAAK,CAAC,IAAI,CACf,CAAC,IAAI,EAAE,EAAE,CACP,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAC5F,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAAC,IAAa;IAC3C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,IAA+B,CAAC;IACpD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACrB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,0BAA0B,CAAC,KAAgB;IAClD,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACpE,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IACH,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACnC,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAAC,GAAW,EAAE,KAAc;IAC1D,IAAI,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5C,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,0BAA0B,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IACD,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,YAAY,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QAClF,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,iBAAiB,CAAC,MAAe;IACxC,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1E,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACvC,CAAC;IACD,MAAM,GAAG,GAAG,MAAiC,CAAC;IAC9C,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,GAAG,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACzC,SAAS;QACX,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,GAAG,uBAAuB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,wBAAwB,CAAC,GAAyB;IAChE,OAAO,iBAAiB,CAAC,GAAG,CAAyB,CAAC;AACxD,CAAC"}
@@ -1,48 +0,0 @@
1
- import type { Context } from 'hono';
2
- /**
3
- * Pagination input parameters
4
- */
5
- export interface PaginationInput {
6
- page: number;
7
- limit: number;
8
- }
9
- /**
10
- * Paginated output structure
11
- */
12
- export interface PaginatedOutput<T> {
13
- data: T[];
14
- total: number;
15
- page: number;
16
- limit: number;
17
- }
18
- /**
19
- * Execute a paginated query and set response headers.
20
- *
21
- * This helper extracts pagination parameters from the query string,
22
- * executes the provided function, and sets the appropriate response headers.
23
- *
24
- * @template T - The type of items in the result
25
- * @param c - Hono context
26
- * @param fn - Function that executes the paginated query
27
- * @returns Array of items (headers are set as side effect)
28
- *
29
- * @example
30
- * ```typescript
31
- * router.get('/users', route({
32
- * paginate: true,
33
- * handler: async ({ context }) => {
34
- * return await paginate(context, (p) => userService.getUsers(p));
35
- * }
36
- * }));
37
- * ```
38
- */
39
- export declare function paginate<T>(c: Context, fn: (p: PaginationInput) => Promise<PaginatedOutput<T>>): Promise<T[]>;
40
- /**
41
- * Extract pagination parameters from Hono context.
42
- *
43
- * @param c - Hono context
44
- * @param defaultLimit - Default limit if not provided (default: 100)
45
- * @returns Pagination input with page and limit
46
- */
47
- export declare function paginationInput(c: Context, defaultLimit?: number): PaginationInput;
48
- //# sourceMappingURL=pagination.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/utils/pagination.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEpC;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,CAAC,EAAE,OAAO,EACV,EAAE,EAAE,CAAC,CAAC,EAAE,eAAe,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GACtD,OAAO,CAAC,CAAC,EAAE,CAAC,CASd;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,SAAM,GAAG,eAAe,CAI/E"}
@@ -1,42 +0,0 @@
1
- /**
2
- * Execute a paginated query and set response headers.
3
- *
4
- * This helper extracts pagination parameters from the query string,
5
- * executes the provided function, and sets the appropriate response headers.
6
- *
7
- * @template T - The type of items in the result
8
- * @param c - Hono context
9
- * @param fn - Function that executes the paginated query
10
- * @returns Array of items (headers are set as side effect)
11
- *
12
- * @example
13
- * ```typescript
14
- * router.get('/users', route({
15
- * paginate: true,
16
- * handler: async ({ context }) => {
17
- * return await paginate(context, (p) => userService.getUsers(p));
18
- * }
19
- * }));
20
- * ```
21
- */
22
- export async function paginate(c, fn) {
23
- const pagination = paginationInput(c);
24
- const result = await fn(pagination);
25
- c.header('X-Total-Count', result.total.toString());
26
- c.header('X-Page', result.page.toString());
27
- c.header('X-Limit', result.limit.toString());
28
- return result.data;
29
- }
30
- /**
31
- * Extract pagination parameters from Hono context.
32
- *
33
- * @param c - Hono context
34
- * @param defaultLimit - Default limit if not provided (default: 100)
35
- * @returns Pagination input with page and limit
36
- */
37
- export function paginationInput(c, defaultLimit = 100) {
38
- const page = Number.parseInt(c.req.query('page') ?? '1', 10);
39
- const limit = Number.parseInt(c.req.query('limit') ?? defaultLimit.toString(), 10);
40
- return { page, limit };
41
- }
42
- //# sourceMappingURL=pagination.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/utils/pagination.ts"],"names":[],"mappings":"AAoBA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,CAAU,EACV,EAAuD;IAEvD,MAAM,UAAU,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,CAAC;IAEpC,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE7C,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,CAAU,EAAE,YAAY,GAAG,GAAG;IAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IACnF,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACzB,CAAC"}
@@ -1,27 +0,0 @@
1
- /**
2
- * Type helper to recursively convert Date fields to string in an object type
3
- */
4
- export type SerializedDates<T> = T extends Date ? string : T extends Array<infer U> ? Array<SerializedDates<U>> : T extends object ? {
5
- [K in keyof T]: SerializedDates<T[K]>;
6
- } : T;
7
- /**
8
- * Recursively converts all Date objects to ISO 8601 strings in an entity or array of entities.
9
- *
10
- * This utility handles the mismatch between Prisma's Date types and API response DTOs
11
- * that expect string timestamps. It preserves null values and handles nested objects and arrays.
12
- *
13
- * @template T - The type of data to transform
14
- * @param data - The data to transform (object, array, or primitive)
15
- * @returns The same structure with all Date objects converted to ISO strings
16
- *
17
- * @example
18
- * ```typescript
19
- * const ranger = await prisma.ranger.findUnique({
20
- * where: { id },
21
- * include: { category: true }
22
- * });
23
- * return serializeDates(ranger); // All Date fields → ISO strings
24
- * ```
25
- */
26
- export declare function serializeDates<T>(data: T): SerializedDates<T>;
27
- //# sourceMappingURL=serialize-dates.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serialize-dates.d.ts","sourceRoot":"","sources":["../../src/utils/serialize-dates.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,GAC3C,MAAM,GACN,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,GACtB,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GACzB,CAAC,SAAS,MAAM,GACd;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GACzC,CAAC,CAAC;AAEV;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAsB7D"}
@@ -1,39 +0,0 @@
1
- /**
2
- * Recursively converts all Date objects to ISO 8601 strings in an entity or array of entities.
3
- *
4
- * This utility handles the mismatch between Prisma's Date types and API response DTOs
5
- * that expect string timestamps. It preserves null values and handles nested objects and arrays.
6
- *
7
- * @template T - The type of data to transform
8
- * @param data - The data to transform (object, array, or primitive)
9
- * @returns The same structure with all Date objects converted to ISO strings
10
- *
11
- * @example
12
- * ```typescript
13
- * const ranger = await prisma.ranger.findUnique({
14
- * where: { id },
15
- * include: { category: true }
16
- * });
17
- * return serializeDates(ranger); // All Date fields → ISO strings
18
- * ```
19
- */
20
- export function serializeDates(data) {
21
- if (data === null || data === undefined) {
22
- return data;
23
- }
24
- if (data instanceof Date) {
25
- return data.toISOString();
26
- }
27
- if (Array.isArray(data)) {
28
- return data.map((item) => serializeDates(item));
29
- }
30
- if (typeof data === 'object') {
31
- const result = {};
32
- for (const [key, value] of Object.entries(data)) {
33
- result[key] = serializeDates(value);
34
- }
35
- return result;
36
- }
37
- return data;
38
- }
39
- //# sourceMappingURL=serialize-dates.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serialize-dates.js","sourceRoot":"","sources":["../../src/utils/serialize-dates.ts"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,cAAc,CAAI,IAAO;IACvC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACxC,OAAO,IAA0B,CAAC;IACpC,CAAC;IAED,IAAI,IAAI,YAAY,IAAI,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,WAAW,EAAwB,CAAC;IAClD,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAuB,CAAC;IACxE,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,MAA4B,CAAC;IACtC,CAAC;IAED,OAAO,IAA0B,CAAC;AACpC,CAAC"}