stratal 0.0.17 → 0.0.18
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/{base-email.provider-DypUAfWm.mjs → base-email.provider-Cuw4OAB0.mjs} +1 -1
- package/dist/{base-email.provider-DypUAfWm.mjs.map → base-email.provider-Cuw4OAB0.mjs.map} +1 -1
- package/dist/bin/cloudflare-workers-loader.mjs +33 -1
- package/dist/bin/cloudflare-workers-loader.mjs.map +1 -1
- package/dist/bin/quarry.mjs +182 -5
- package/dist/bin/quarry.mjs.map +1 -1
- package/dist/cache/index.d.mts +2 -2
- package/dist/cache/index.d.mts.map +1 -1
- package/dist/cache/index.mjs +3 -10
- package/dist/cache/index.mjs.map +1 -1
- package/dist/{colors-Y7WIFXs7.mjs → colors-BTAnQRGU.mjs} +1 -1
- package/dist/{colors-Y7WIFXs7.mjs.map → colors-BTAnQRGU.mjs.map} +1 -1
- package/dist/{command-TnkPYWta.d.mts → command-B1YuV-UZ.d.mts} +2 -2
- package/dist/{command-TnkPYWta.d.mts.map → command-B1YuV-UZ.d.mts.map} +1 -1
- package/dist/{command-B1CPgsrU.mjs → command-DjGqCYHv.mjs} +3 -3
- package/dist/command-DjGqCYHv.mjs.map +1 -0
- package/dist/config/index.d.mts +2 -2
- package/dist/config/index.mjs +12 -19
- package/dist/config/index.mjs.map +1 -1
- package/dist/{consumer-registry-Bymm6ff4.d.mts → consumer-registry-BkuHXR_u.d.mts} +1 -1
- package/dist/{consumer-registry-Bymm6ff4.d.mts.map → consumer-registry-BkuHXR_u.d.mts.map} +1 -1
- package/dist/cron/index.d.mts +2 -2
- package/dist/cron/index.d.mts.map +1 -1
- package/dist/cron/index.mjs +1 -3
- package/dist/{cron-manager-CFBamKKk.mjs → cron-manager-1KnZvojs.mjs} +3 -3
- package/dist/{cron-manager-CFBamKKk.mjs.map → cron-manager-1KnZvojs.mjs.map} +1 -1
- package/dist/{cron-manager-D7imGwUT.d.mts → cron-manager-BnEZquBL.d.mts} +2 -2
- package/dist/{cron-manager-D7imGwUT.d.mts.map → cron-manager-BnEZquBL.d.mts.map} +1 -1
- package/dist/di/index.d.mts +2 -2
- package/dist/di/index.mjs +3 -3
- package/dist/email/index.d.mts +3 -3
- package/dist/email/index.mjs +8 -16
- package/dist/email/index.mjs.map +1 -1
- package/dist/{en-DaewN8hc.mjs → en-3QnZwP-u.mjs} +10 -1
- package/dist/en-3QnZwP-u.mjs.map +1 -0
- package/dist/errors/index.d.mts +2 -2
- package/dist/errors/index.mjs +2 -3
- package/dist/errors--RBIvDXr.mjs +1560 -0
- package/dist/errors--RBIvDXr.mjs.map +1 -0
- package/dist/{errors-DuAR5Wke.mjs → errors-B7hCnXgB.mjs} +2 -2
- package/dist/{errors-DuAR5Wke.mjs.map → errors-B7hCnXgB.mjs.map} +1 -1
- package/dist/events/index.d.mts +2 -2
- package/dist/events/index.mjs +1 -2
- package/dist/{events-CvUSgEuN.mjs → events-UTJliZhl.mjs} +2 -2
- package/dist/{events-CvUSgEuN.mjs.map → events-UTJliZhl.mjs.map} +1 -1
- package/dist/{gateway-context-CNOLkLUC.mjs → gateway-context-BdBFoQd8.mjs} +66 -10
- package/dist/gateway-context-BdBFoQd8.mjs.map +1 -0
- package/dist/guards/index.d.mts +3 -3
- package/dist/guards/index.d.mts.map +1 -1
- package/dist/guards/index.mjs +1 -1
- package/dist/{guards-DUk_Kzst.mjs → guards-MtDgcHnF.mjs} +1 -1
- package/dist/{guards-DUk_Kzst.mjs.map → guards-MtDgcHnF.mjs.map} +1 -1
- package/dist/i18n/index.d.mts +3 -3
- package/dist/i18n/index.mjs +3 -16
- package/dist/i18n/messages/en/index.d.mts +1 -1
- package/dist/i18n/messages/en/index.mjs +1 -1
- package/dist/i18n/utils/index.d.mts +30 -0
- package/dist/i18n/utils/index.d.mts.map +1 -0
- package/dist/i18n/utils/index.mjs +2 -0
- package/dist/i18n/validation/index.d.mts +1 -1
- package/dist/i18n/validation/index.mjs +1 -1
- package/dist/i18n.module-BpLLLCTg.mjs +2462 -0
- package/dist/i18n.module-BpLLLCTg.mjs.map +1 -0
- package/dist/{index-D_w_Rmtd.d.mts → index-BDh9J2KD.d.mts} +10 -1
- package/dist/{index-D_w_Rmtd.d.mts.map → index-BDh9J2KD.d.mts.map} +1 -1
- package/dist/{index-Dp6A5ywM.d.mts → index-BR23zDMy.d.mts} +1 -1
- package/dist/{index-Dp6A5ywM.d.mts.map → index-BR23zDMy.d.mts.map} +1 -1
- package/dist/index-BrmS34sa.d.mts +4287 -0
- package/dist/index-BrmS34sa.d.mts.map +1 -0
- package/dist/{index-DGRe6Yoa.d.mts → index-DPxmo6AY.d.mts} +4 -4
- package/dist/{index-DGRe6Yoa.d.mts.map → index-DPxmo6AY.d.mts.map} +1 -1
- package/dist/{index-NGxg-KP_.d.mts → index-Dfpd_ypO.d.mts} +36 -7
- package/dist/index-Dfpd_ypO.d.mts.map +1 -0
- package/dist/index.d.mts +4 -3
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +1 -20
- package/dist/{is-command-DJVI6wEJ.mjs → is-command-PvULqiTa.mjs} +2 -2
- package/dist/{is-command-DJVI6wEJ.mjs.map → is-command-PvULqiTa.mjs.map} +1 -1
- package/dist/{is-seeder-D5MIEcdz.mjs → is-seeder-BN9Ej1r7.mjs} +1 -1
- package/dist/{is-seeder-D5MIEcdz.mjs.map → is-seeder-BN9Ej1r7.mjs.map} +1 -1
- package/dist/logger/index.d.mts +1 -1
- package/dist/logger/index.mjs +1 -1
- package/dist/{logger-CGT91VY6.mjs → logger-c0ftIK4G.mjs} +29 -29
- package/dist/logger-c0ftIK4G.mjs.map +1 -0
- package/dist/module/index.d.mts +3 -4
- package/dist/module/index.d.mts.map +1 -1
- package/dist/module/index.mjs +1 -10
- package/dist/module-C3YZ-kZN.mjs +719 -0
- package/dist/module-C3YZ-kZN.mjs.map +1 -0
- package/dist/openapi/index.d.mts +3 -3
- package/dist/openapi/index.mjs +2 -15
- package/dist/{openapi-tools.service-B3TxYKoQ.mjs → openapi-tools.service-B77QXD56.mjs} +1 -1
- package/dist/{openapi-tools.service-B3TxYKoQ.mjs.map → openapi-tools.service-B77QXD56.mjs.map} +1 -1
- package/dist/{openapi.service-DGnX3Fc4.d.mts → openapi.service-6yj0BUY4.d.mts} +9 -17
- package/dist/openapi.service-6yj0BUY4.d.mts.map +1 -0
- package/dist/quarry/index.d.mts +25 -11
- package/dist/quarry/index.d.mts.map +1 -1
- package/dist/quarry/index.mjs +4 -8
- package/dist/{quarry-registry-B2rkO-JS.mjs → quarry-registry-CQCIlYTO.mjs} +37 -34
- package/dist/quarry-registry-CQCIlYTO.mjs.map +1 -0
- package/dist/queue/index.d.mts +2 -2
- package/dist/queue/index.mjs +3 -13
- package/dist/queue/index.mjs.map +1 -1
- package/dist/{queue.module-BtI8f4Jo.mjs → queue.module-DIjD6nr-.mjs} +39 -42
- package/dist/queue.module-DIjD6nr-.mjs.map +1 -0
- package/dist/{resend.provider-bXMEkdRJ.mjs → resend.provider-Bvw36rQy.mjs} +2 -4
- package/dist/{resend.provider-bXMEkdRJ.mjs.map → resend.provider-Bvw36rQy.mjs.map} +1 -1
- package/dist/router/index.d.mts +2 -2
- package/dist/router/index.mjs +5 -16
- package/dist/{s3-storage.provider-CttzNnDR.mjs → s3-storage.provider-BAhHDMI3.mjs} +13 -5
- package/dist/s3-storage.provider-BAhHDMI3.mjs.map +1 -0
- package/dist/seeder/index.d.mts +3 -4
- package/dist/seeder/index.d.mts.map +1 -1
- package/dist/seeder/index.mjs +2 -6
- package/dist/{seeder-R7RXJC35.mjs → seeder-D7VXULXB.mjs} +5 -5
- package/dist/{seeder-R7RXJC35.mjs.map → seeder-D7VXULXB.mjs.map} +1 -1
- package/dist/setup-BRIN-iYT.mjs +37 -0
- package/dist/setup-BRIN-iYT.mjs.map +1 -0
- package/dist/{smtp.provider-DrbHQztF.mjs → smtp.provider-CAwpvzvD.mjs} +2 -4
- package/dist/{smtp.provider-DrbHQztF.mjs.map → smtp.provider-CAwpvzvD.mjs.map} +1 -1
- package/dist/storage/index.d.mts +2 -2
- package/dist/storage/index.d.mts.map +1 -1
- package/dist/storage/index.mjs +2 -13
- package/dist/storage/providers/index.d.mts +2 -1
- package/dist/storage/providers/index.d.mts.map +1 -1
- package/dist/storage/providers/index.mjs +1 -4
- package/dist/{storage-CZKHOhci.mjs → storage-CJ-QOwNv.mjs} +8 -9
- package/dist/storage-CJ-QOwNv.mjs.map +1 -0
- package/dist/{storage-provider.interface-0IqcdhBf.d.mts → storage-provider.interface-YRtyYBxV.d.mts} +8 -2
- package/dist/storage-provider.interface-YRtyYBxV.d.mts.map +1 -0
- package/dist/stratal-B7G4i9-N.mjs +502 -0
- package/dist/stratal-B7G4i9-N.mjs.map +1 -0
- package/dist/{types-DahElfUw.d.mts → types-CN0zONAZ.d.mts} +2 -2
- package/dist/types-CN0zONAZ.d.mts.map +1 -0
- package/dist/{usage-generator-CVIsENuE.mjs → usage-generator-Cl1HPlUp.mjs} +2 -2
- package/dist/{usage-generator-CVIsENuE.mjs.map → usage-generator-Cl1HPlUp.mjs.map} +1 -1
- package/dist/{validation-DQTC259A.mjs → validation-B4bePOa_.mjs} +2 -2
- package/dist/{validation-DQTC259A.mjs.map → validation-B4bePOa_.mjs.map} +1 -1
- package/dist/websocket/index.d.mts +2 -2
- package/dist/websocket/index.d.mts.map +1 -1
- package/dist/websocket/index.mjs +1 -4
- package/dist/workers/index.d.mts +1 -1
- package/dist/workers/index.d.mts.map +1 -1
- package/dist/workers/index.mjs +2 -20
- package/dist/workers/index.mjs.map +1 -1
- package/package.json +34 -31
- package/dist/application-DfPtIzxF.d.mts +0 -177
- package/dist/application-DfPtIzxF.d.mts.map +0 -1
- package/dist/command-B1CPgsrU.mjs.map +0 -1
- package/dist/en-DaewN8hc.mjs.map +0 -1
- package/dist/errors-DSKapqD8.mjs +0 -707
- package/dist/errors-DSKapqD8.mjs.map +0 -1
- package/dist/gateway-context-CNOLkLUC.mjs.map +0 -1
- package/dist/i18n.module-Dn9SrFdS.mjs +0 -1841
- package/dist/i18n.module-Dn9SrFdS.mjs.map +0 -1
- package/dist/index-BFCxSp_f.d.mts +0 -2625
- package/dist/index-BFCxSp_f.d.mts.map +0 -1
- package/dist/index-NGxg-KP_.d.mts.map +0 -1
- package/dist/logger-CGT91VY6.mjs.map +0 -1
- package/dist/middleware/index.d.mts +0 -2
- package/dist/middleware/index.mjs +0 -5
- package/dist/middleware-Bl-b5pkt.mjs +0 -362
- package/dist/middleware-Bl-b5pkt.mjs.map +0 -1
- package/dist/module-registry-CmjBX6ol.d.mts +0 -121
- package/dist/module-registry-CmjBX6ol.d.mts.map +0 -1
- package/dist/module-tUtyVJ5E.mjs +0 -371
- package/dist/module-tUtyVJ5E.mjs.map +0 -1
- package/dist/openapi.service-DGnX3Fc4.d.mts.map +0 -1
- package/dist/quarry-registry-B2rkO-JS.mjs.map +0 -1
- package/dist/queue.module-BtI8f4Jo.mjs.map +0 -1
- package/dist/router-context-D9R1v2Ac.mjs +0 -267
- package/dist/router-context-D9R1v2Ac.mjs.map +0 -1
- package/dist/s3-storage.provider-CttzNnDR.mjs.map +0 -1
- package/dist/storage-CZKHOhci.mjs.map +0 -1
- package/dist/storage-provider.interface-0IqcdhBf.d.mts.map +0 -1
- package/dist/stratal-D5smIU1y.mjs +0 -315
- package/dist/stratal-D5smIU1y.mjs.map +0 -1
- package/dist/types-DahElfUw.d.mts.map +0 -1
|
@@ -1,315 +0,0 @@
|
|
|
1
|
-
import { S as ApplicationError, c as Container, r as GlobalErrorHandler, s as Scope, t as StratalNotInitializedError } from "./errors-DSKapqD8.mjs";
|
|
2
|
-
import { g as DI_TOKENS, i as LoggerService, l as LogLevel, n as PrettyFormatter, r as JsonFormatter, t as ConsoleTransport, u as LOGGER_TOKENS } from "./logger-CGT91VY6.mjs";
|
|
3
|
-
import { t as ModuleRegistry } from "./module-tUtyVJ5E.mjs";
|
|
4
|
-
import { r as getListenerHandlers, t as EventRegistry } from "./events-CvUSgEuN.mjs";
|
|
5
|
-
import { CacheModule } from "./cache/index.mjs";
|
|
6
|
-
import { t as CronManager } from "./cron-manager-CFBamKKk.mjs";
|
|
7
|
-
import { g as OpenAPIModule, n as HonoApp, t as I18nModule } from "./i18n.module-Dn9SrFdS.mjs";
|
|
8
|
-
import { a as QueueListCommand, c as HelpCommand, d as ApiCommand, i as RouteListCommand, o as McpToolsCommand, r as ScheduleListCommand, s as McpServeCommand, t as QuarryRegistry, u as EventListCommand } from "./quarry-registry-B2rkO-JS.mjs";
|
|
9
|
-
import { t as QueueModule } from "./queue.module-BtI8f4Jo.mjs";
|
|
10
|
-
import { i as SeederRegistry, n as DbSeedListCommand, r as SEEDER_TOKENS, t as DbSeedCommand } from "./seeder-R7RXJC35.mjs";
|
|
11
|
-
import { container, injectable } from "tsyringe";
|
|
12
|
-
import "reflect-metadata";
|
|
13
|
-
//#region src/application.ts
|
|
14
|
-
/**
|
|
15
|
-
* Application
|
|
16
|
-
*
|
|
17
|
-
* Main application class managing the two-tier container hierarchy:
|
|
18
|
-
* - Global Container: All services (singletons via tsyringe native)
|
|
19
|
-
* - Request Container: Child of global, context-enriched instances per request
|
|
20
|
-
*
|
|
21
|
-
* @example
|
|
22
|
-
* ```typescript
|
|
23
|
-
* const app = new Application({ module: AppModule, env, ctx })
|
|
24
|
-
* await app.initialize()
|
|
25
|
-
*
|
|
26
|
-
* // Access container via getter
|
|
27
|
-
* const service = app.container.resolve(MY_TOKEN)
|
|
28
|
-
*
|
|
29
|
-
* // Handle HTTP request (via HonoApp)
|
|
30
|
-
* // Handle queue batch
|
|
31
|
-
* await app.handleQueue(batch, 'my-queue')
|
|
32
|
-
* ```
|
|
33
|
-
*/
|
|
34
|
-
var Application = class {
|
|
35
|
-
/**
|
|
36
|
-
* Unified Container - manages all DI operations
|
|
37
|
-
*/
|
|
38
|
-
_container;
|
|
39
|
-
honoApp;
|
|
40
|
-
moduleRegistry;
|
|
41
|
-
consumerRegistry;
|
|
42
|
-
cronManager;
|
|
43
|
-
quarry;
|
|
44
|
-
initialized = false;
|
|
45
|
-
env;
|
|
46
|
-
appConfig;
|
|
47
|
-
constructor({ env, ctx, ...config }) {
|
|
48
|
-
this.env = env;
|
|
49
|
-
this.appConfig = config;
|
|
50
|
-
ApplicationError.captureStackTraces = env.ENVIRONMENT !== "production";
|
|
51
|
-
this._container = new Container({ container: container.createChildContainer() });
|
|
52
|
-
this._container.registerValue(DI_TOKENS.Application, this);
|
|
53
|
-
this._container.registerValue(DI_TOKENS.CloudflareEnv, env);
|
|
54
|
-
this._container.registerValue(DI_TOKENS.ExecutionContext, ctx);
|
|
55
|
-
this.registerLoggerService();
|
|
56
|
-
this.registerCoreServices();
|
|
57
|
-
const logger = this._container.resolve(LOGGER_TOKENS.LoggerService);
|
|
58
|
-
this.moduleRegistry = new ModuleRegistry(this._container, logger);
|
|
59
|
-
this._container.registerValue(DI_TOKENS.ModuleRegistry, this.moduleRegistry);
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Get the Container instance
|
|
63
|
-
*/
|
|
64
|
-
get container() {
|
|
65
|
-
return this._container;
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Get the HonoApp instance
|
|
69
|
-
*/
|
|
70
|
-
get hono() {
|
|
71
|
-
return this.honoApp;
|
|
72
|
-
}
|
|
73
|
-
async initialize() {
|
|
74
|
-
if (this.initialized) return;
|
|
75
|
-
this.moduleRegistry.registerAll([
|
|
76
|
-
I18nModule,
|
|
77
|
-
OpenAPIModule,
|
|
78
|
-
QueueModule,
|
|
79
|
-
CacheModule
|
|
80
|
-
]);
|
|
81
|
-
this.moduleRegistry.register(this.appConfig.module);
|
|
82
|
-
await this.moduleRegistry.initialize();
|
|
83
|
-
this.consumerRegistry = this._container.resolve(DI_TOKENS.ConsumerRegistry);
|
|
84
|
-
this.cronManager = this._container.resolve(DI_TOKENS.Cron);
|
|
85
|
-
this.quarry = this._container.resolve(DI_TOKENS.Quarry);
|
|
86
|
-
const logger = this._container.resolve(LOGGER_TOKENS.LoggerService);
|
|
87
|
-
this.honoApp = new HonoApp(this._container, logger);
|
|
88
|
-
const middlewareConfigs = this.moduleRegistry.getAllMiddlewareConfigs();
|
|
89
|
-
const controllers = this.moduleRegistry.getAllControllers();
|
|
90
|
-
await this.honoApp.configure(middlewareConfigs, controllers, this.appConfig.versioning);
|
|
91
|
-
this.registerQueueConsumers();
|
|
92
|
-
this.registerCronJobs();
|
|
93
|
-
this.registerEventListeners();
|
|
94
|
-
this.registerSeeders();
|
|
95
|
-
this.registerCommands();
|
|
96
|
-
this.initialized = true;
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Resolve a service from the container
|
|
100
|
-
*/
|
|
101
|
-
resolve(token) {
|
|
102
|
-
try {
|
|
103
|
-
return this._container.resolve(token);
|
|
104
|
-
} catch (error) {
|
|
105
|
-
throw this._container.resolve(DI_TOKENS.ErrorHandler).handle(error);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Handle queue batch processing
|
|
110
|
-
*/
|
|
111
|
-
async handleQueue(batch, queueName) {
|
|
112
|
-
const locale = (batch.messages[0]?.body)?.metadata?.locale ?? "en";
|
|
113
|
-
const mockRouterContext = this.createMockRouterContext(locale);
|
|
114
|
-
await this._container.runInRequestScope(mockRouterContext, async (requestContainer) => {
|
|
115
|
-
try {
|
|
116
|
-
await requestContainer.resolve(DI_TOKENS.Queue).processBatch(queueName, batch);
|
|
117
|
-
} catch (error) {
|
|
118
|
-
requestContainer.resolve(DI_TOKENS.ErrorHandler).handle(error);
|
|
119
|
-
throw error;
|
|
120
|
-
}
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Handle scheduled cron trigger
|
|
125
|
-
*/
|
|
126
|
-
async handleScheduled(controller) {
|
|
127
|
-
const mockRouterContext = this.createMockRouterContext("en");
|
|
128
|
-
await this._container.runInRequestScope(mockRouterContext, async (requestContainer) => {
|
|
129
|
-
try {
|
|
130
|
-
await this.cronManager.executeScheduled(controller);
|
|
131
|
-
} catch (error) {
|
|
132
|
-
requestContainer.resolve(DI_TOKENS.ErrorHandler).handle(error);
|
|
133
|
-
throw error;
|
|
134
|
-
}
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Create mock RouterContext for queue/cron/seeder processing
|
|
139
|
-
*/
|
|
140
|
-
createMockRouterContext(locale = "en") {
|
|
141
|
-
return {
|
|
142
|
-
getLocale: () => locale,
|
|
143
|
-
setLocale: () => {},
|
|
144
|
-
getContainer: () => this._container
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
async shutdown() {
|
|
148
|
-
if (!this.initialized) return;
|
|
149
|
-
this.initialized = false;
|
|
150
|
-
await this.moduleRegistry.shutdown();
|
|
151
|
-
this._container.resolve(LOGGER_TOKENS.LoggerService).info("Disposing container...");
|
|
152
|
-
await this._container.dispose();
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Execute a command by name in a request-scoped container.
|
|
156
|
-
*/
|
|
157
|
-
async handleCommand(name, input) {
|
|
158
|
-
const mockContext = this.createMockRouterContext("en");
|
|
159
|
-
return this._container.runInRequestScope(mockContext, async () => {
|
|
160
|
-
return this.quarry.call(name, input);
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
registerCommands() {
|
|
164
|
-
const builtinCommands = [
|
|
165
|
-
HelpCommand,
|
|
166
|
-
DbSeedCommand,
|
|
167
|
-
DbSeedListCommand,
|
|
168
|
-
RouteListCommand,
|
|
169
|
-
EventListCommand,
|
|
170
|
-
ScheduleListCommand,
|
|
171
|
-
QueueListCommand,
|
|
172
|
-
McpServeCommand,
|
|
173
|
-
McpToolsCommand,
|
|
174
|
-
ApiCommand
|
|
175
|
-
];
|
|
176
|
-
for (const Cmd of builtinCommands) {
|
|
177
|
-
injectable()(Cmd);
|
|
178
|
-
this._container.register(Cmd, Cmd, Scope.Singleton);
|
|
179
|
-
this.quarry.register(Cmd);
|
|
180
|
-
}
|
|
181
|
-
const commands = this.moduleRegistry.getAllCommands();
|
|
182
|
-
if (commands.length === 0) return;
|
|
183
|
-
for (const CommandClass of commands) this.quarry.register(CommandClass);
|
|
184
|
-
}
|
|
185
|
-
registerSeeders() {
|
|
186
|
-
const seeders = this.moduleRegistry.getAllSeeders();
|
|
187
|
-
if (seeders.length === 0) return;
|
|
188
|
-
const registry = this._container.resolve(SEEDER_TOKENS.SeederRegistry);
|
|
189
|
-
for (const SeederClass of seeders) registry.register(SeederClass);
|
|
190
|
-
}
|
|
191
|
-
registerQueueConsumers() {
|
|
192
|
-
for (const ConsumerClass of this.moduleRegistry.getAllConsumers()) {
|
|
193
|
-
const consumer = this._container.resolve(ConsumerClass);
|
|
194
|
-
this.consumerRegistry.register(consumer);
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
registerCronJobs() {
|
|
198
|
-
for (const JobClass of this.moduleRegistry.getAllJobs()) {
|
|
199
|
-
const job = this._container.resolve(JobClass);
|
|
200
|
-
this.cronManager.registerJob(job);
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* Auto-wire `@Listener()` classes with the EventRegistry.
|
|
205
|
-
*/
|
|
206
|
-
registerEventListeners() {
|
|
207
|
-
const listeners = this.moduleRegistry.getAllListeners();
|
|
208
|
-
if (listeners.length === 0) return;
|
|
209
|
-
const eventRegistry = this._container.resolve(DI_TOKENS.EventRegistry);
|
|
210
|
-
for (const ListenerClass of listeners) {
|
|
211
|
-
const instance = this._container.resolve(ListenerClass);
|
|
212
|
-
const handlers = getListenerHandlers(ListenerClass);
|
|
213
|
-
for (const { methodName, event, options } of handlers) eventRegistry.on(event, instance[methodName].bind(instance), options);
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
/**
|
|
217
|
-
* Register LoggerService and dependencies
|
|
218
|
-
*/
|
|
219
|
-
registerLoggerService() {
|
|
220
|
-
const logLevel = this.appConfig.logging?.level ?? LogLevel.INFO;
|
|
221
|
-
const formatter = this.appConfig.logging?.formatter ?? "json";
|
|
222
|
-
this._container.registerValue(LOGGER_TOKENS.LogLevelOptions, logLevel);
|
|
223
|
-
this._container.when(() => formatter === "pretty").use(LOGGER_TOKENS.Formatter).give(PrettyFormatter).otherwise(JsonFormatter);
|
|
224
|
-
this._container.registerSingleton(LOGGER_TOKENS.ConsoleTransport, ConsoleTransport);
|
|
225
|
-
this._container.registerFactory(LOGGER_TOKENS.Transports, (c) => [c.resolve(LOGGER_TOKENS.ConsoleTransport)]);
|
|
226
|
-
this._container.registerSingleton(LOGGER_TOKENS.LoggerService, LoggerService);
|
|
227
|
-
}
|
|
228
|
-
/**
|
|
229
|
-
* Register core services with explicit scope
|
|
230
|
-
*/
|
|
231
|
-
registerCoreServices() {
|
|
232
|
-
this._container.registerSingleton(DI_TOKENS.Cron, CronManager);
|
|
233
|
-
this._container.register(DI_TOKENS.ErrorHandler, GlobalErrorHandler);
|
|
234
|
-
this._container.registerSingleton(DI_TOKENS.EventRegistry, EventRegistry);
|
|
235
|
-
this._container.registerSingleton(DI_TOKENS.Quarry, QuarryRegistry);
|
|
236
|
-
this._container.registerValue(SEEDER_TOKENS.SeederRegistry, new SeederRegistry(this));
|
|
237
|
-
}
|
|
238
|
-
};
|
|
239
|
-
//#endregion
|
|
240
|
-
//#region src/stratal.ts
|
|
241
|
-
/**
|
|
242
|
-
* Stratal — Hono-style entry point for Cloudflare Workers.
|
|
243
|
-
*
|
|
244
|
-
* Eagerly bootstraps the Application at construction time, dynamically
|
|
245
|
-
* importing `cloudflare:workers` for env and waitUntil.
|
|
246
|
-
*
|
|
247
|
-
* @example
|
|
248
|
-
* ```typescript
|
|
249
|
-
* import { Stratal } from 'stratal'
|
|
250
|
-
* import { AppModule } from './app.module'
|
|
251
|
-
*
|
|
252
|
-
* export default new Stratal({ module: AppModule })
|
|
253
|
-
* ```
|
|
254
|
-
*/
|
|
255
|
-
var Stratal = class Stratal {
|
|
256
|
-
app = null;
|
|
257
|
-
initPromise;
|
|
258
|
-
static _application = null;
|
|
259
|
-
constructor(config) {
|
|
260
|
-
this.fetch = this.fetch.bind(this);
|
|
261
|
-
this.queue = this.queue.bind(this);
|
|
262
|
-
this.scheduled = this.scheduled.bind(this);
|
|
263
|
-
this.initPromise = this.prepareApp(config);
|
|
264
|
-
Stratal._application = this.initPromise;
|
|
265
|
-
}
|
|
266
|
-
async fetch(request, env, ctx) {
|
|
267
|
-
return (await this.ensureReady()).hono.fetch(request, env, ctx);
|
|
268
|
-
}
|
|
269
|
-
async queue(batch) {
|
|
270
|
-
return (await this.ensureReady()).handleQueue(batch, batch.queue);
|
|
271
|
-
}
|
|
272
|
-
async scheduled(controller) {
|
|
273
|
-
return (await this.ensureReady()).handleScheduled(controller);
|
|
274
|
-
}
|
|
275
|
-
get hono() {
|
|
276
|
-
return this.initPromise.then((app) => app.hono);
|
|
277
|
-
}
|
|
278
|
-
async shutdown() {
|
|
279
|
-
try {
|
|
280
|
-
this.app = await this.initPromise;
|
|
281
|
-
} catch {}
|
|
282
|
-
if (this.app) {
|
|
283
|
-
await this.app.shutdown();
|
|
284
|
-
this.app = null;
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
/**
|
|
288
|
-
* @internal
|
|
289
|
-
* Resolves the Application instance from the static singleton.
|
|
290
|
-
* Used by worker base classes (DurableObject, Workflow, WorkerEntrypoint)
|
|
291
|
-
* to access the DI container without going through Cloudflare RPC.
|
|
292
|
-
*/
|
|
293
|
-
static resolveApplication() {
|
|
294
|
-
if (!Stratal._application) throw new StratalNotInitializedError();
|
|
295
|
-
return Stratal._application;
|
|
296
|
-
}
|
|
297
|
-
async ensureReady() {
|
|
298
|
-
this.app ??= await this.initPromise;
|
|
299
|
-
return this.app;
|
|
300
|
-
}
|
|
301
|
-
async prepareApp(config) {
|
|
302
|
-
const { env, waitUntil } = await import("cloudflare:workers");
|
|
303
|
-
const app = new Application({
|
|
304
|
-
...config,
|
|
305
|
-
env,
|
|
306
|
-
ctx: { waitUntil }
|
|
307
|
-
});
|
|
308
|
-
await app.initialize();
|
|
309
|
-
return app;
|
|
310
|
-
}
|
|
311
|
-
};
|
|
312
|
-
//#endregion
|
|
313
|
-
export { Application as n, Stratal as t };
|
|
314
|
-
|
|
315
|
-
//# sourceMappingURL=stratal-D5smIU1y.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stratal-D5smIU1y.mjs","names":["tsyringeRootContainer"],"sources":["../src/application.ts","../src/stratal.ts"],"sourcesContent":["import { injectable, container as tsyringeRootContainer } from 'tsyringe'\nimport { CacheModule } from './cache'\nimport type { CronJob } from './cron/cron-job'\nimport { CronManager } from './cron/cron-manager'\nimport { Container } from './di/container'\nimport { DI_TOKENS } from './di/tokens'\nimport { Scope } from './di/types'\nimport { type StratalEnv } from './env'\nimport { ApplicationError, GlobalErrorHandler } from './errors'\nimport type { EventHandler } from './events'\nimport { EventRegistry, getListenerHandlers } from './events'\nimport type { StratalExecutionContext } from './execution-context'\nimport { I18nModule } from './i18n/i18n.module'\nimport { ConsoleTransport, JsonFormatter, LOGGER_TOKENS, LoggerService, LogLevel, PrettyFormatter } from './logger'\nimport { ModuleRegistry } from './module/module-registry'\nimport type { DynamicModule, ModuleClass } from './module/types'\nimport { OpenAPIModule } from './openapi'\nimport type { Command } from './quarry/command'\nimport { ApiCommand } from './quarry/commands/api.command'\nimport { EventListCommand } from './quarry/commands/event-list.command'\nimport { HelpCommand } from './quarry/commands/help.command'\nimport { McpServeCommand } from './quarry/commands/mcp-serve.command'\nimport { McpToolsCommand } from './quarry/commands/mcp-tools.command'\nimport { QueueListCommand } from './quarry/commands/queue-list.command'\nimport { RouteListCommand } from './quarry/commands/route-list.command'\nimport { ScheduleListCommand } from './quarry/commands/schedule-list.command'\nimport { QuarryRegistry } from './quarry/quarry-registry'\nimport type { CommandInput, CommandResult } from './quarry/types'\nimport { type ConsumerRegistry } from './queue/consumer-registry'\nimport type { IQueueConsumer, QueueMessage } from './queue/queue-consumer'\nimport { type QueueManager } from './queue/queue-manager'\nimport { QueueModule } from './queue/queue.module'\nimport { type IController, type RouterContext } from './router'\nimport { HonoApp } from './router/hono-app'\nimport type { VersioningOptions } from './router/types'\nimport { DbSeedCommand, DbSeedListCommand, SEEDER_TOKENS, SeederRegistry, type Seeder } from './seeder'\nimport type { Constructor } from './types'\n\nexport interface ApplicationConfig {\n /** Root application module */\n module: ModuleClass | DynamicModule\n /** Logging configuration. Defaults: level=INFO, formatter='json' */\n logging?: {\n level?: LogLevel\n formatter?: 'json' | 'pretty'\n }\n /**\n * API versioning configuration.\n * When provided, enables URI-based versioning for controllers.\n */\n versioning?: VersioningOptions\n}\n\nexport interface ApplicationOptions extends ApplicationConfig {\n env: StratalEnv\n ctx: StratalExecutionContext\n}\n\n/**\n * Application\n *\n * Main application class managing the two-tier container hierarchy:\n * - Global Container: All services (singletons via tsyringe native)\n * - Request Container: Child of global, context-enriched instances per request\n *\n * @example\n * ```typescript\n * const app = new Application({ module: AppModule, env, ctx })\n * await app.initialize()\n *\n * // Access container via getter\n * const service = app.container.resolve(MY_TOKEN)\n *\n * // Handle HTTP request (via HonoApp)\n * // Handle queue batch\n * await app.handleQueue(batch, 'my-queue')\n * ```\n */\nexport class Application {\n /**\n * Unified Container - manages all DI operations\n */\n private _container: Container\n\n private honoApp!: HonoApp\n private moduleRegistry: ModuleRegistry\n private consumerRegistry!: ConsumerRegistry\n private cronManager!: CronManager\n private quarry!: QuarryRegistry\n private initialized = false\n\n readonly env: StratalEnv\n private readonly appConfig: ApplicationConfig\n\n constructor({ env, ctx, ...config }: ApplicationOptions) {\n this.env = env\n this.appConfig = config\n\n ApplicationError.captureStackTraces = env.ENVIRONMENT !== 'production'\n\n // Create unified Container with explicit child container\n this._container = new Container({\n container: tsyringeRootContainer.createChildContainer()\n })\n\n // Register globally — env and ctx always available\n this._container.registerValue(DI_TOKENS.Application, this)\n this._container.registerValue(DI_TOKENS.CloudflareEnv, env)\n this._container.registerValue(DI_TOKENS.ExecutionContext, ctx)\n\n // Register core infrastructure inline\n this.registerLoggerService()\n this.registerCoreServices()\n\n // Create ModuleRegistry with our Container\n const logger = this._container.resolve<LoggerService>(LOGGER_TOKENS.LoggerService)\n this.moduleRegistry = new ModuleRegistry(this._container, logger)\n\n // Register ModuleRegistry in container so modules can access it in onInitialize\n this._container.registerValue(DI_TOKENS.ModuleRegistry, this.moduleRegistry)\n }\n\n /**\n * Get the Container instance\n */\n get container(): Container {\n return this._container\n }\n\n /**\n * Get the HonoApp instance\n */\n get hono(): HonoApp {\n return this.honoApp\n }\n\n async initialize(): Promise<void> {\n if (this.initialized) {\n return\n }\n\n // Phase 1: Register core infrastructure modules (internal)\n this.moduleRegistry.registerAll([\n I18nModule,\n OpenAPIModule,\n QueueModule,\n CacheModule,\n ])\n\n // Phase 2: Register user's root module (traverses imports)\n this.moduleRegistry.register(this.appConfig.module)\n\n // Phase 3: Initialize all modules\n await this.moduleRegistry.initialize()\n\n // Phase 4: Resolve managers from container\n this.consumerRegistry = this._container.resolve<ConsumerRegistry>(DI_TOKENS.ConsumerRegistry)\n this.cronManager = this._container.resolve<CronManager>(DI_TOKENS.Cron)\n this.quarry = this._container.resolve<QuarryRegistry>(DI_TOKENS.Quarry)\n\n // Phase 5: Create & configure HonoApp\n const logger = this._container.resolve<LoggerService>(LOGGER_TOKENS.LoggerService)\n this.honoApp = new HonoApp(this._container, logger)\n const middlewareConfigs = this.moduleRegistry.getAllMiddlewareConfigs()\n const controllers = this.moduleRegistry.getAllControllers() as Constructor<IController>[]\n await this.honoApp.configure(middlewareConfigs, controllers, this.appConfig.versioning)\n\n // Phase 6: Configure queues, cron, events, commands, seeders\n this.registerQueueConsumers()\n this.registerCronJobs()\n this.registerEventListeners()\n this.registerSeeders()\n this.registerCommands()\n\n this.initialized = true\n }\n\n /**\n * Resolve a service from the container\n */\n resolve<T>(token: symbol): T {\n try {\n return this._container.resolve(token)\n } catch (error) {\n const errorHandler = this._container.resolve<GlobalErrorHandler>(DI_TOKENS.ErrorHandler)\n const errorResponse = errorHandler.handle(error)\n throw errorResponse as unknown as Error\n }\n }\n\n /**\n * Handle queue batch processing\n */\n async handleQueue(batch: MessageBatch, queueName: string): Promise<void> {\n const firstMessage = batch.messages[0]?.body as QueueMessage | undefined\n const locale = firstMessage?.metadata?.locale ?? 'en'\n const mockRouterContext = this.createMockRouterContext(locale)\n\n await this._container.runInRequestScope(mockRouterContext, async (requestContainer) => {\n try {\n const queueManager = requestContainer.resolve<QueueManager>(DI_TOKENS.Queue)\n await queueManager.processBatch(queueName, batch)\n } catch (error) {\n const errorHandler = requestContainer.resolve<GlobalErrorHandler>(DI_TOKENS.ErrorHandler)\n errorHandler.handle(error)\n throw error\n }\n })\n }\n\n /**\n * Handle scheduled cron trigger\n */\n async handleScheduled(controller: ScheduledController): Promise<void> {\n const mockRouterContext = this.createMockRouterContext('en')\n\n await this._container.runInRequestScope(mockRouterContext, async (requestContainer) => {\n try {\n await this.cronManager.executeScheduled(controller)\n } catch (error) {\n const errorHandler = requestContainer.resolve<GlobalErrorHandler>(DI_TOKENS.ErrorHandler)\n errorHandler.handle(error)\n throw error\n }\n })\n }\n\n /**\n * Create mock RouterContext for queue/cron/seeder processing\n */\n createMockRouterContext(locale = 'en'): RouterContext {\n return {\n getLocale: () => locale,\n setLocale: () => { /* no-op */ },\n getContainer: () => this._container,\n } as unknown as RouterContext\n }\n\n async shutdown(): Promise<void> {\n if (!this.initialized) return\n this.initialized = false\n\n await this.moduleRegistry.shutdown()\n\n const logger = this._container.resolve<LoggerService>(LOGGER_TOKENS.LoggerService)\n logger.info('Disposing container...')\n\n await this._container.dispose()\n }\n\n /**\n * Execute a command by name in a request-scoped container.\n */\n async handleCommand(name: string, input?: CommandInput): Promise<CommandResult> {\n const mockContext = this.createMockRouterContext('en')\n return this._container.runInRequestScope(mockContext, async () => {\n return this.quarry.call(name, input)\n })\n }\n\n private registerCommands(): void {\n // Built-in commands (always available)\n const builtinCommands: Constructor<Command>[] = [\n HelpCommand,\n DbSeedCommand, DbSeedListCommand,\n RouteListCommand, EventListCommand,\n ScheduleListCommand, QueueListCommand,\n McpServeCommand, McpToolsCommand, ApiCommand,\n ]\n for (const Cmd of builtinCommands) {\n injectable()(Cmd)\n this._container.register(Cmd, Cmd, Scope.Singleton)\n this.quarry.register(Cmd)\n }\n\n // User commands from modules\n const commands = this.moduleRegistry.getAllCommands()\n if (commands.length === 0) {\n return\n }\n\n for (const CommandClass of commands) {\n this.quarry.register(CommandClass as Constructor<Command>)\n }\n }\n\n private registerSeeders(): void {\n const seeders = this.moduleRegistry.getAllSeeders()\n if (seeders.length === 0) return\n const registry = this._container.resolve<SeederRegistry>(SEEDER_TOKENS.SeederRegistry)\n for (const SeederClass of seeders) {\n registry.register(SeederClass as Constructor<Seeder>)\n }\n }\n\n private registerQueueConsumers(): void {\n for (const ConsumerClass of this.moduleRegistry.getAllConsumers()) {\n const consumer = this._container.resolve(ConsumerClass) as IQueueConsumer\n this.consumerRegistry.register(consumer)\n }\n }\n\n private registerCronJobs(): void {\n for (const JobClass of this.moduleRegistry.getAllJobs()) {\n const job = this._container.resolve(JobClass) as CronJob\n this.cronManager.registerJob(job)\n }\n }\n\n /**\n * Auto-wire `@Listener()` classes with the EventRegistry.\n */\n private registerEventListeners(): void {\n const listeners = this.moduleRegistry.getAllListeners()\n if (listeners.length === 0) {\n return\n }\n\n const eventRegistry = this._container.resolve<EventRegistry>(DI_TOKENS.EventRegistry)\n\n for (const ListenerClass of listeners) {\n const instance = this._container.resolve(ListenerClass) as Record<string, ((...args: unknown[]) => unknown)>\n const handlers = getListenerHandlers(ListenerClass)\n\n for (const { methodName, event, options } of handlers) {\n eventRegistry.on(event, instance[methodName].bind(instance) as EventHandler, options)\n }\n }\n }\n\n /**\n * Register LoggerService and dependencies\n */\n private registerLoggerService(): void {\n const logLevel = this.appConfig.logging?.level ?? LogLevel.INFO\n const formatter = this.appConfig.logging?.formatter ?? 'json'\n\n this._container.registerValue(LOGGER_TOKENS.LogLevelOptions, logLevel)\n\n this._container\n .when(() => formatter === 'pretty')\n .use(LOGGER_TOKENS.Formatter)\n .give(PrettyFormatter)\n .otherwise(JsonFormatter)\n\n this._container.registerSingleton(LOGGER_TOKENS.ConsoleTransport, ConsoleTransport)\n this._container.registerFactory(LOGGER_TOKENS.Transports, (c) => [c.resolve(LOGGER_TOKENS.ConsoleTransport)])\n this._container.registerSingleton(LOGGER_TOKENS.LoggerService, LoggerService)\n }\n\n /**\n * Register core services with explicit scope\n */\n private registerCoreServices(): void {\n this._container.registerSingleton(DI_TOKENS.Cron, CronManager)\n this._container.register(DI_TOKENS.ErrorHandler, GlobalErrorHandler)\n this._container.registerSingleton(DI_TOKENS.EventRegistry, EventRegistry)\n this._container.registerSingleton(DI_TOKENS.Quarry, QuarryRegistry)\n this._container.registerValue(SEEDER_TOKENS.SeederRegistry, new SeederRegistry(this))\n }\n}\n","import 'reflect-metadata'\n\nimport { Application, type ApplicationConfig } from './application'\nimport type { StratalEnv } from './env'\nimport { StratalNotInitializedError } from './errors'\nimport type { HonoApp } from './router/hono-app'\n\n/**\n * Stratal — Hono-style entry point for Cloudflare Workers.\n *\n * Eagerly bootstraps the Application at construction time, dynamically\n * importing `cloudflare:workers` for env and waitUntil.\n *\n * @example\n * ```typescript\n * import { Stratal } from 'stratal'\n * import { AppModule } from './app.module'\n *\n * export default new Stratal({ module: AppModule })\n * ```\n */\nexport class Stratal<Env extends StratalEnv = StratalEnv> {\n private app: Application | null = null\n private initPromise: Promise<Application>\n\n private static _application: Promise<Application> | null = null\n\n constructor(config: ApplicationConfig) {\n this.fetch = this.fetch.bind(this)\n this.queue = this.queue.bind(this)\n this.scheduled = this.scheduled.bind(this)\n\n this.initPromise = this.prepareApp(config)\n Stratal._application = this.initPromise\n }\n\n async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {\n const app = await this.ensureReady()\n return app.hono.fetch(request, env, ctx)\n }\n\n async queue(batch: MessageBatch): Promise<void> {\n const app = await this.ensureReady()\n return app.handleQueue(batch, batch.queue)\n }\n\n async scheduled(controller: ScheduledController): Promise<void> {\n const app = await this.ensureReady()\n return app.handleScheduled(controller)\n }\n\n get hono(): Promise<HonoApp> {\n return this.initPromise.then(app => app.hono)\n }\n\n async shutdown(): Promise<void> {\n try { this.app = await this.initPromise } catch { /* ignore */ }\n if (this.app) {\n await this.app.shutdown()\n this.app = null\n }\n }\n\n /**\n * @internal\n * Resolves the Application instance from the static singleton.\n * Used by worker base classes (DurableObject, Workflow, WorkerEntrypoint)\n * to access the DI container without going through Cloudflare RPC.\n */\n static resolveApplication(): Promise<Application> {\n if (!Stratal._application) {\n throw new StratalNotInitializedError()\n }\n return Stratal._application\n }\n\n private async ensureReady(): Promise<Application> {\n this.app ??= await this.initPromise;\n return this.app\n }\n\n private async prepareApp(config: ApplicationConfig): Promise<Application> {\n const { env, waitUntil } = await import('cloudflare:workers')\n const app = new Application({ ...config, env: env as Env, ctx: { waitUntil } })\n await app.initialize()\n return app\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types-DahElfUw.d.mts","names":[],"sources":["../src/types.ts"],"mappings":";;AAeA;;;;;;;;;;;;;KAAY,WAAA,sCAAiD,IAAA,YAAgB,CAAA"}
|