glasswork 0.1.1 → 0.2.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 (155) hide show
  1. package/dist/authorization/ability-middleware.d.ts +61 -0
  2. package/dist/authorization/ability-middleware.d.ts.map +1 -0
  3. package/dist/authorization/ability-middleware.js +74 -0
  4. package/dist/authorization/ability-middleware.js.map +1 -0
  5. package/dist/authorization/index.d.ts +46 -0
  6. package/dist/authorization/index.d.ts.map +1 -0
  7. package/dist/authorization/index.js +46 -0
  8. package/dist/authorization/index.js.map +1 -0
  9. package/dist/authorization/route-helpers.d.ts +106 -0
  10. package/dist/authorization/route-helpers.d.ts.map +1 -0
  11. package/dist/authorization/route-helpers.js +136 -0
  12. package/dist/authorization/route-helpers.js.map +1 -0
  13. package/dist/authorization/service-proxy.d.ts +59 -0
  14. package/dist/authorization/service-proxy.d.ts.map +1 -0
  15. package/dist/authorization/service-proxy.js +110 -0
  16. package/dist/authorization/service-proxy.js.map +1 -0
  17. package/dist/authorization/types.d.ts +58 -0
  18. package/dist/authorization/types.d.ts.map +1 -0
  19. package/dist/authorization/types.js +7 -0
  20. package/dist/authorization/types.js.map +1 -0
  21. package/dist/config/config-service.d.ts +101 -0
  22. package/dist/config/config-service.d.ts.map +1 -0
  23. package/dist/config/config-service.js +164 -0
  24. package/dist/config/config-service.js.map +1 -0
  25. package/dist/config/helpers.d.ts +101 -0
  26. package/dist/config/helpers.d.ts.map +1 -0
  27. package/dist/config/helpers.js +122 -0
  28. package/dist/config/helpers.js.map +1 -0
  29. package/dist/config/index.d.ts +39 -0
  30. package/dist/config/index.d.ts.map +1 -0
  31. package/dist/config/index.js +41 -0
  32. package/dist/config/index.js.map +1 -0
  33. package/dist/config/providers.d.ts +163 -0
  34. package/dist/config/providers.d.ts.map +1 -0
  35. package/dist/config/providers.js +188 -0
  36. package/dist/config/providers.js.map +1 -0
  37. package/dist/config/types.d.ts +98 -0
  38. package/dist/config/types.d.ts.map +1 -0
  39. package/dist/config/types.js +7 -0
  40. package/dist/config/types.js.map +1 -0
  41. package/dist/core/bootstrap.js +9 -3
  42. package/dist/core/bootstrap.js.map +1 -1
  43. package/dist/core/types.d.ts +2 -1
  44. package/dist/core/types.d.ts.map +1 -1
  45. package/dist/hooks/authorization-hook.d.ts +100 -0
  46. package/dist/hooks/authorization-hook.d.ts.map +1 -0
  47. package/dist/hooks/authorization-hook.js +93 -0
  48. package/dist/hooks/authorization-hook.js.map +1 -0
  49. package/dist/hooks/index.d.ts +54 -0
  50. package/dist/hooks/index.d.ts.map +1 -0
  51. package/dist/hooks/index.js +55 -0
  52. package/dist/hooks/index.js.map +1 -0
  53. package/dist/hooks/service-hooks.d.ts +82 -0
  54. package/dist/hooks/service-hooks.d.ts.map +1 -0
  55. package/dist/hooks/service-hooks.js +158 -0
  56. package/dist/hooks/service-hooks.js.map +1 -0
  57. package/dist/hooks/types.d.ts +151 -0
  58. package/dist/hooks/types.d.ts.map +1 -0
  59. package/dist/hooks/types.js.map +1 -0
  60. package/dist/http/errors.d.ts +39 -0
  61. package/dist/http/errors.d.ts.map +1 -1
  62. package/dist/http/errors.js +78 -0
  63. package/dist/http/errors.js.map +1 -1
  64. package/dist/http/route-helpers.d.ts +39 -13
  65. package/dist/http/route-helpers.d.ts.map +1 -1
  66. package/dist/http/route-helpers.js +45 -2
  67. package/dist/http/route-helpers.js.map +1 -1
  68. package/dist/index.d.ts +5 -3
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +9 -5
  71. package/dist/index.js.map +1 -1
  72. package/dist/middleware/rate-limit.d.ts.map +1 -1
  73. package/dist/middleware/rate-limit.js +2 -16
  74. package/dist/middleware/rate-limit.js.map +1 -1
  75. package/dist/openapi/openapi.d.ts +1 -1
  76. package/dist/openapi/openapi.d.ts.map +1 -1
  77. package/dist/openapi/openapi.js +21 -3
  78. package/dist/openapi/openapi.js.map +1 -1
  79. package/package.json +22 -1
  80. package/dist/bootstrap.d.ts +0 -55
  81. package/dist/bootstrap.d.ts.map +0 -1
  82. package/dist/bootstrap.js +0 -359
  83. package/dist/bootstrap.js.map +0 -1
  84. package/dist/environment.d.ts +0 -21
  85. package/dist/environment.d.ts.map +0 -1
  86. package/dist/environment.js +0 -29
  87. package/dist/environment.js.map +0 -1
  88. package/dist/error-handler.d.ts +0 -33
  89. package/dist/error-handler.d.ts.map +0 -1
  90. package/dist/error-handler.js +0 -53
  91. package/dist/error-handler.js.map +0 -1
  92. package/dist/errors.d.ts +0 -36
  93. package/dist/errors.d.ts.map +0 -1
  94. package/dist/errors.js +0 -65
  95. package/dist/errors.js.map +0 -1
  96. package/dist/get-client-ip.d.ts +0 -24
  97. package/dist/get-client-ip.d.ts.map +0 -1
  98. package/dist/get-client-ip.js +0 -49
  99. package/dist/get-client-ip.js.map +0 -1
  100. package/dist/logger.d.ts +0 -37
  101. package/dist/logger.d.ts.map +0 -1
  102. package/dist/logger.js +0 -52
  103. package/dist/logger.js.map +0 -1
  104. package/dist/module.d.ts +0 -21
  105. package/dist/module.d.ts.map +0 -1
  106. package/dist/module.js +0 -85
  107. package/dist/module.js.map +0 -1
  108. package/dist/omit.d.ts +0 -20
  109. package/dist/omit.d.ts.map +0 -1
  110. package/dist/omit.js +0 -28
  111. package/dist/omit.js.map +0 -1
  112. package/dist/openapi-defaults.d.ts +0 -11
  113. package/dist/openapi-defaults.d.ts.map +0 -1
  114. package/dist/openapi-defaults.js +0 -127
  115. package/dist/openapi-defaults.js.map +0 -1
  116. package/dist/openapi-hooks.d.ts +0 -14
  117. package/dist/openapi-hooks.d.ts.map +0 -1
  118. package/dist/openapi-hooks.js +0 -80
  119. package/dist/openapi-hooks.js.map +0 -1
  120. package/dist/openapi.d.ts +0 -24
  121. package/dist/openapi.d.ts.map +0 -1
  122. package/dist/openapi.js +0 -106
  123. package/dist/openapi.js.map +0 -1
  124. package/dist/pagination.d.ts +0 -48
  125. package/dist/pagination.d.ts.map +0 -1
  126. package/dist/pagination.js +0 -43
  127. package/dist/pagination.js.map +0 -1
  128. package/dist/pick.d.ts +0 -20
  129. package/dist/pick.d.ts.map +0 -1
  130. package/dist/pick.js +0 -28
  131. package/dist/pick.js.map +0 -1
  132. package/dist/rate-limit.d.ts +0 -7
  133. package/dist/rate-limit.d.ts.map +0 -1
  134. package/dist/rate-limit.js +0 -180
  135. package/dist/rate-limit.js.map +0 -1
  136. package/dist/route-helpers.d.ts +0 -172
  137. package/dist/route-helpers.d.ts.map +0 -1
  138. package/dist/route-helpers.js +0 -249
  139. package/dist/route-helpers.js.map +0 -1
  140. package/dist/serialize-dates.d.ts +0 -27
  141. package/dist/serialize-dates.d.ts.map +0 -1
  142. package/dist/serialize-dates.js +0 -39
  143. package/dist/serialize-dates.js.map +0 -1
  144. package/dist/testing.d.ts +0 -87
  145. package/dist/testing.d.ts.map +0 -1
  146. package/dist/testing.js +0 -94
  147. package/dist/testing.js.map +0 -1
  148. package/dist/types.d.ts +0 -273
  149. package/dist/types.d.ts.map +0 -1
  150. package/dist/types.js.map +0 -1
  151. package/dist/utils.d.ts +0 -9
  152. package/dist/utils.d.ts.map +0 -1
  153. package/dist/utils.js +0 -31
  154. package/dist/utils.js.map +0 -1
  155. /package/dist/{types.js → hooks/types.js} +0 -0
@@ -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/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"}
package/dist/testing.d.ts DELETED
@@ -1,87 +0,0 @@
1
- import type { AwilixContainer } from 'awilix';
2
- import { Hono } from 'hono';
3
- import type { ModuleConfig } from './types.js';
4
- /**
5
- * Options for creating a test app
6
- */
7
- export interface CreateTestAppOptions {
8
- /**
9
- * API base path
10
- * @default '/api'
11
- */
12
- apiBasePath?: string;
13
- /**
14
- * Service mocks to override module providers
15
- * These will be registered as values in the container, overriding any class/factory providers
16
- */
17
- services?: Record<string, unknown>;
18
- /**
19
- * Error handler
20
- * @default defaultErrorHandler
21
- * Set to false to disable error handling
22
- */
23
- errorHandler?: false | import('hono').ErrorHandler;
24
- /**
25
- * Enable debug logging
26
- * @default false
27
- */
28
- debug?: boolean;
29
- }
30
- /**
31
- * Test context returned by createTestApp
32
- */
33
- export interface TestContext {
34
- /**
35
- * Hono app instance with mounted routes
36
- */
37
- app: Hono;
38
- /**
39
- * Awilix container with all services
40
- */
41
- container: AwilixContainer;
42
- }
43
- /**
44
- * Create a test app for testing a specific module.
45
- *
46
- * This function:
47
- * 1. Creates an Awilix container
48
- * 2. Registers all module providers (from the module and its imports)
49
- * 3. Overrides providers with mock services
50
- * 4. Creates a Hono app with error handler
51
- * 5. Mounts the module's routes
52
- *
53
- * @example
54
- * ```typescript
55
- * const mockEmailService = {
56
- * sendEmail: vi.fn(),
57
- * };
58
- *
59
- * const { app, container } = createTestApp(AuthModule, {
60
- * services: {
61
- * emailService: mockEmailService,
62
- * prismaService: testDb,
63
- * },
64
- * });
65
- *
66
- * // Test routes
67
- * const res = await app.request('/api/auth/session', { method: 'POST', ... });
68
- * ```
69
- */
70
- export declare function createTestApp(module: ModuleConfig, options?: CreateTestAppOptions): TestContext;
71
- /**
72
- * Create a test container with specific services.
73
- *
74
- * Useful for testing services in isolation without creating a full app.
75
- *
76
- * @example
77
- * ```typescript
78
- * const container = createTestContainer({
79
- * prismaService: testDb,
80
- * hashService: new HashService(),
81
- * });
82
- *
83
- * const authService = new AuthService(container.cradle);
84
- * ```
85
- */
86
- export declare function createTestContainer(services: Record<string, unknown>): AwilixContainer;
87
- //# sourceMappingURL=testing.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnC;;;;OAIG;IACH,YAAY,CAAC,EAAE,KAAK,GAAG,OAAO,MAAM,EAAE,YAAY,CAAC;IAEnD;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,GAAG,EAAE,IAAI,CAAC;IAEV;;OAEG;IACH,SAAS,EAAE,eAAe,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE,oBAAyB,GACjC,WAAW,CA+Cb;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe,CAatF"}
package/dist/testing.js DELETED
@@ -1,94 +0,0 @@
1
- import { asValue, createContainer, InjectionMode } from 'awilix';
2
- import { Hono } from 'hono';
3
- import { collectModules, registerModuleProviders, validateNoCycles } from './bootstrap.js';
4
- import { defaultErrorHandler } from './error-handler.js';
5
- /**
6
- * Create a test app for testing a specific module.
7
- *
8
- * This function:
9
- * 1. Creates an Awilix container
10
- * 2. Registers all module providers (from the module and its imports)
11
- * 3. Overrides providers with mock services
12
- * 4. Creates a Hono app with error handler
13
- * 5. Mounts the module's routes
14
- *
15
- * @example
16
- * ```typescript
17
- * const mockEmailService = {
18
- * sendEmail: vi.fn(),
19
- * };
20
- *
21
- * const { app, container } = createTestApp(AuthModule, {
22
- * services: {
23
- * emailService: mockEmailService,
24
- * prismaService: testDb,
25
- * },
26
- * });
27
- *
28
- * // Test routes
29
- * const res = await app.request('/api/auth/session', { method: 'POST', ... });
30
- * ```
31
- */
32
- export function createTestApp(module, options = {}) {
33
- const { apiBasePath = '/api', services = {}, errorHandler = defaultErrorHandler, debug = false, } = options;
34
- // Create Awilix container
35
- const container = createContainer({
36
- injectionMode: InjectionMode.PROXY,
37
- strict: true,
38
- });
39
- // Collect all modules (flatten imports)
40
- const allModules = collectModules(module);
41
- validateNoCycles(allModules);
42
- // Register all providers from the module and its imports
43
- for (const mod of allModules) {
44
- registerModuleProviders(mod, container, debug);
45
- }
46
- // Override with mock services AFTER module providers
47
- // This allows both overriding services and providing dependencies
48
- for (const [key, value] of Object.entries(services)) {
49
- container.register({
50
- [key]: asValue(value),
51
- });
52
- }
53
- // Create Hono app
54
- const app = new Hono();
55
- // Apply error handler
56
- if (errorHandler !== false) {
57
- app.onError(errorHandler);
58
- }
59
- // Mount module routes
60
- if (module.routes && module.basePath) {
61
- const router = new Hono();
62
- module.routes(router, container.cradle);
63
- app.route(`${apiBasePath}/${module.basePath}`, router);
64
- }
65
- return { app, container };
66
- }
67
- /**
68
- * Create a test container with specific services.
69
- *
70
- * Useful for testing services in isolation without creating a full app.
71
- *
72
- * @example
73
- * ```typescript
74
- * const container = createTestContainer({
75
- * prismaService: testDb,
76
- * hashService: new HashService(),
77
- * });
78
- *
79
- * const authService = new AuthService(container.cradle);
80
- * ```
81
- */
82
- export function createTestContainer(services) {
83
- const container = createContainer({
84
- injectionMode: InjectionMode.PROXY,
85
- strict: true,
86
- });
87
- for (const [key, value] of Object.entries(services)) {
88
- container.register({
89
- [key]: asValue(value),
90
- });
91
- }
92
- return container;
93
- }
94
- //# sourceMappingURL=testing.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC3F,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAgDzD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAoB,EACpB,UAAgC,EAAE;IAElC,MAAM,EACJ,WAAW,GAAG,MAAM,EACpB,QAAQ,GAAG,EAAE,EACb,YAAY,GAAG,mBAAmB,EAClC,KAAK,GAAG,KAAK,GACd,GAAG,OAAO,CAAC;IAEZ,0BAA0B;IAC1B,MAAM,SAAS,GAAG,eAAe,CAAC;QAChC,aAAa,EAAE,aAAa,CAAC,KAAK;QAClC,MAAM,EAAE,IAAI;KACb,CAAC,CAAC;IAEH,wCAAwC;IACxC,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAC1C,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAE7B,yDAAyD;IACzD,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,uBAAuB,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;IAED,qDAAqD;IACrD,kEAAkE;IAClE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,SAAS,CAAC,QAAQ,CAAC;YACjB,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC;SACtB,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB;IAClB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IAEvB,sBAAsB;IACtB,IAAI,YAAY,KAAK,KAAK,EAAE,CAAC;QAC3B,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC5B,CAAC;IAED,sBAAsB;IACtB,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QAC1B,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,MAAiC,CAAC,CAAC;QACnE,GAAG,CAAC,KAAK,CAAC,GAAG,WAAW,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;AAC5B,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAiC;IACnE,MAAM,SAAS,GAAG,eAAe,CAAC;QAChC,aAAa,EAAE,aAAa,CAAC,KAAK;QAClC,MAAM,EAAE,IAAI;KACb,CAAC,CAAC;IAEH,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,SAAS,CAAC,QAAQ,CAAC;YACjB,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC;SACtB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
package/dist/types.d.ts DELETED
@@ -1,273 +0,0 @@
1
- import type { AwilixContainer } from 'awilix';
2
- import type { ErrorHandler, Hono } from 'hono';
3
- /**
4
- * Service lifetime scope for dependency injection
5
- */
6
- export type ServiceScope = 'SINGLETON' | 'SCOPED' | 'TRANSIENT';
7
- /**
8
- * Constructor type for class providers
9
- *
10
- * We use `any[]` for constructor arguments because in dependency injection,
11
- * we can't know at compile time what arguments will be injected - that's
12
- * determined by the DI container at runtime. This is a legitimate use of `any`.
13
- */
14
- export type Constructor<T = unknown> = new (...args: any[]) => T;
15
- /**
16
- * Provider configuration for dependency injection
17
- */
18
- export type ProviderConfig = Constructor | {
19
- provide: string | Constructor;
20
- useClass: Constructor;
21
- scope?: ServiceScope;
22
- } | {
23
- provide: string;
24
- useValue: unknown;
25
- } | {
26
- provide: string;
27
- useFactory: (container: unknown) => unknown;
28
- inject?: string[];
29
- };
30
- /**
31
- * Route factory function that receives Hono router and services
32
- */
33
- export type RouteFactory = (router: Hono, services: Record<string, unknown>) => void;
34
- /**
35
- * Module configuration
36
- */
37
- export interface ModuleConfig {
38
- /**
39
- * Unique module name
40
- */
41
- name: string;
42
- /**
43
- * Base path for routes (e.g., 'auth' becomes /api/auth)
44
- */
45
- basePath?: string;
46
- /**
47
- * Service providers to register
48
- */
49
- providers?: ProviderConfig[];
50
- /**
51
- * Modules to import (access their exported providers)
52
- */
53
- imports?: ModuleConfig[];
54
- /**
55
- * Providers to export (available to importing modules)
56
- */
57
- exports?: (Constructor | string)[];
58
- /**
59
- * Route factory function
60
- */
61
- routes?: RouteFactory;
62
- }
63
- /**
64
- * Environment type for conditional behavior
65
- */
66
- export type Environment = 'development' | 'production' | 'test';
67
- /**
68
- * OpenAPI documentation configuration
69
- */
70
- export interface OpenAPIDocumentation {
71
- info: {
72
- title: string;
73
- version: string;
74
- description?: string;
75
- contact?: {
76
- name?: string;
77
- email?: string;
78
- url?: string;
79
- };
80
- };
81
- tags?: Array<{
82
- name: string;
83
- description?: string;
84
- }>;
85
- servers?: Array<{
86
- url: string;
87
- description?: string;
88
- }>;
89
- components?: Record<string, unknown>;
90
- }
91
- /**
92
- * Hook function for customizing OpenAPI responses
93
- *
94
- * Receives the response object and context, returns modified response.
95
- * This allows both framework and applications to add headers, modify
96
- * descriptions, etc. globally across all routes.
97
- */
98
- export type OpenAPIResponseHook = (response: {
99
- description: string;
100
- headers?: Record<string, {
101
- $ref: string;
102
- }>;
103
- content?: Record<string, unknown>;
104
- }, context: {
105
- statusCode: string;
106
- routeConfig: {
107
- public?: boolean;
108
- paginate?: boolean;
109
- tags?: string[];
110
- summary?: string;
111
- };
112
- }) => {
113
- description: string;
114
- headers?: Record<string, {
115
- $ref: string;
116
- }>;
117
- content?: Record<string, unknown>;
118
- };
119
- /**
120
- * OpenAPI configuration options
121
- */
122
- export interface OpenAPIOptions {
123
- /**
124
- * Whether to enable OpenAPI generation
125
- */
126
- enabled?: boolean;
127
- /**
128
- * Serve OpenAPI specs at /api/openapi.json (default: true in development)
129
- */
130
- serveSpecs?: boolean;
131
- /**
132
- * Serve Swagger UI at /api (default: true in development)
133
- */
134
- serveUI?: boolean;
135
- /**
136
- * Write OpenAPI specs to file (path relative to cwd)
137
- */
138
- writeToFile?: string;
139
- /**
140
- * OpenAPI documentation
141
- */
142
- documentation?: OpenAPIDocumentation;
143
- /**
144
- * Response hooks for customizing OpenAPI responses
145
- *
146
- * Hooks are applied in order to each response object.
147
- * Use this to add custom headers, modify descriptions, etc.
148
- */
149
- responseHooks?: OpenAPIResponseHook[];
150
- }
151
- /**
152
- * Rate limiting storage backend
153
- */
154
- export type RateLimitStorage = 'memory' | 'dynamodb';
155
- /**
156
- * Rate limiting configuration
157
- */
158
- export interface RateLimitOptions {
159
- /**
160
- * Whether rate limiting is enabled
161
- */
162
- enabled: boolean;
163
- /**
164
- * Storage backend
165
- */
166
- storage: RateLimitStorage;
167
- /**
168
- * Rate limit window in milliseconds (default: 60000 = 1 minute)
169
- */
170
- windowMs?: number;
171
- /**
172
- * Maximum requests per window (default: 100)
173
- */
174
- maxRequests?: number;
175
- /**
176
- * DynamoDB configuration (required if storage is 'dynamodb')
177
- */
178
- dynamodb?: {
179
- tableName: string;
180
- region?: string;
181
- };
182
- }
183
- /**
184
- * Middleware configuration options
185
- */
186
- export interface MiddlewareOptions {
187
- /**
188
- * Enable request ID middleware
189
- * @default true
190
- */
191
- requestId?: boolean;
192
- /**
193
- * Enable secure headers middleware
194
- * @default true in production
195
- */
196
- secureHeaders?: boolean;
197
- /**
198
- * CORS configuration
199
- */
200
- cors?: {
201
- origin: string | string[];
202
- credentials?: boolean;
203
- };
204
- }
205
- /**
206
- * Logger configuration options
207
- */
208
- export interface LoggerOptions {
209
- /**
210
- * Enable HTTP request logging
211
- * @default true
212
- */
213
- enabled?: boolean;
214
- /**
215
- * Use plain logger (no ANSI colors) for Lambda/CloudWatch
216
- * Auto-detected based on environment if not specified
217
- */
218
- plain?: boolean;
219
- }
220
- /**
221
- * Bootstrap options
222
- */
223
- export interface BootstrapOptions {
224
- /**
225
- * Environment (auto-detected from NODE_ENV if not provided)
226
- */
227
- environment?: Environment;
228
- /**
229
- * API base path (default: '/api')
230
- */
231
- apiBasePath?: string;
232
- /**
233
- * Error handler middleware
234
- * Set to false to disable default error handler
235
- * Provide a custom ErrorHandler to override
236
- * @default Glasswork's default error handler
237
- */
238
- errorHandler?: ErrorHandler | false;
239
- /**
240
- * OpenAPI configuration
241
- */
242
- openapi?: OpenAPIOptions;
243
- /**
244
- * Rate limiting configuration
245
- */
246
- rateLimit?: RateLimitOptions;
247
- /**
248
- * Common middleware configuration
249
- */
250
- middleware?: MiddlewareOptions;
251
- /**
252
- * Logger configuration
253
- */
254
- logger?: LoggerOptions;
255
- /**
256
- * Enable debug logging
257
- */
258
- debug?: boolean;
259
- }
260
- /**
261
- * Bootstrap result
262
- */
263
- export interface BootstrapResult {
264
- /**
265
- * Hono application instance
266
- */
267
- app: Hono;
268
- /**
269
- * Awilix container (fully accessible)
270
- */
271
- container: AwilixContainer;
272
- }
273
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/dist/utils.d.ts DELETED
@@ -1,9 +0,0 @@
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
@@ -1 +0,0 @@
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 DELETED
@@ -1,31 +0,0 @@
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
package/dist/utils.js.map DELETED
@@ -1 +0,0 @@
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"}
File without changes