glasswork 0.1.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 (155) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +182 -0
  3. package/dist/bootstrap.d.ts +55 -0
  4. package/dist/bootstrap.d.ts.map +1 -0
  5. package/dist/bootstrap.js +359 -0
  6. package/dist/bootstrap.js.map +1 -0
  7. package/dist/core/bootstrap.d.ts +55 -0
  8. package/dist/core/bootstrap.d.ts.map +1 -0
  9. package/dist/core/bootstrap.js +329 -0
  10. package/dist/core/bootstrap.js.map +1 -0
  11. package/dist/core/module.d.ts +21 -0
  12. package/dist/core/module.d.ts.map +1 -0
  13. package/dist/core/module.js +85 -0
  14. package/dist/core/module.js.map +1 -0
  15. package/dist/core/types.d.ts +273 -0
  16. package/dist/core/types.d.ts.map +1 -0
  17. package/dist/core/types.js +2 -0
  18. package/dist/core/types.js.map +1 -0
  19. package/dist/environment.d.ts +21 -0
  20. package/dist/environment.d.ts.map +1 -0
  21. package/dist/environment.js +29 -0
  22. package/dist/environment.js.map +1 -0
  23. package/dist/error-handler.d.ts +33 -0
  24. package/dist/error-handler.d.ts.map +1 -0
  25. package/dist/error-handler.js +53 -0
  26. package/dist/error-handler.js.map +1 -0
  27. package/dist/errors.d.ts +36 -0
  28. package/dist/errors.d.ts.map +1 -0
  29. package/dist/errors.js +65 -0
  30. package/dist/errors.js.map +1 -0
  31. package/dist/get-client-ip.d.ts +24 -0
  32. package/dist/get-client-ip.d.ts.map +1 -0
  33. package/dist/get-client-ip.js +49 -0
  34. package/dist/get-client-ip.js.map +1 -0
  35. package/dist/http/error-handler.d.ts +33 -0
  36. package/dist/http/error-handler.d.ts.map +1 -0
  37. package/dist/http/error-handler.js +55 -0
  38. package/dist/http/error-handler.js.map +1 -0
  39. package/dist/http/errors.d.ts +36 -0
  40. package/dist/http/errors.d.ts.map +1 -0
  41. package/dist/http/errors.js +65 -0
  42. package/dist/http/errors.js.map +1 -0
  43. package/dist/http/route-helpers.d.ts +172 -0
  44. package/dist/http/route-helpers.d.ts.map +1 -0
  45. package/dist/http/route-helpers.js +249 -0
  46. package/dist/http/route-helpers.js.map +1 -0
  47. package/dist/index.d.ts +33 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +29 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/logger.d.ts +37 -0
  52. package/dist/logger.d.ts.map +1 -0
  53. package/dist/logger.js +52 -0
  54. package/dist/logger.js.map +1 -0
  55. package/dist/middleware/rate-limit.d.ts +7 -0
  56. package/dist/middleware/rate-limit.d.ts.map +1 -0
  57. package/dist/middleware/rate-limit.js +182 -0
  58. package/dist/middleware/rate-limit.js.map +1 -0
  59. package/dist/module.d.ts +21 -0
  60. package/dist/module.d.ts.map +1 -0
  61. package/dist/module.js +85 -0
  62. package/dist/module.js.map +1 -0
  63. package/dist/omit.d.ts +20 -0
  64. package/dist/omit.d.ts.map +1 -0
  65. package/dist/omit.js +28 -0
  66. package/dist/omit.js.map +1 -0
  67. package/dist/openapi/defaults.d.ts +11 -0
  68. package/dist/openapi/defaults.d.ts.map +1 -0
  69. package/dist/openapi/defaults.js +127 -0
  70. package/dist/openapi/defaults.js.map +1 -0
  71. package/dist/openapi/hooks.d.ts +14 -0
  72. package/dist/openapi/hooks.d.ts.map +1 -0
  73. package/dist/openapi/hooks.js +80 -0
  74. package/dist/openapi/hooks.js.map +1 -0
  75. package/dist/openapi/openapi.d.ts +24 -0
  76. package/dist/openapi/openapi.d.ts.map +1 -0
  77. package/dist/openapi/openapi.js +108 -0
  78. package/dist/openapi/openapi.js.map +1 -0
  79. package/dist/openapi-defaults.d.ts +11 -0
  80. package/dist/openapi-defaults.d.ts.map +1 -0
  81. package/dist/openapi-defaults.js +127 -0
  82. package/dist/openapi-defaults.js.map +1 -0
  83. package/dist/openapi-hooks.d.ts +14 -0
  84. package/dist/openapi-hooks.d.ts.map +1 -0
  85. package/dist/openapi-hooks.js +80 -0
  86. package/dist/openapi-hooks.js.map +1 -0
  87. package/dist/openapi.d.ts +24 -0
  88. package/dist/openapi.d.ts.map +1 -0
  89. package/dist/openapi.js +106 -0
  90. package/dist/openapi.js.map +1 -0
  91. package/dist/pagination.d.ts +48 -0
  92. package/dist/pagination.d.ts.map +1 -0
  93. package/dist/pagination.js +43 -0
  94. package/dist/pagination.js.map +1 -0
  95. package/dist/pick.d.ts +20 -0
  96. package/dist/pick.d.ts.map +1 -0
  97. package/dist/pick.js +28 -0
  98. package/dist/pick.js.map +1 -0
  99. package/dist/rate-limit.d.ts +7 -0
  100. package/dist/rate-limit.d.ts.map +1 -0
  101. package/dist/rate-limit.js +180 -0
  102. package/dist/rate-limit.js.map +1 -0
  103. package/dist/route-helpers.d.ts +172 -0
  104. package/dist/route-helpers.d.ts.map +1 -0
  105. package/dist/route-helpers.js +249 -0
  106. package/dist/route-helpers.js.map +1 -0
  107. package/dist/serialize-dates.d.ts +27 -0
  108. package/dist/serialize-dates.d.ts.map +1 -0
  109. package/dist/serialize-dates.js +39 -0
  110. package/dist/serialize-dates.js.map +1 -0
  111. package/dist/testing.d.ts +87 -0
  112. package/dist/testing.d.ts.map +1 -0
  113. package/dist/testing.js +94 -0
  114. package/dist/testing.js.map +1 -0
  115. package/dist/types.d.ts +273 -0
  116. package/dist/types.d.ts.map +1 -0
  117. package/dist/types.js +2 -0
  118. package/dist/types.js.map +1 -0
  119. package/dist/utils/deep-merge.d.ts +5 -0
  120. package/dist/utils/deep-merge.d.ts.map +1 -0
  121. package/dist/utils/deep-merge.js +21 -0
  122. package/dist/utils/deep-merge.js.map +1 -0
  123. package/dist/utils/environment.d.ts +21 -0
  124. package/dist/utils/environment.d.ts.map +1 -0
  125. package/dist/utils/environment.js +29 -0
  126. package/dist/utils/environment.js.map +1 -0
  127. package/dist/utils/get-client-ip.d.ts +24 -0
  128. package/dist/utils/get-client-ip.d.ts.map +1 -0
  129. package/dist/utils/get-client-ip.js +49 -0
  130. package/dist/utils/get-client-ip.js.map +1 -0
  131. package/dist/utils/logger.d.ts +37 -0
  132. package/dist/utils/logger.d.ts.map +1 -0
  133. package/dist/utils/logger.js +52 -0
  134. package/dist/utils/logger.js.map +1 -0
  135. package/dist/utils/omit.d.ts +20 -0
  136. package/dist/utils/omit.d.ts.map +1 -0
  137. package/dist/utils/omit.js +28 -0
  138. package/dist/utils/omit.js.map +1 -0
  139. package/dist/utils/pagination.d.ts +48 -0
  140. package/dist/utils/pagination.d.ts.map +1 -0
  141. package/dist/utils/pagination.js +42 -0
  142. package/dist/utils/pagination.js.map +1 -0
  143. package/dist/utils/pick.d.ts +20 -0
  144. package/dist/utils/pick.d.ts.map +1 -0
  145. package/dist/utils/pick.js +28 -0
  146. package/dist/utils/pick.js.map +1 -0
  147. package/dist/utils/serialize-dates.d.ts +27 -0
  148. package/dist/utils/serialize-dates.d.ts.map +1 -0
  149. package/dist/utils/serialize-dates.js +39 -0
  150. package/dist/utils/serialize-dates.js.map +1 -0
  151. package/dist/utils.d.ts +9 -0
  152. package/dist/utils.d.ts.map +1 -0
  153. package/dist/utils.js +31 -0
  154. package/dist/utils.js.map +1 -0
  155. package/package.json +79 -0
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,42 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Creates a new object by picking specified keys from the source object.
3
+ *
4
+ * This implementation preserves the object's prototype, making it suitable
5
+ * for use with class instances and objects with custom prototypes.
6
+ *
7
+ * @template T - The type of the source object
8
+ * @template K - The type of keys to pick (must be keys of T)
9
+ * @param obj - The source object to pick keys from
10
+ * @param paths - Array of keys to pick from the object
11
+ * @returns A new object containing only the specified keys
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * const user = { id: 1, name: 'John', email: 'john@example.com', password: 'secret' };
16
+ * const publicUser = pick(user, ['id', 'name']); // { id: 1, name: 'John' }
17
+ * ```
18
+ */
19
+ export declare function pick<T extends object, K extends keyof T>(obj: T, paths: K[]): Pick<T, K>;
20
+ //# sourceMappingURL=pick.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pick.d.ts","sourceRoot":"","sources":["../../src/utils/pick.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAUxF"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Creates a new object by picking specified keys from the source object.
3
+ *
4
+ * This implementation preserves the object's prototype, making it suitable
5
+ * for use with class instances and objects with custom prototypes.
6
+ *
7
+ * @template T - The type of the source object
8
+ * @template K - The type of keys to pick (must be keys of T)
9
+ * @param obj - The source object to pick keys from
10
+ * @param paths - Array of keys to pick from the object
11
+ * @returns A new object containing only the specified keys
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * const user = { id: 1, name: 'John', email: 'john@example.com', password: 'secret' };
16
+ * const publicUser = pick(user, ['id', 'name']); // { id: 1, name: 'John' }
17
+ * ```
18
+ */
19
+ export function pick(obj, paths) {
20
+ const result = Object.create(Object.getPrototypeOf(obj));
21
+ for (const key of paths) {
22
+ if (Object.hasOwn(obj, key)) {
23
+ result[key] = obj[key];
24
+ }
25
+ }
26
+ return result;
27
+ }
28
+ //# sourceMappingURL=pick.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pick.js","sourceRoot":"","sources":["../../src/utils/pick.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,IAAI,CAAsC,GAAM,EAAE,KAAU;IAC1E,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAe,CAAC;IAEvE,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,27 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,39 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Deep merge objects (simple implementation for small objects)
3
+ */
4
+ export declare function deepMerge<T extends Record<string, unknown>>(...objects: (T | Record<string, unknown>)[]): T;
5
+ /**
6
+ * Omit keys from an object
7
+ */
8
+ export declare function omit<T extends Record<string, unknown>, K extends keyof T>(obj: T, keys: K[]): Omit<T, K>;
9
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzD,GAAG,OAAO,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,GAC1C,CAAC,CAqBH;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,EACvE,GAAG,EAAE,CAAC,EACN,IAAI,EAAE,CAAC,EAAE,GACR,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAMZ"}
package/dist/utils.js ADDED
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Deep merge objects (simple implementation for small objects)
3
+ */
4
+ export function deepMerge(...objects) {
5
+ const result = {};
6
+ for (const obj of objects) {
7
+ for (const key in obj) {
8
+ if (Object.hasOwn(obj, key)) {
9
+ const value = obj[key];
10
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
11
+ result[key] = deepMerge(result[key] || {}, value);
12
+ }
13
+ else {
14
+ result[key] = value;
15
+ }
16
+ }
17
+ }
18
+ }
19
+ return result;
20
+ }
21
+ /**
22
+ * Omit keys from an object
23
+ */
24
+ export function omit(obj, keys) {
25
+ const result = { ...obj };
26
+ for (const key of keys) {
27
+ delete result[key];
28
+ }
29
+ return result;
30
+ }
31
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,SAAS,CACvB,GAAG,OAAwC;IAE3C,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;YACtB,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;gBAC5B,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;gBAEvB,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBAChE,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CACpB,MAAM,CAAC,GAAG,CAA6B,IAAI,EAAE,EAC9C,KAAgC,CACjC,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,IAAI,CAClB,GAAM,EACN,IAAS;IAET,MAAM,MAAM,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;IAC1B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,79 @@
1
+ {
2
+ "name": "glasswork",
3
+ "version": "0.1.0",
4
+ "description": "A transparent, Lambda-optimized web framework for building OpenAPI-compliant REST APIs.",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "type": "module",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ },
13
+ "./package.json": "./package.json"
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "README.md",
18
+ "LICENSE"
19
+ ],
20
+ "sideEffects": false,
21
+ "engines": {
22
+ "node": ">=18.0.0"
23
+ },
24
+ "keywords": [
25
+ "framework",
26
+ "hono",
27
+ "lambda",
28
+ "serverless",
29
+ "typescript",
30
+ "dependency-injection",
31
+ "awilix",
32
+ "openapi",
33
+ "rest-api",
34
+ "aws-lambda",
35
+ "valibot"
36
+ ],
37
+ "author": "Roland Boon",
38
+ "license": "MIT",
39
+ "repository": {
40
+ "type": "git",
41
+ "url": "git+https://github.com/rolandboon/glasswork.git"
42
+ },
43
+ "bugs": {
44
+ "url": "https://github.com/rolandboon/glasswork/issues"
45
+ },
46
+ "homepage": "https://github.com/rolandboon/glasswork#readme",
47
+ "scripts": {
48
+ "build": "tsc",
49
+ "dev": "tsc --watch",
50
+ "test": "vitest",
51
+ "test:coverage": "vitest --coverage",
52
+ "prepublishOnly": "npm run build && npm test"
53
+ },
54
+ "publishConfig": {
55
+ "access": "public"
56
+ },
57
+ "peerDependencies": {
58
+ "@aws-sdk/client-dynamodb": "^3.902.0",
59
+ "@aws-sdk/lib-dynamodb": "^3.902.0",
60
+ "@hono/swagger-ui": "^0.5.0",
61
+ "awilix": "^12.0.0",
62
+ "hono": "^4.9.0",
63
+ "hono-openapi": "^0.4.0",
64
+ "valibot": "^1.0.0"
65
+ },
66
+ "devDependencies": {
67
+ "@biomejs/biome": "^2.2.5",
68
+ "@types/node": "^22.18.8",
69
+ "@vitest/coverage-v8": "^3.2.4",
70
+ "typescript": "^5.9.3",
71
+ "vitest": "^3.2.4"
72
+ },
73
+ "dependencies": {
74
+ "@hono/valibot-validator": "^0.5.3",
75
+ "@valibot/to-json-schema": "^1.3.0",
76
+ "deepmerge": "^4.3.1",
77
+ "openapi-types": "^12.1.3"
78
+ }
79
+ }