stratal 0.0.6 → 0.0.7
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.
- package/dist/application.d.ts +10 -42
- package/dist/application.d.ts.map +1 -1
- package/dist/application.js +36 -77
- package/dist/application.js.map +1 -1
- package/dist/config/config.module.d.ts.map +1 -1
- package/dist/config/config.module.js +2 -1
- package/dist/config/config.module.js.map +1 -1
- package/dist/config/errors/config-module-not-initialized.error.d.ts +10 -0
- package/dist/config/errors/config-module-not-initialized.error.d.ts.map +1 -0
- package/dist/config/errors/config-module-not-initialized.error.js +12 -0
- package/dist/config/errors/config-module-not-initialized.error.js.map +1 -0
- package/dist/config/errors/index.d.ts +1 -0
- package/dist/config/errors/index.d.ts.map +1 -1
- package/dist/config/errors/index.js +1 -0
- package/dist/config/errors/index.js.map +1 -1
- package/dist/di/container.d.ts +5 -267
- package/dist/di/container.d.ts.map +1 -1
- package/dist/di/container.js +13 -288
- package/dist/di/container.js.map +1 -1
- package/dist/di/errors/request-scope-operation-not-allowed.error.d.ts +0 -1
- package/dist/di/errors/request-scope-operation-not-allowed.error.d.ts.map +1 -1
- package/dist/di/errors/request-scope-operation-not-allowed.error.js +0 -1
- package/dist/di/errors/request-scope-operation-not-allowed.error.js.map +1 -1
- package/dist/di/index.d.ts +0 -1
- package/dist/di/index.d.ts.map +1 -1
- package/dist/di/index.js +0 -1
- package/dist/di/index.js.map +1 -1
- package/dist/errors/error-codes.d.ts +2 -0
- package/dist/errors/error-codes.d.ts.map +1 -1
- package/dist/errors/error-codes.js +2 -0
- package/dist/errors/error-codes.js.map +1 -1
- package/dist/events/types.d.ts +1 -1
- package/dist/execution-context.d.ts +4 -0
- package/dist/execution-context.d.ts.map +1 -0
- package/dist/execution-context.js +2 -0
- package/dist/execution-context.js.map +1 -0
- package/dist/i18n/messages/en/errors.d.ts +2 -2
- package/dist/i18n/messages/en/errors.js +2 -2
- package/dist/i18n/messages/en/errors.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/logger/services/logger.service.d.ts +2 -15
- package/dist/logger/services/logger.service.d.ts.map +1 -1
- package/dist/logger/services/logger.service.js +11 -16
- package/dist/logger/services/logger.service.js.map +1 -1
- package/dist/router/errors/hono-app-already-configured.error.d.ts +10 -0
- package/dist/router/errors/hono-app-already-configured.error.d.ts.map +1 -0
- package/dist/router/errors/hono-app-already-configured.error.js +12 -0
- package/dist/router/errors/hono-app-already-configured.error.js.map +1 -0
- package/dist/router/errors/index.d.ts +1 -2
- package/dist/router/errors/index.d.ts.map +1 -1
- package/dist/router/errors/index.js +1 -2
- package/dist/router/errors/index.js.map +1 -1
- package/dist/router/hono-app.d.ts +38 -0
- package/dist/router/hono-app.d.ts.map +1 -0
- package/dist/router/hono-app.js +128 -0
- package/dist/router/hono-app.js.map +1 -0
- package/dist/router/index.d.ts +3 -3
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js +6 -4
- package/dist/router/index.js.map +1 -1
- package/dist/router/router.tokens.d.ts +0 -28
- package/dist/router/router.tokens.d.ts.map +1 -1
- package/dist/router/router.tokens.js +0 -28
- package/dist/router/router.tokens.js.map +1 -1
- package/dist/router/services/index.d.ts +0 -1
- package/dist/router/services/index.d.ts.map +1 -1
- package/dist/router/services/index.js +0 -1
- package/dist/router/services/index.js.map +1 -1
- package/dist/stratal.d.ts +9 -26
- package/dist/stratal.d.ts.map +1 -1
- package/dist/stratal.js +22 -50
- package/dist/stratal.js.map +1 -1
- package/package.json +8 -8
- package/dist/di/request-context-store.d.ts +0 -122
- package/dist/di/request-context-store.d.ts.map +0 -1
- package/dist/di/request-context-store.js +0 -135
- package/dist/di/request-context-store.js.map +0 -1
- package/dist/router/errors/router-already-configured.error.d.ts +0 -5
- package/dist/router/errors/router-already-configured.error.d.ts.map +0 -1
- package/dist/router/errors/router-already-configured.error.js +0 -8
- package/dist/router/errors/router-already-configured.error.js.map +0 -1
- package/dist/router/errors/router-not-configured.error.d.ts +0 -5
- package/dist/router/errors/router-not-configured.error.d.ts.map +0 -1
- package/dist/router/errors/router-not-configured.error.js +0 -8
- package/dist/router/errors/router-not-configured.error.js.map +0 -1
- package/dist/router/router.service.d.ts +0 -62
- package/dist/router/router.service.d.ts.map +0 -1
- package/dist/router/router.service.js +0 -166
- package/dist/router/router.service.js.map +0 -1
- package/dist/router/services/request-scope.service.d.ts +0 -42
- package/dist/router/services/request-scope.service.d.ts.map +0 -1
- package/dist/router/services/request-scope.service.js +0 -76
- package/dist/router/services/request-scope.service.js.map +0 -1
package/dist/di/container.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ROUTER_TOKENS } from '../router/router.tokens';
|
|
2
2
|
import { ConditionalBindingBuilderImpl } from './conditional-binding-builder';
|
|
3
3
|
import { RequestScopeOperationNotAllowedError } from './errors/request-scope-operation-not-allowed.error';
|
|
4
|
-
import {
|
|
5
|
-
import { CONTAINER_TOKEN, DI_TOKENS } from './tokens';
|
|
4
|
+
import { CONTAINER_TOKEN } from './tokens';
|
|
6
5
|
/**
|
|
7
6
|
* Unified Container for DI management
|
|
8
7
|
*
|
|
@@ -15,69 +14,33 @@ import { CONTAINER_TOKEN, DI_TOKENS } from './tokens';
|
|
|
15
14
|
* import { container as tsyringeRootContainer } from 'tsyringe'
|
|
16
15
|
*
|
|
17
16
|
* const container = new Container({
|
|
18
|
-
* env,
|
|
19
|
-
* ctx,
|
|
20
17
|
* container: tsyringeRootContainer.createChildContainer()
|
|
21
18
|
* })
|
|
22
19
|
*
|
|
23
|
-
* // Auto-extract token and scope from decorator
|
|
24
20
|
* container.register(I18nService)
|
|
25
|
-
*
|
|
26
|
-
* // Explicit token with auto-scope detection
|
|
27
21
|
* container.register(MY_TOKEN, MyService)
|
|
28
|
-
*
|
|
29
|
-
* // Explicit singleton registration
|
|
30
22
|
* container.registerSingleton(ConfigService)
|
|
31
|
-
*
|
|
32
|
-
* // Register a value
|
|
33
23
|
* container.registerValue(MY_TOKEN, myInstance)
|
|
34
24
|
* ```
|
|
35
25
|
*
|
|
36
|
-
* @example Resolution
|
|
37
|
-
* ```typescript
|
|
38
|
-
* // Resolves from container
|
|
39
|
-
* const service = container.resolve(MY_TOKEN)
|
|
40
|
-
* ```
|
|
41
|
-
*
|
|
42
26
|
* @example Request scope (automatic lifecycle)
|
|
43
27
|
* ```typescript
|
|
44
|
-
* await container.runInRequestScope(routerContext, async () => {
|
|
45
|
-
* const i18n =
|
|
46
|
-
* // i18n is context-enriched for this request
|
|
47
|
-
* })
|
|
48
|
-
* ```
|
|
49
|
-
*
|
|
50
|
-
* @example Request scope (manual lifecycle)
|
|
51
|
-
* ```typescript
|
|
52
|
-
* const reqContainer = container.createRequestScope(routerContext)
|
|
53
|
-
* await reqContainer.runWithContextStore(async () => {
|
|
54
|
-
* // use reqContainer...
|
|
28
|
+
* await container.runInRequestScope(routerContext, async (requestContainer) => {
|
|
29
|
+
* const i18n = requestContainer.resolve(I18N_TOKEN)
|
|
55
30
|
* })
|
|
56
|
-
* // Cleanup is automatic
|
|
57
31
|
* ```
|
|
58
32
|
*/
|
|
59
33
|
export class Container {
|
|
60
34
|
container;
|
|
61
|
-
contextStore;
|
|
62
|
-
env;
|
|
63
|
-
ctx;
|
|
64
35
|
isRequestScoped;
|
|
65
36
|
constructor(options) {
|
|
66
|
-
this.env = options.env;
|
|
67
|
-
this.ctx = options.ctx;
|
|
68
37
|
this.isRequestScoped = options.isRequestScoped ?? false;
|
|
69
|
-
this.contextStore = RequestContextStore.getInstance();
|
|
70
38
|
this.container = options.container;
|
|
71
|
-
// Only register
|
|
39
|
+
// Only register CONTAINER_TOKEN for global container (not request-scoped)
|
|
72
40
|
if (!this.isRequestScoped) {
|
|
73
|
-
this.container.register(DI_TOKENS.CloudflareEnv, { useValue: options.env });
|
|
74
|
-
this.container.register(DI_TOKENS.ExecutionContext, { useValue: options.ctx });
|
|
75
41
|
this.container.register(CONTAINER_TOKEN, { useValue: this });
|
|
76
42
|
}
|
|
77
43
|
}
|
|
78
|
-
get logger() {
|
|
79
|
-
return this.container.resolve(LOGGER_TOKENS.LoggerService);
|
|
80
|
-
}
|
|
81
44
|
register(tokenOrClass, serviceClassOrScope, scope) {
|
|
82
45
|
let token;
|
|
83
46
|
let serviceClass;
|
|
@@ -112,66 +75,18 @@ export class Container {
|
|
|
112
75
|
}
|
|
113
76
|
/**
|
|
114
77
|
* Register a value (instance) directly
|
|
115
|
-
*
|
|
116
|
-
* Use for registering pre-created instances or primitive values.
|
|
117
|
-
*
|
|
118
|
-
* @param token - DI token for resolution
|
|
119
|
-
* @param value - Value to register
|
|
120
|
-
*
|
|
121
|
-
* @example
|
|
122
|
-
* ```typescript
|
|
123
|
-
* container.registerValue(CONFIG_TOKEN, configInstance)
|
|
124
|
-
* container.registerValue(DI_TOKENS.Application, app)
|
|
125
|
-
* ```
|
|
126
78
|
*/
|
|
127
79
|
registerValue(token, value) {
|
|
128
80
|
this.container.register(token, { useValue: value });
|
|
129
81
|
}
|
|
130
82
|
/**
|
|
131
83
|
* Register with factory function
|
|
132
|
-
*
|
|
133
|
-
* Use when instance creation requires custom logic or other resolved dependencies.
|
|
134
|
-
*
|
|
135
|
-
* @param token - DI token for resolution
|
|
136
|
-
* @param factory - Factory function that receives the Container
|
|
137
|
-
*
|
|
138
|
-
* @example
|
|
139
|
-
* ```typescript
|
|
140
|
-
* container.registerFactory(FORMATTER_TOKEN, (c) => {
|
|
141
|
-
* const config = c.resolve(CONFIG_TOKEN)
|
|
142
|
-
* return config.get('logging').formatter === 'pretty'
|
|
143
|
-
* ? new PrettyFormatter()
|
|
144
|
-
* : new JsonFormatter()
|
|
145
|
-
* }, Scope.Singleton)
|
|
146
|
-
* ```
|
|
147
84
|
*/
|
|
148
85
|
registerFactory(token, factory) {
|
|
149
86
|
this.container.register(token, { useFactory: () => factory(this) });
|
|
150
87
|
}
|
|
151
88
|
/**
|
|
152
89
|
* Register an alias to an existing token
|
|
153
|
-
*
|
|
154
|
-
* Creates a redirect so that resolving the alias token returns the same
|
|
155
|
-
* instance as the target token. This is useful for:
|
|
156
|
-
* - Interface tokens that alias concrete implementations
|
|
157
|
-
* - Multiple entry points to the same service
|
|
158
|
-
*
|
|
159
|
-
* @param alias - The alias token to register
|
|
160
|
-
* @param target - The target token to redirect to
|
|
161
|
-
*
|
|
162
|
-
* @example Interface abstraction
|
|
163
|
-
* ```typescript
|
|
164
|
-
* // Register concrete implementation
|
|
165
|
-
* container.register(UserService)
|
|
166
|
-
*
|
|
167
|
-
* // Create alias for interface token
|
|
168
|
-
* container.registerExisting(I_USER_SERVICE, UserService)
|
|
169
|
-
*
|
|
170
|
-
* // Both resolve to the same instance
|
|
171
|
-
* const a = container.resolve(UserService)
|
|
172
|
-
* const b = container.resolve(I_USER_SERVICE)
|
|
173
|
-
* // a === b (same instance)
|
|
174
|
-
* ```
|
|
175
90
|
*/
|
|
176
91
|
registerExisting(alias, target) {
|
|
177
92
|
this.container.register(alias, { useToken: target });
|
|
@@ -181,24 +96,12 @@ export class Container {
|
|
|
181
96
|
// ============================================================
|
|
182
97
|
/**
|
|
183
98
|
* Resolve a service from the container
|
|
184
|
-
*
|
|
185
|
-
* @param token - DI token for the service
|
|
186
|
-
* @returns Resolved service instance
|
|
187
|
-
*
|
|
188
|
-
* @example
|
|
189
|
-
* ```typescript
|
|
190
|
-
* const logger = container.resolve(LOGGER_TOKEN)
|
|
191
|
-
* const config = container.resolve<IConfigService>(CONFIG_TOKEN)
|
|
192
|
-
* ```
|
|
193
99
|
*/
|
|
194
100
|
resolve(token) {
|
|
195
101
|
return this.container.resolve(token);
|
|
196
102
|
}
|
|
197
103
|
/**
|
|
198
104
|
* Check if a token is registered
|
|
199
|
-
*
|
|
200
|
-
* @param token - DI token to check
|
|
201
|
-
* @returns true if token is registered
|
|
202
105
|
*/
|
|
203
106
|
isRegistered(token) {
|
|
204
107
|
return this.container.isRegistered(token);
|
|
@@ -208,245 +111,67 @@ export class Container {
|
|
|
208
111
|
// ============================================================
|
|
209
112
|
/**
|
|
210
113
|
* Start a conditional binding with predicate evaluation
|
|
211
|
-
*
|
|
212
|
-
* Creates a fluent builder for registering a service that chooses between
|
|
213
|
-
* two implementations based on a predicate evaluated at resolution time.
|
|
214
|
-
*
|
|
215
|
-
* @param predicate - Function that returns true/false to determine implementation.
|
|
216
|
-
* Receives a container with `resolve()` method for resolving dependencies.
|
|
217
|
-
* @param options - Optional configuration (cache: whether to cache predicate result)
|
|
218
|
-
* @returns Fluent builder for specifying token and implementations
|
|
219
|
-
*
|
|
220
|
-
* @example Environment-based implementation selection
|
|
221
|
-
* ```typescript
|
|
222
|
-
* container
|
|
223
|
-
* .when((c) => c.resolve(CONFIG_TOKEN).get('env') === 'development')
|
|
224
|
-
* .use(FORMATTER_TOKEN)
|
|
225
|
-
* .give(PrettyFormatter)
|
|
226
|
-
* .otherwise(JsonFormatter)
|
|
227
|
-
* ```
|
|
228
|
-
*
|
|
229
|
-
* @example Feature flag with cached predicate
|
|
230
|
-
* ```typescript
|
|
231
|
-
* container
|
|
232
|
-
* .when((c) => c.resolve(FEATURE_FLAGS_TOKEN).isEnabled('newPaymentGateway'), { cache: true })
|
|
233
|
-
* .use(PAYMENT_TOKEN)
|
|
234
|
-
* .give(StripePaymentService)
|
|
235
|
-
* .otherwise(LegacyPaymentService)
|
|
236
|
-
* ```
|
|
237
114
|
*/
|
|
238
115
|
when(predicate, options = {}) {
|
|
239
116
|
return new ConditionalBindingBuilderImpl(this.container, this, predicate, options);
|
|
240
117
|
}
|
|
241
118
|
/**
|
|
242
119
|
* Replace a service registration with a decorated version
|
|
243
|
-
*
|
|
244
|
-
* Resolves the current instance, applies the decorator, and re-registers
|
|
245
|
-
* the decorated instance. This is a one-time operation at initialization time.
|
|
246
|
-
*
|
|
247
|
-
* **IMPORTANT:** This method can only be used in a module's `onInitialize()` method.
|
|
248
|
-
* The `onInitialize()` hook runs after all modules have registered their services
|
|
249
|
-
* via the `@Module` decorator, ensuring all dependencies are available for resolution.
|
|
250
|
-
*
|
|
251
|
-
* @param token - DI token of the service to extend
|
|
252
|
-
* @param decorator - Function that receives the service and returns decorated version
|
|
253
|
-
*
|
|
254
|
-
* @example Add logging to database service (in onInitialize)
|
|
255
|
-
* ```typescript
|
|
256
|
-
* // In your module's onInitialize() method:
|
|
257
|
-
* import type { OnInitialize, ModuleContext } from 'stratal/module'
|
|
258
|
-
*
|
|
259
|
-
* @Module({ providers: [...] })
|
|
260
|
-
* export class MyModule implements OnInitialize {
|
|
261
|
-
* onInitialize({ container }: ModuleContext): void {
|
|
262
|
-
* container.extend(DI_TOKENS.Database, (db, c) => {
|
|
263
|
-
* const logger = c.resolve(LOGGER_TOKENS.LoggerService)
|
|
264
|
-
* return new LoggingDatabaseDecorator(db, logger)
|
|
265
|
-
* })
|
|
266
|
-
* }
|
|
267
|
-
* }
|
|
268
|
-
* // DI_TOKENS.Database now resolves to LoggingDatabaseDecorator
|
|
269
|
-
* ```
|
|
270
|
-
*
|
|
271
|
-
* @example Chain multiple decorators
|
|
272
|
-
* ```typescript
|
|
273
|
-
* // In onInitialize()
|
|
274
|
-
* container.extend(SERVICE_TOKEN, (svc) => new LoggingDecorator(svc))
|
|
275
|
-
* container.extend(SERVICE_TOKEN, (svc) => new CachingDecorator(svc))
|
|
276
|
-
* // SERVICE_TOKEN now resolves to CachingDecorator(LoggingDecorator(original))
|
|
277
|
-
* ```
|
|
278
120
|
*/
|
|
279
121
|
extend(token, decorator) {
|
|
280
|
-
// Resolve current instance
|
|
281
122
|
const currentInstance = this.container.resolve(token);
|
|
282
|
-
// Apply decorator
|
|
283
123
|
const decoratedInstance = decorator(currentInstance, this);
|
|
284
|
-
// Re-register with decorated instance (replaces existing registration)
|
|
285
124
|
this.container.register(token, { useValue: decoratedInstance });
|
|
286
125
|
}
|
|
287
126
|
// ============================================================
|
|
288
127
|
// Request Scope Management
|
|
289
128
|
// ============================================================
|
|
290
|
-
/**
|
|
291
|
-
* Check if currently in request context
|
|
292
|
-
*
|
|
293
|
-
* @returns true if in request context (inside runInRequestScope or runWithContextStore)
|
|
294
|
-
*/
|
|
295
|
-
isInRequestContext() {
|
|
296
|
-
return this.contextStore.hasRequestContext();
|
|
297
|
-
}
|
|
298
129
|
/**
|
|
299
130
|
* Run callback within request scope
|
|
300
131
|
*
|
|
301
132
|
* Creates a child container with fresh instances for services registered with `scope: Scope.Request`.
|
|
302
|
-
*
|
|
303
|
-
*
|
|
304
|
-
* Also wraps with RequestContextStore for Zod i18n validation support.
|
|
133
|
+
* Callback receives the request-scoped container as argument.
|
|
305
134
|
*
|
|
306
135
|
* Can only be called on global container (not request-scoped).
|
|
307
|
-
*
|
|
308
|
-
* @param routerContext - RouterContext for the current request
|
|
309
|
-
* @param callback - Async operation to run with request context
|
|
310
|
-
* @returns Result of callback execution
|
|
311
|
-
*
|
|
312
|
-
* @example
|
|
313
|
-
* ```typescript
|
|
314
|
-
* await container.runInRequestScope(routerContext, async () => {
|
|
315
|
-
* const i18n = container.resolve(I18N_TOKEN)
|
|
316
|
-
* const message = i18n.t('common.welcome')
|
|
317
|
-
* // ...
|
|
318
|
-
* })
|
|
319
|
-
* ```
|
|
320
136
|
*/
|
|
321
137
|
async runInRequestScope(routerContext, callback) {
|
|
322
138
|
if (this.isRequestScoped) {
|
|
323
139
|
throw new RequestScopeOperationNotAllowedError('runInRequestScope');
|
|
324
140
|
}
|
|
325
|
-
const
|
|
141
|
+
const requestContainer = this.createRequestScope(routerContext);
|
|
326
142
|
try {
|
|
327
|
-
|
|
328
|
-
return await this.contextStore.run(requestChildContainer, callback);
|
|
143
|
+
return await callback(requestContainer);
|
|
329
144
|
}
|
|
330
145
|
finally {
|
|
331
|
-
await
|
|
146
|
+
await requestContainer.dispose();
|
|
332
147
|
}
|
|
333
148
|
}
|
|
334
149
|
/**
|
|
335
150
|
* Create request scope container
|
|
336
151
|
*
|
|
337
|
-
* Use when you need manual control over the request container lifecycle,
|
|
338
|
-
* typically in middleware. Returns a new Container instance wrapping
|
|
339
|
-
* a request-scoped child container.
|
|
340
|
-
*
|
|
341
152
|
* Can only be called on global container (not request-scoped).
|
|
342
|
-
*
|
|
343
|
-
* @param routerContext - RouterContext for the current request
|
|
344
|
-
* @returns Request-scoped Container instance
|
|
345
|
-
*
|
|
346
|
-
* @example
|
|
347
|
-
* ```typescript
|
|
348
|
-
* const reqContainer = container.createRequestScope(routerContext)
|
|
349
|
-
* await reqContainer.runWithContextStore(async () => {
|
|
350
|
-
* // use reqContainer...
|
|
351
|
-
* })
|
|
352
|
-
* // Cleanup is automatic
|
|
353
|
-
* ```
|
|
354
153
|
*/
|
|
355
154
|
createRequestScope(routerContext) {
|
|
356
155
|
if (this.isRequestScoped) {
|
|
357
156
|
throw new RequestScopeOperationNotAllowedError('createRequestScope');
|
|
358
157
|
}
|
|
359
|
-
const
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
ctx: this.ctx,
|
|
363
|
-
container: requestChildContainer,
|
|
364
|
-
isRequestScoped: true
|
|
365
|
-
});
|
|
366
|
-
}
|
|
367
|
-
/**
|
|
368
|
-
* Run callback within request scope context store
|
|
369
|
-
*
|
|
370
|
-
* Wraps callback with RequestContextStore (for Zod i18n validation)
|
|
371
|
-
* and automatically handles cleanup after callback completes.
|
|
372
|
-
*
|
|
373
|
-
* Can only be called on request-scoped container (not global).
|
|
374
|
-
*
|
|
375
|
-
* @param callback - Async operation to run with context
|
|
376
|
-
* @returns Result of callback execution
|
|
377
|
-
*
|
|
378
|
-
* @example
|
|
379
|
-
* ```typescript
|
|
380
|
-
* const reqContainer = container.createRequestScope(routerContext)
|
|
381
|
-
* await reqContainer.runWithContextStore(async () => {
|
|
382
|
-
* const i18n = reqContainer.resolve(I18N_TOKENS.I18nService)
|
|
383
|
-
* // ...
|
|
384
|
-
* })
|
|
385
|
-
* // Cleanup is automatic
|
|
386
|
-
* ```
|
|
387
|
-
*/
|
|
388
|
-
async runWithContextStore(callback) {
|
|
389
|
-
if (!this.isRequestScoped) {
|
|
390
|
-
throw new RequestScopeOperationNotAllowedError('runWithContextStore');
|
|
391
|
-
}
|
|
392
|
-
try {
|
|
393
|
-
return await this.contextStore.run(this.container, callback);
|
|
394
|
-
}
|
|
395
|
-
finally {
|
|
396
|
-
await this.cleanupRequestContainer(this.container);
|
|
397
|
-
}
|
|
158
|
+
const childContainer = this.container.createChildContainer();
|
|
159
|
+
childContainer.register(ROUTER_TOKENS.RouterContext, { useValue: routerContext });
|
|
160
|
+
return new Container({ container: childContainer, isRequestScoped: true });
|
|
398
161
|
}
|
|
399
162
|
// ============================================================
|
|
400
163
|
// Escape Hatches
|
|
401
164
|
// ============================================================
|
|
402
165
|
/**
|
|
403
166
|
* Get underlying tsyringe container
|
|
404
|
-
*
|
|
405
|
-
* Use sparingly - prefer Container methods for most operations.
|
|
406
|
-
* Useful for advanced scenarios or compatibility with existing code.
|
|
407
|
-
* @returns The underlying DependencyContainer
|
|
408
167
|
*/
|
|
409
168
|
getTsyringeContainer() {
|
|
410
169
|
return this.container;
|
|
411
170
|
}
|
|
412
|
-
/**
|
|
413
|
-
* Get current request container from context store (if in request context)
|
|
414
|
-
* @deprecated Use container.runWithContextStore() instead
|
|
415
|
-
* @returns Request container if in request context, undefined otherwise
|
|
416
|
-
*/
|
|
417
|
-
getRequestContainer() {
|
|
418
|
-
return this.contextStore.getRequestContainer();
|
|
419
|
-
}
|
|
420
|
-
// ============================================================
|
|
421
|
-
// Private Methods
|
|
422
|
-
// ============================================================
|
|
423
|
-
/**
|
|
424
|
-
* Create request child container with RouterContext registered
|
|
425
|
-
*
|
|
426
|
-
* Services registered with `scope: Scope.Request` will automatically get fresh instances
|
|
427
|
-
* in the child container. RouterContext is registered so services can inject it for
|
|
428
|
-
* request-specific data.
|
|
429
|
-
*/
|
|
430
|
-
createRequestChildContainer(routerContext) {
|
|
431
|
-
const requestContainer = this.container.createChildContainer();
|
|
432
|
-
// Register RouterContext in request container
|
|
433
|
-
// Services registered with scope: Scope.Request can inject this via DI_TOKENS.RouterContext
|
|
434
|
-
const ROUTER_TOKENS = { RouterContext: Symbol.for('RouterContext') };
|
|
435
|
-
requestContainer.register(ROUTER_TOKENS.RouterContext, { useValue: routerContext });
|
|
436
|
-
return requestContainer;
|
|
437
|
-
}
|
|
438
|
-
/**
|
|
439
|
-
* Cleanup request container resources.
|
|
440
|
-
* This is called after each request.
|
|
441
|
-
*/
|
|
442
|
-
async cleanupRequestContainer(_requestContainer) {
|
|
443
|
-
// No-op: dialects manage their own connection lifecycle
|
|
444
|
-
}
|
|
445
171
|
dispose() {
|
|
446
|
-
this.logger.info('Container disposed.');
|
|
447
172
|
return this.container.dispose();
|
|
448
173
|
}
|
|
449
174
|
}
|
|
450
175
|
// Re-export tsyringe utilities for convenience
|
|
451
|
-
export { container, inject, injectable, singleton } from 'tsyringe';
|
|
176
|
+
export { container, delay, inject, injectable, singleton } from 'tsyringe';
|
|
452
177
|
//# sourceMappingURL=container.js.map
|
package/dist/di/container.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/di/container.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/di/container.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,6 @@ import { ApplicationError } from '../../errors';
|
|
|
4
4
|
*
|
|
5
5
|
* Thrown when attempting to call a method that is not allowed on the current container scope.
|
|
6
6
|
* - `createRequestScope()` and `runInRequestScope()` can only be called on global containers
|
|
7
|
-
* - `runWithContextStore()` can only be called on request-scoped containers
|
|
8
7
|
*/
|
|
9
8
|
export declare class RequestScopeOperationNotAllowedError extends ApplicationError {
|
|
10
9
|
constructor(methodName: string);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-scope-operation-not-allowed.error.d.ts","sourceRoot":"","sources":["../../../src/di/errors/request-scope-operation-not-allowed.error.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAE/C
|
|
1
|
+
{"version":3,"file":"request-scope-operation-not-allowed.error.d.ts","sourceRoot":"","sources":["../../../src/di/errors/request-scope-operation-not-allowed.error.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAE/C;;;;;GAKG;AACH,qBAAa,oCAAqC,SAAQ,gBAAgB;gBAC5D,UAAU,EAAE,MAAM;CAO/B"}
|
|
@@ -5,7 +5,6 @@ import { ApplicationError } from '../../errors';
|
|
|
5
5
|
*
|
|
6
6
|
* Thrown when attempting to call a method that is not allowed on the current container scope.
|
|
7
7
|
* - `createRequestScope()` and `runInRequestScope()` can only be called on global containers
|
|
8
|
-
* - `runWithContextStore()` can only be called on request-scoped containers
|
|
9
8
|
*/
|
|
10
9
|
export class RequestScopeOperationNotAllowedError extends ApplicationError {
|
|
11
10
|
constructor(methodName) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-scope-operation-not-allowed.error.js","sourceRoot":"","sources":["../../../src/di/errors/request-scope-operation-not-allowed.error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAE/C
|
|
1
|
+
{"version":3,"file":"request-scope-operation-not-allowed.error.js","sourceRoot":"","sources":["../../../src/di/errors/request-scope-operation-not-allowed.error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAE/C;;;;;GAKG;AACH,MAAM,OAAO,oCAAqC,SAAQ,gBAAgB;IACxE,YAAY,UAAkB;QAC5B,KAAK,CACH,wCAAwC,EACxC,WAAW,CAAC,MAAM,CAAC,oBAAoB,EACvC,EAAE,UAAU,EAAE,CACf,CAAA;IACH,CAAC;CACF"}
|
package/dist/di/index.d.ts
CHANGED
package/dist/di/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/di/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/di/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,SAAS,CAAA;AACvB,cAAc,+BAA+B,CAAA;AAC7C,cAAc,UAAU,CAAA;AAGxB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC1C,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAGnD,YAAY,EACV,yBAAyB,EACzB,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EACnB,MAAM,+BAA+B,CAAA;AAEtC,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA"}
|
package/dist/di/index.js
CHANGED
package/dist/di/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/di/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/di/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,SAAS,CAAA;AACvB,cAAc,+BAA+B,CAAA;AAC7C,cAAc,UAAU,CAAA;AAExB,kDAAkD;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA"}
|
|
@@ -159,6 +159,8 @@ export declare const ERROR_CODES: {
|
|
|
159
159
|
readonly INVALID_ERROR_CODE_RANGE: 9105;
|
|
160
160
|
/** Invalid module provider configuration */
|
|
161
161
|
readonly INVALID_MODULE_PROVIDER: 9106;
|
|
162
|
+
/** ConfigModule.forRoot() was not called */
|
|
163
|
+
readonly CONFIG_MODULE_NOT_INITIALIZED: 9107;
|
|
162
164
|
/** Generic infrastructure error */
|
|
163
165
|
readonly INFRASTRUCTURE_ERROR: 9200;
|
|
164
166
|
/** Execution context not initialized */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-codes.d.ts","sourceRoot":"","sources":["../../src/errors/error-codes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,eAAO,MAAM,WAAW;IACtB;;;OAGG;;QAED,6BAA6B;;QAE7B,mCAAmC;;QAEnC,kCAAkC;;QAElC,uCAAuC;;QAEvC,iCAAiC;;QAEjC,uBAAuB;;QAEvB,gCAAgC;;QAEhC,oCAAoC;;QAEpC,uCAAuC;;;IAIzC;;;OAGG;;QAED,mCAAmC;;QAEnC,iCAAiC;;QAEjC,iCAAiC;;QAEjC,+BAA+B;;QAE/B,8BAA8B;;QAE9B,6BAA6B;;QAE7B,+CAA+C;;QAE/C,2CAA2C;;QAE3C,sCAAsC;;QAEtC,wCAAwC;;QAExC,2BAA2B;;QAE3B,8BAA8B;;QAE9B,yBAAyB;;QAEzB,oCAAoC;;QAEpC,sCAAsC;;;IAIxC;;;OAGG;;QAED,+BAA+B;;QAE/B,6BAA6B;;QAE7B,+BAA+B;;;IAIjC;;;OAGG;;QAED,iCAAiC;;QAEjC,+BAA+B;;QAE/B,qCAAqC;;QAErC,8BAA8B;;;IAIhC;;;OAGG;;QAED,+BAA+B;;QAE/B,6BAA6B;;QAE7B,qBAAqB;;QAErB,+BAA+B;;QAE/B,gDAAgD;;;IAIlD;;;OAGG;;QAED,oCAAoC;;QAEpC,kCAAkC;;QAElC,wCAAwC;;;IAI1C;;;OAGG;;QAED,+CAA+C;;QAE/C,qCAAqC;;;IAIvC;;;OAGG;;QAED,4BAA4B;;QAI5B,kCAAkC;;QAElC,oCAAoC;;QAEpC,gCAAgC;;QAEhC,0CAA0C;;QAE1C,kCAAkC;;QAElC,+BAA+B;;QAE/B,4CAA4C;;QAI5C,mCAAmC;;QAEnC,wCAAwC;;QAExC,wCAAwC;;QAExC,8BAA8B;;QAE9B,gCAAgC;;QAEhC,mCAAmC;;;CAG7B,CAAA;AAEV;;;;;;;;GAQG;AACH,KAAK,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GACjC;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC,MAAM,CAAC,CAAC,GAC7C,CAAC,CAAA;AAEL;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"error-codes.d.ts","sourceRoot":"","sources":["../../src/errors/error-codes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,eAAO,MAAM,WAAW;IACtB;;;OAGG;;QAED,6BAA6B;;QAE7B,mCAAmC;;QAEnC,kCAAkC;;QAElC,uCAAuC;;QAEvC,iCAAiC;;QAEjC,uBAAuB;;QAEvB,gCAAgC;;QAEhC,oCAAoC;;QAEpC,uCAAuC;;;IAIzC;;;OAGG;;QAED,mCAAmC;;QAEnC,iCAAiC;;QAEjC,iCAAiC;;QAEjC,+BAA+B;;QAE/B,8BAA8B;;QAE9B,6BAA6B;;QAE7B,+CAA+C;;QAE/C,2CAA2C;;QAE3C,sCAAsC;;QAEtC,wCAAwC;;QAExC,2BAA2B;;QAE3B,8BAA8B;;QAE9B,yBAAyB;;QAEzB,oCAAoC;;QAEpC,sCAAsC;;;IAIxC;;;OAGG;;QAED,+BAA+B;;QAE/B,6BAA6B;;QAE7B,+BAA+B;;;IAIjC;;;OAGG;;QAED,iCAAiC;;QAEjC,+BAA+B;;QAE/B,qCAAqC;;QAErC,8BAA8B;;;IAIhC;;;OAGG;;QAED,+BAA+B;;QAE/B,6BAA6B;;QAE7B,qBAAqB;;QAErB,+BAA+B;;QAE/B,gDAAgD;;;IAIlD;;;OAGG;;QAED,oCAAoC;;QAEpC,kCAAkC;;QAElC,wCAAwC;;;IAI1C;;;OAGG;;QAED,+CAA+C;;QAE/C,qCAAqC;;;IAIvC;;;OAGG;;QAED,4BAA4B;;QAI5B,kCAAkC;;QAElC,oCAAoC;;QAEpC,gCAAgC;;QAEhC,0CAA0C;;QAE1C,kCAAkC;;QAElC,+BAA+B;;QAE/B,4CAA4C;;QAE5C,4CAA4C;;QAI5C,mCAAmC;;QAEnC,wCAAwC;;QAExC,wCAAwC;;QAExC,8BAA8B;;QAE9B,gCAAgC;;QAEhC,mCAAmC;;;CAG7B,CAAA;AAEV;;;;;;;;GAQG;AACH,KAAK,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GACjC;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC,MAAM,CAAC,CAAC,GAC7C,CAAC,CAAA;AAEL;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAA"}
|
|
@@ -160,6 +160,8 @@ export const ERROR_CODES = {
|
|
|
160
160
|
INVALID_ERROR_CODE_RANGE: 9105,
|
|
161
161
|
/** Invalid module provider configuration */
|
|
162
162
|
INVALID_MODULE_PROVIDER: 9106,
|
|
163
|
+
/** ConfigModule.forRoot() was not called */
|
|
164
|
+
CONFIG_MODULE_NOT_INITIALIZED: 9107,
|
|
163
165
|
// Infrastructure Errors (9200-9299)
|
|
164
166
|
/** Generic infrastructure error */
|
|
165
167
|
INFRASTRUCTURE_ERROR: 9200,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-codes.js","sourceRoot":"","sources":["../../src/errors/error-codes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB;;;OAGG;IACH,QAAQ,EAAE;QACR,6BAA6B;QAC7B,OAAO,EAAE,IAAI;QACb,mCAAmC;QACnC,gBAAgB,EAAE,IAAI;QACtB,kCAAkC;QAClC,iBAAiB,EAAE,IAAI;QACvB,uCAAuC;QACvC,sBAAsB,EAAE,IAAI;QAC5B,iCAAiC;QACjC,iBAAiB,EAAE,IAAI;QACvB,uBAAuB;QACvB,OAAO,EAAE,IAAI;QACb,gCAAgC;QAChC,eAAe,EAAE,IAAI;QACrB,oCAAoC;QACpC,oBAAoB,EAAE,IAAI;QAC1B,uCAAuC;QACvC,oBAAoB,EAAE,IAAI;KAC3B;IAED;;;OAGG;IACH,IAAI,EAAE;QACJ,mCAAmC;QACnC,mBAAmB,EAAE,IAAI;QACzB,iCAAiC;QACjC,eAAe,EAAE,IAAI;QACrB,iCAAiC;QACjC,cAAc,EAAE,IAAI;QACpB,+BAA+B;QAC/B,aAAa,EAAE,IAAI;QACnB,8BAA8B;QAC9B,uBAAuB,EAAE,IAAI;QAC7B,6BAA6B;QAC7B,sBAAsB,EAAE,IAAI;QAC5B,+CAA+C;QAC/C,kBAAkB,EAAE,IAAI;QACxB,2CAA2C;QAC3C,kBAAkB,EAAE,IAAI;QACxB,sCAAsC;QACtC,iBAAiB,EAAE,IAAI;QACvB,wCAAwC;QACxC,sBAAsB,EAAE,IAAI;QAC5B,2BAA2B;QAC3B,qBAAqB,EAAE,IAAI;QAC3B,8BAA8B;QAC9B,wBAAwB,EAAE,IAAI;QAC9B,yBAAyB;QACzB,qBAAqB,EAAE,IAAI;QAC3B,oCAAoC;QACpC,qBAAqB,EAAE,IAAI;QAC3B,sCAAsC;QACtC,0BAA0B,EAAE,IAAI;KACjC;IAED;;;OAGG;IACH,KAAK,EAAE;QACL,+BAA+B;QAC/B,SAAS,EAAE,IAAI;QACf,6BAA6B;QAC7B,aAAa,EAAE,IAAI;QACnB,+BAA+B;QAC/B,wBAAwB,EAAE,IAAI;KAC/B;IAED;;;OAGG;IACH,QAAQ,EAAE;QACR,iCAAiC;QACjC,SAAS,EAAE,IAAI;QACf,+BAA+B;QAC/B,eAAe,EAAE,IAAI;QACrB,qCAAqC;QACrC,QAAQ,EAAE,IAAI;QACd,8BAA8B;QAC9B,cAAc,EAAE,IAAI;KACrB;IAED;;;OAGG;IACH,UAAU,EAAE;QACV,+BAA+B;QAC/B,OAAO,EAAE,IAAI;QACb,6BAA6B;QAC7B,cAAc,EAAE,IAAI;QACpB,qBAAqB;QACrB,cAAc,EAAE,IAAI;QACpB,+BAA+B;QAC/B,iBAAiB,EAAE,IAAI;QACvB,gDAAgD;QAChD,kBAAkB,EAAE,IAAI;KACzB;IAED;;;OAGG;IACH,MAAM,EAAE;QACN,oCAAoC;QACpC,6BAA6B,EAAE,IAAI;QACnC,kCAAkC;QAClC,2BAA2B,EAAE,IAAI;QACjC,wCAAwC;QACxC,0BAA0B,EAAE,IAAI;KACjC;IAED;;;OAGG;IACH,IAAI,EAAE;QACJ,+CAA+C;QAC/C,mBAAmB,EAAE,IAAI;QACzB,qCAAqC;QACrC,oBAAoB,EAAE,IAAI;KAC3B;IAED;;;OAGG;IACH,MAAM,EAAE;QACN,4BAA4B;QAC5B,cAAc,EAAE,IAAI;QAEpB,mCAAmC;QACnC,kCAAkC;QAClC,mBAAmB,EAAE,IAAI;QACzB,oCAAoC;QACpC,sBAAsB,EAAE,IAAI;QAC5B,gCAAgC;QAChC,yBAAyB,EAAE,IAAI;QAC/B,0CAA0C;QAC1C,0BAA0B,EAAE,IAAI;QAChC,kCAAkC;QAClC,2BAA2B,EAAE,IAAI;QACjC,+BAA+B;QAC/B,wBAAwB,EAAE,IAAI;QAC9B,4CAA4C;QAC5C,uBAAuB,EAAE,IAAI;
|
|
1
|
+
{"version":3,"file":"error-codes.js","sourceRoot":"","sources":["../../src/errors/error-codes.ts"],"names":[],"mappings":"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"}
|
package/dist/events/types.d.ts
CHANGED
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
* Augmentable event registry.
|
|
24
24
|
* Maps event name -> full context type.
|
|
25
25
|
*
|
|
26
|
-
* Framework's database module augments this with `DatabaseEvents
|
|
26
|
+
* Framework's database module augments this with `DatabaseEvents`.
|
|
27
27
|
* Users augment for custom events using `CustomEventContext<TData>`.
|
|
28
28
|
*
|
|
29
29
|
* @example
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-context.d.ts","sourceRoot":"","sources":["../src/execution-context.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,uBAAuB;IACtC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;CAC3C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-context.js","sourceRoot":"","sources":["../src/execution-context.ts"],"names":[],"mappings":""}
|
|
@@ -9,8 +9,7 @@ export declare const errors: {
|
|
|
9
9
|
readonly notFound: "Resource not found";
|
|
10
10
|
readonly unauthorized: "Unauthorized. Please sign in.";
|
|
11
11
|
readonly forbidden: "Access denied";
|
|
12
|
-
readonly
|
|
13
|
-
readonly routerNotConfigured: "RouterService.configure() must be called before handling requests";
|
|
12
|
+
readonly honoAppAlreadyConfigured: "HonoApp has already been configured and can only be configured once";
|
|
14
13
|
readonly routeNotFound: "Route not found: {method} {path}";
|
|
15
14
|
readonly routeAccessDenied: "Resource not found";
|
|
16
15
|
readonly controllerMethodNotFound: "Method {methodName} not found on {controllerName}";
|
|
@@ -22,6 +21,7 @@ export declare const errors: {
|
|
|
22
21
|
readonly requestScopeOperationNotAllowed: "{methodName}() cannot be called on this container scope. Check if you are calling it on the correct container (global vs request-scoped).";
|
|
23
22
|
readonly conditionalBindingFallback: "Conditional binding predicate returned false for token \"{token}\" but no fallback was provided and no existing registration exists.";
|
|
24
23
|
readonly configNotInitialized: "Configuration service has not been initialized";
|
|
24
|
+
readonly configModuleNotInitialized: "ConfigModule.forRoot() was not called before module initialization";
|
|
25
25
|
readonly moduleAlreadyRegistered: "Module {moduleName} is already registered";
|
|
26
26
|
readonly moduleDependencyNotFound: "Module dependency {dependency} not found for module {moduleName}";
|
|
27
27
|
readonly moduleCircularDependency: "Circular dependency detected: {cycle}";
|
|
@@ -11,8 +11,7 @@ export const errors = {
|
|
|
11
11
|
unauthorized: 'Unauthorized. Please sign in.',
|
|
12
12
|
forbidden: 'Access denied',
|
|
13
13
|
// Router errors
|
|
14
|
-
|
|
15
|
-
routerNotConfigured: 'RouterService.configure() must be called before handling requests',
|
|
14
|
+
honoAppAlreadyConfigured: 'HonoApp has already been configured and can only be configured once',
|
|
16
15
|
routeNotFound: 'Route not found: {method} {path}',
|
|
17
16
|
routeAccessDenied: 'Resource not found',
|
|
18
17
|
controllerMethodNotFound: 'Method {methodName} not found on {controllerName}',
|
|
@@ -26,6 +25,7 @@ export const errors = {
|
|
|
26
25
|
conditionalBindingFallback: 'Conditional binding predicate returned false for token "{token}" but no fallback was provided and no existing registration exists.',
|
|
27
26
|
// Configuration errors
|
|
28
27
|
configNotInitialized: 'Configuration service has not been initialized',
|
|
28
|
+
configModuleNotInitialized: 'ConfigModule.forRoot() was not called before module initialization',
|
|
29
29
|
// Module errors
|
|
30
30
|
moduleAlreadyRegistered: 'Module {moduleName} is already registered',
|
|
31
31
|
moduleDependencyNotFound: 'Module dependency {dependency} not found for module {moduleName}',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../src/i18n/messages/en/errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,iBAAiB;IACjB,aAAa,EAAE,4BAA4B;IAC3C,QAAQ,EAAE,oBAAoB;IAC9B,YAAY,EAAE,+BAA+B;IAC7C,SAAS,EAAE,eAAe;IAE1B,gBAAgB;IAChB,
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../src/i18n/messages/en/errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,iBAAiB;IACjB,aAAa,EAAE,4BAA4B;IAC3C,QAAQ,EAAE,oBAAoB;IAC9B,YAAY,EAAE,+BAA+B;IAC7C,SAAS,EAAE,eAAe;IAE1B,gBAAgB;IAChB,wBAAwB,EAAE,qEAAqE;IAC/F,aAAa,EAAE,kCAAkC;IACjD,iBAAiB,EAAE,oBAAoB;IACvC,wBAAwB,EAAE,mDAAmD;IAC7E,sBAAsB,EAAE,0DAA0D;IAElF,iBAAiB;IACjB,qBAAqB,EAAE,kCAAkC;IACzD,oBAAoB,EAAE,2BAA2B;IACjD,uBAAuB,EAAE,iDAAiD;IAC1E,8BAA8B,EAAE,4CAA4C;IAC5E,+BAA+B,EAAE,2IAA2I;IAC5K,0BAA0B,EAAE,oIAAoI;IAEhK,uBAAuB;IACvB,oBAAoB,EAAE,gDAAgD;IACtE,0BAA0B,EAAE,oEAAoE;IAEhG,gBAAgB;IAChB,uBAAuB,EAAE,2CAA2C;IACpE,wBAAwB,EAAE,kEAAkE;IAC5F,wBAAwB,EAAE,uCAAuC;IACjE,qBAAqB,EAAE,mDAAmD;IAE1E,kBAAkB;IAClB,eAAe,EAAE,yBAAyB;IAC1C,sBAAsB,EAAE,8BAA8B;IACtD,wBAAwB,EAAE,uBAAuB;IACjD,4BAA4B,EAAE,0BAA0B;IACxD,wBAAwB,EAAE,+BAA+B;IACzD,eAAe,EAAE,wBAAwB;IACzC,sBAAsB,EAAE,2BAA2B;IACnD,0BAA0B,EAAE,+BAA+B;IAC3D,2BAA2B,EAAE,kCAAkC;IAC/D,wBAAwB,EAAE,oCAAoC;IAC9D,qBAAqB,EAAE,oDAAoD;IAC3E,sBAAsB,EAAE,kDAAkD;IAC1E,oBAAoB,EAAE,4CAA4C;IAClE,qBAAqB,EAAE,kCAAkC;IAEzD,eAAe;IACf,oBAAoB,EAAE,oDAAoD;IAC1E,yBAAyB,EAAE,iFAAiF;IAE5G,cAAc;IACd,mBAAmB,EAAE,8DAA8D;IAEnF,cAAc;IACd,kBAAkB,EAAE,2EAA2E;IAC/F,kBAAkB,EAAE,0DAA0D;IAE9E,2BAA2B;IAC3B,gBAAgB,EAAE,0BAA0B;IAE5C,iBAAiB;IACjB,iBAAiB,EAAE,sCAAsC;IACzD,wBAAwB,EAAE,mDAAmD;IAE7E,eAAe;IACf,KAAK,EAAE;QACL,mBAAmB,EAAE,+EAA+E;QACpG,wBAAwB,EAAE,gEAAgE;QAC1F,eAAe,EAAE,+EAA+E;QAChG,oBAAoB,EAAE,wDAAwD;QAC9E,eAAe,EAAE,kBAAkB;QACnC,oBAAoB,EAAE,2EAA2E;KAClG;IAED,iBAAiB;IACjB,OAAO,EAAE;QACP,YAAY,EAAE,qCAAqC;QACnD,WAAW,EAAE,yCAAyC;QACtD,eAAe,EAAE,uCAAuC;QACxD,YAAY,EAAE,4DAA4D;QAC1E,yBAAyB,EAAE,gDAAgD;QAC3E,iBAAiB,EAAE,iCAAiC;QACpD,oBAAoB,EAAE,gDAAgD;QACtE,mBAAmB,EAAE,8CAA8C;KACpE;IAED,eAAe;IACf,KAAK,EAAE;QACL,SAAS,EAAE,qDAAqD;QAChE,SAAS,EAAE,gDAAgD;QAC3D,YAAY,EAAE,mDAAmD;QACjE,UAAU,EAAE,2BAA2B;KACxC;IAED,wBAAwB;IACxB,IAAI,EAAE;QACJ,aAAa,EAAE,gCAAgC;QAC/C,YAAY,EAAE,uCAAuC;QACrD,kBAAkB,EAAE,wCAAwC;QAC5D,YAAY,EAAE,gDAAgD;QAC9D,kBAAkB,EAAE,2BAA2B;QAC/C,eAAe,EAAE,kBAAkB;QACnC,YAAY,EAAE,uBAAuB;QACrC,cAAc,EAAE,iDAAiD;QACjE,gBAAgB,EAAE,oDAAoD;QACtE,gBAAgB,EAAE,kDAAkD;QACpE,eAAe,EAAE,iDAAiD;QAClE,oBAAoB,EAAE,2CAA2C;QACjE,kBAAkB,EAAE,kDAAkD;QACtE,qBAAqB,EAAE,6CAA6C;QACpE,kBAAkB,EAAE,+CAA+C;QACnE,kBAAkB,EAAE,sDAAsD;QAC1E,mBAAmB,EAAE,wDAAwD;QAC7E,mBAAmB,EAAE,uDAAuD;QAC5E,gBAAgB,EAAE,mCAAmC;QACrD,iBAAiB,EAAE,8BAA8B;QACjD,eAAe,EAAE,mBAAmB;QACpC,yBAAyB,EAAE,8BAA8B;QACzD,uBAAuB,EAAE,iCAAiC;QAC1D,sBAAsB,EAAE,iCAAiC;QACzD,oBAAoB,EAAE,8CAA8C;QACpE,YAAY,EAAE,8EAA8E;KAC7F;IAED,mBAAmB;IACnB,SAAS,EAAE;QACT,MAAM,EAAE,2CAA2C;QACnD,gBAAgB,EAAE,sFAAsF;QACxG,cAAc,EAAE,oDAAoD;QACpE,QAAQ,EAAE,qCAAqC;KAChD;CACO,CAAA"}
|