stratal 0.0.5 → 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.
Files changed (106) hide show
  1. package/README.md +2 -7
  2. package/dist/application.d.ts +16 -44
  3. package/dist/application.d.ts.map +1 -1
  4. package/dist/application.js +38 -79
  5. package/dist/application.js.map +1 -1
  6. package/dist/config/config.module.d.ts.map +1 -1
  7. package/dist/config/config.module.js +2 -1
  8. package/dist/config/config.module.js.map +1 -1
  9. package/dist/config/errors/config-module-not-initialized.error.d.ts +10 -0
  10. package/dist/config/errors/config-module-not-initialized.error.d.ts.map +1 -0
  11. package/dist/config/errors/config-module-not-initialized.error.js +12 -0
  12. package/dist/config/errors/config-module-not-initialized.error.js.map +1 -0
  13. package/dist/config/errors/index.d.ts +1 -0
  14. package/dist/config/errors/index.d.ts.map +1 -1
  15. package/dist/config/errors/index.js +1 -0
  16. package/dist/config/errors/index.js.map +1 -1
  17. package/dist/di/container.d.ts +5 -267
  18. package/dist/di/container.d.ts.map +1 -1
  19. package/dist/di/container.js +13 -288
  20. package/dist/di/container.js.map +1 -1
  21. package/dist/di/errors/request-scope-operation-not-allowed.error.d.ts +0 -1
  22. package/dist/di/errors/request-scope-operation-not-allowed.error.d.ts.map +1 -1
  23. package/dist/di/errors/request-scope-operation-not-allowed.error.js +0 -1
  24. package/dist/di/errors/request-scope-operation-not-allowed.error.js.map +1 -1
  25. package/dist/di/index.d.ts +0 -1
  26. package/dist/di/index.d.ts.map +1 -1
  27. package/dist/di/index.js +0 -1
  28. package/dist/di/index.js.map +1 -1
  29. package/dist/errors/error-codes.d.ts +2 -0
  30. package/dist/errors/error-codes.d.ts.map +1 -1
  31. package/dist/errors/error-codes.js +2 -0
  32. package/dist/errors/error-codes.js.map +1 -1
  33. package/dist/events/types.d.ts +1 -1
  34. package/dist/execution-context.d.ts +4 -0
  35. package/dist/execution-context.d.ts.map +1 -0
  36. package/dist/execution-context.js +2 -0
  37. package/dist/execution-context.js.map +1 -0
  38. package/dist/i18n/messages/en/errors.d.ts +2 -2
  39. package/dist/i18n/messages/en/errors.js +2 -2
  40. package/dist/i18n/messages/en/errors.js.map +1 -1
  41. package/dist/index.d.ts +2 -0
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +2 -0
  44. package/dist/index.js.map +1 -1
  45. package/dist/logger/services/logger.service.d.ts +2 -15
  46. package/dist/logger/services/logger.service.d.ts.map +1 -1
  47. package/dist/logger/services/logger.service.js +11 -16
  48. package/dist/logger/services/logger.service.js.map +1 -1
  49. package/dist/router/errors/hono-app-already-configured.error.d.ts +10 -0
  50. package/dist/router/errors/hono-app-already-configured.error.d.ts.map +1 -0
  51. package/dist/router/errors/hono-app-already-configured.error.js +12 -0
  52. package/dist/router/errors/hono-app-already-configured.error.js.map +1 -0
  53. package/dist/router/errors/index.d.ts +1 -2
  54. package/dist/router/errors/index.d.ts.map +1 -1
  55. package/dist/router/errors/index.js +1 -2
  56. package/dist/router/errors/index.js.map +1 -1
  57. package/dist/router/hono-app.d.ts +38 -0
  58. package/dist/router/hono-app.d.ts.map +1 -0
  59. package/dist/router/hono-app.js +128 -0
  60. package/dist/router/hono-app.js.map +1 -0
  61. package/dist/router/index.d.ts +3 -3
  62. package/dist/router/index.d.ts.map +1 -1
  63. package/dist/router/index.js +6 -4
  64. package/dist/router/index.js.map +1 -1
  65. package/dist/router/router.tokens.d.ts +0 -28
  66. package/dist/router/router.tokens.d.ts.map +1 -1
  67. package/dist/router/router.tokens.js +0 -28
  68. package/dist/router/router.tokens.js.map +1 -1
  69. package/dist/router/services/index.d.ts +0 -1
  70. package/dist/router/services/index.d.ts.map +1 -1
  71. package/dist/router/services/index.js +0 -1
  72. package/dist/router/services/index.js.map +1 -1
  73. package/dist/stratal.d.ts +31 -0
  74. package/dist/stratal.d.ts.map +1 -0
  75. package/dist/stratal.js +62 -0
  76. package/dist/stratal.js.map +1 -0
  77. package/package.json +12 -12
  78. package/CHANGELOG.md +0 -121
  79. package/dist/di/request-context-store.d.ts +0 -122
  80. package/dist/di/request-context-store.d.ts.map +0 -1
  81. package/dist/di/request-context-store.js +0 -135
  82. package/dist/di/request-context-store.js.map +0 -1
  83. package/dist/router/errors/router-already-configured.error.d.ts +0 -5
  84. package/dist/router/errors/router-already-configured.error.d.ts.map +0 -1
  85. package/dist/router/errors/router-already-configured.error.js +0 -8
  86. package/dist/router/errors/router-already-configured.error.js.map +0 -1
  87. package/dist/router/errors/router-not-configured.error.d.ts +0 -5
  88. package/dist/router/errors/router-not-configured.error.d.ts.map +0 -1
  89. package/dist/router/errors/router-not-configured.error.js +0 -8
  90. package/dist/router/errors/router-not-configured.error.js.map +0 -1
  91. package/dist/router/router.service.d.ts +0 -62
  92. package/dist/router/router.service.d.ts.map +0 -1
  93. package/dist/router/router.service.js +0 -166
  94. package/dist/router/router.service.js.map +0 -1
  95. package/dist/router/services/request-scope.service.d.ts +0 -42
  96. package/dist/router/services/request-scope.service.d.ts.map +0 -1
  97. package/dist/router/services/request-scope.service.js +0 -76
  98. package/dist/router/services/request-scope.service.js.map +0 -1
  99. package/dist/worker/index.d.ts +0 -2
  100. package/dist/worker/index.d.ts.map +0 -1
  101. package/dist/worker/index.js +0 -2
  102. package/dist/worker/index.js.map +0 -1
  103. package/dist/worker/stratal-worker.d.ts +0 -49
  104. package/dist/worker/stratal-worker.d.ts.map +0 -1
  105. package/dist/worker/stratal-worker.js +0 -89
  106. package/dist/worker/stratal-worker.js.map +0 -1
@@ -1,166 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- var __param = (this && this.__param) || function (paramIndex, decorator) {
11
- return function (target, key) { decorator(target, key, paramIndex); }
12
- };
13
- import { cors } from 'hono/cors';
14
- import { inject } from 'tsyringe';
15
- import { CONTAINER_TOKEN } from '../di';
16
- import { Transient } from '../di/decorators';
17
- import { DI_TOKENS } from '../di/tokens';
18
- import { getHttpStatus } from '../errors';
19
- import { OpenAPIHono } from '../i18n/validation';
20
- import { LOGGER_TOKENS } from '../logger';
21
- import { MiddlewareConfigurationService, } from '../middleware';
22
- import { OPENAPI_TOKENS } from '../openapi';
23
- import { ROUTER_CONTEXT_KEYS } from './constants';
24
- import { RouteNotFoundError, RouterAlreadyConfiguredError, RouterNotConfiguredError } from './errors';
25
- import { SchemaValidationError } from './errors/schema-validation.error';
26
- import { createLoggerMiddleware } from './middleware';
27
- import { ROUTER_TOKENS } from './router.tokens';
28
- import { RequestScopeService } from './services/request-scope.service';
29
- import { RouteRegistrationService } from './services/route-registration.service';
30
- /**
31
- * RouterService manages HTTP routing and request handling with OpenAPI support
32
- *
33
- * Responsibilities:
34
- * - Creates and configures OpenAPIHono application
35
- * - Delegates to specialized services:
36
- * - RequestScopeService: Request-scoped container setup
37
- * - OpenAPIService: OpenAPI spec and documentation endpoints
38
- * - RouteRegistrationService: Controller and route registration
39
- * - Registers global middleware (CORS, logging, error handling)
40
- * - Handles fetch requests via Hono
41
- *
42
- * Note: Route access control (domain-based enforcement) is handled by
43
- * RouteAccessMiddleware in the tenancy module, applied via TenancyModule.configure().
44
- *
45
- * The service is registered as a singleton in the DI container
46
- * and accessed by the Backend worker's fetch() method.
47
- */
48
- let RouterService = class RouterService {
49
- logger;
50
- container;
51
- app;
52
- configured = false;
53
- constructor(logger, container) {
54
- this.logger = logger;
55
- this.container = container;
56
- this.app = new OpenAPIHono({
57
- defaultHook: (result, c) => {
58
- if (!result.success) {
59
- // Get request container (created by RequestScopeService)
60
- const requestContainer = c.get(ROUTER_CONTEXT_KEYS.REQUEST_CONTAINER);
61
- // Resolve GlobalErrorHandler from request container for i18n support
62
- const errorHandler = requestContainer.resolve(DI_TOKENS.ErrorHandler);
63
- // Convert ZodError to SchemaValidationError
64
- const validationError = new SchemaValidationError(result.error);
65
- // Process through global error handler for consistent formatting
66
- const errorResponse = errorHandler.handle(validationError);
67
- // Get HTTP status code from error code
68
- const status = getHttpStatus(errorResponse.code);
69
- return c.json(errorResponse, status);
70
- }
71
- // Validation succeeded, continue to handler
72
- return;
73
- },
74
- });
75
- this.setupMiddleware();
76
- }
77
- /**
78
- * Setup all middleware in correct order
79
- * Note: OpenAPI setup is deferred to configure() because it needs controllers
80
- */
81
- setupMiddleware() {
82
- // 1. Request-scoped container setup (MUST be FIRST)
83
- const requestScopeService = new RequestScopeService(this.container);
84
- requestScopeService.setupMiddleware(this.app);
85
- // 2. Global middleware (CORS, logging, error handling)
86
- this.setupGlobalMiddleware();
87
- // 3. OpenAPI documentation endpoints - deferred to configure()
88
- }
89
- /**
90
- * Setup global middleware that runs for all requests
91
- */
92
- setupGlobalMiddleware() {
93
- // CORS middleware
94
- this.app.use('*', cors());
95
- // Request logger middleware (uses our Logger service)
96
- this.app.use('*', createLoggerMiddleware(this.logger));
97
- // Global error handler
98
- this.app.onError((err, c) => {
99
- // Resolve GlobalErrorHandler from request container (has I18nService for translation)
100
- const requestContainer = c.get(ROUTER_CONTEXT_KEYS.REQUEST_CONTAINER);
101
- const errorHandler = requestContainer.resolve(DI_TOKENS.ErrorHandler);
102
- // Handle all errors via GlobalErrorHandler
103
- const errorResponse = errorHandler.handle(err);
104
- const status = getHttpStatus(errorResponse.code);
105
- return c.json(errorResponse, status);
106
- });
107
- }
108
- /**
109
- * Configure router with middlewares and controllers atomically
110
- * This MUST be called immediately after RouterService construction
111
- * and can only be called once.
112
- *
113
- * @param middlewareConfigs - Array of middleware configuration entries from modules
114
- * @param controllers - Array of controller classes from modules
115
- */
116
- configure(middlewareConfigs, controllers) {
117
- if (this.configured) {
118
- throw new RouterAlreadyConfiguredError();
119
- }
120
- this.logger.info('Configuring router', {
121
- middlewareConfigCount: middlewareConfigs.length,
122
- controllerCount: controllers.length,
123
- });
124
- // 3. Apply middleware configurations FIRST (includes LocaleExtractionMiddleware, RouteAccessMiddleware)
125
- // Middleware must run before OpenAPI endpoints so locale and route context are available
126
- const middlewareConfigService = new MiddlewareConfigurationService(this.logger);
127
- middlewareConfigService.applyMiddlewares(this.app, middlewareConfigs, controllers, this.container);
128
- // 4. OpenAPI documentation endpoints (needs middleware to run first for i18n and route filtering)
129
- const openAPIService = this.container.resolve(OPENAPI_TOKENS.OpenAPIService);
130
- openAPIService.setupEndpoints(this.app, controllers);
131
- // 5. Register controllers and routes
132
- const routeRegistrationService = new RouteRegistrationService(this.logger);
133
- routeRegistrationService.configure(this.app, controllers);
134
- // 6. Register 404 handler last
135
- this.app.notFound((c) => {
136
- throw new RouteNotFoundError(c.req.path, c.req.method);
137
- });
138
- this.configured = true;
139
- this.logger.info('Router configuration complete');
140
- }
141
- /**
142
- * Handle incoming fetch request via Hono
143
- *
144
- * This method is called by the Backend worker's fetch() method.
145
- * The request-scoped container is created in RequestScopeService.
146
- *
147
- * @param request - Incoming Request object
148
- * @param env - Cloudflare environment bindings
149
- * @param ctx - Cloudflare execution context
150
- * @returns Response object
151
- */
152
- fetch(request, env, ctx) {
153
- if (!this.configured) {
154
- throw new RouterNotConfiguredError();
155
- }
156
- return this.app.fetch(request, env, ctx);
157
- }
158
- };
159
- RouterService = __decorate([
160
- Transient(ROUTER_TOKENS.RouterService),
161
- __param(0, inject(LOGGER_TOKENS.LoggerService)),
162
- __param(1, inject(CONTAINER_TOKEN)),
163
- __metadata("design:paramtypes", [Function, Function])
164
- ], RouterService);
165
- export { RouterService };
166
- //# sourceMappingURL=router.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"router.service.js","sourceRoot":"","sources":["../../src/router/router.service.ts"],"names":[],"mappings":"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"}
@@ -1,42 +0,0 @@
1
- import type { OpenAPIHono } from '../../i18n/validation';
2
- import { Container } from '../../di';
3
- import type { RouterEnv } from '../types';
4
- /**
5
- * Request Scope Service
6
- *
7
- * Manages request-scoped container setup and lifecycle.
8
- * Creates context-enriched instances of `@RequestScoped` services.
9
- *
10
- * **Two-Tier Container Architecture:**
11
- * ```
12
- * Container (manages global container)
13
- * ↓
14
- * container.createRequestScope(routerContext)
15
- * ↓
16
- * Request Container (child, per request)
17
- * ↓
18
- * Context-enriched instances via withContext(routerContext)
19
- * ```
20
- *
21
- * **Responsibilities:**
22
- * - Setup request-scoped container middleware
23
- * - Create context-enriched instances of `@RequestScoped` services
24
- *
25
- * **Note:**
26
- * - AuthContext registration is handled by AuthModule's AuthContextMiddleware
27
- * - Locale extraction is handled by I18nModule's LocaleExtractionMiddleware
28
- * - Zod i18n context is handled by I18nModule's I18nContextMiddleware
29
- * - Session verification is handled by AuthModule's SessionVerificationMiddleware
30
- */
31
- export declare class RequestScopeService {
32
- private readonly container;
33
- constructor(container: Container);
34
- /**
35
- * Setup request-scoped container middleware
36
- *
37
- * This MUST run before all other middleware and routes.
38
- * Creates a child container with context-enriched service instances.
39
- */
40
- setupMiddleware(app: OpenAPIHono<RouterEnv>): void;
41
- }
42
- //# sourceMappingURL=request-scope.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"request-scope.service.d.ts","sourceRoot":"","sources":["../../../src/router/services/request-scope.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAExD,OAAO,EAAE,SAAS,EAAmB,MAAM,UAAU,CAAA;AAIrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBACa,mBAAmB;IAG5B,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,SAAS;IAGvC;;;;;OAKG;IACH,eAAe,CAAC,GAAG,EAAE,WAAW,CAAC,SAAS,CAAC,GAAG,IAAI;CAgBnD"}
@@ -1,76 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- var __param = (this && this.__param) || function (paramIndex, decorator) {
11
- return function (target, key) { decorator(target, key, paramIndex); }
12
- };
13
- import { inject } from 'tsyringe';
14
- import { Container, CONTAINER_TOKEN } from '../../di';
15
- import { Transient } from '../../di/decorators';
16
- import { ROUTER_CONTEXT_KEYS } from '../constants';
17
- import { RouterContext } from '../router-context';
18
- /**
19
- * Request Scope Service
20
- *
21
- * Manages request-scoped container setup and lifecycle.
22
- * Creates context-enriched instances of `@RequestScoped` services.
23
- *
24
- * **Two-Tier Container Architecture:**
25
- * ```
26
- * Container (manages global container)
27
- * ↓
28
- * container.createRequestScope(routerContext)
29
- * ↓
30
- * Request Container (child, per request)
31
- * ↓
32
- * Context-enriched instances via withContext(routerContext)
33
- * ```
34
- *
35
- * **Responsibilities:**
36
- * - Setup request-scoped container middleware
37
- * - Create context-enriched instances of `@RequestScoped` services
38
- *
39
- * **Note:**
40
- * - AuthContext registration is handled by AuthModule's AuthContextMiddleware
41
- * - Locale extraction is handled by I18nModule's LocaleExtractionMiddleware
42
- * - Zod i18n context is handled by I18nModule's I18nContextMiddleware
43
- * - Session verification is handled by AuthModule's SessionVerificationMiddleware
44
- */
45
- let RequestScopeService = class RequestScopeService {
46
- container;
47
- constructor(container) {
48
- this.container = container;
49
- }
50
- /**
51
- * Setup request-scoped container middleware
52
- *
53
- * This MUST run before all other middleware and routes.
54
- * Creates a child container with context-enriched service instances.
55
- */
56
- setupMiddleware(app) {
57
- app.use('*', async (c, next) => {
58
- // Create RouterContext
59
- const routerContext = new RouterContext(c);
60
- // Create request scope using Container
61
- const requestContainer = this.container.createRequestScope(routerContext);
62
- // Store in Hono context
63
- c.set(ROUTER_CONTEXT_KEYS.REQUEST_CONTAINER, requestContainer);
64
- // Run request within AsyncLocalStorage context
65
- // Cleanup is automatic in runWithContextStore
66
- await requestContainer.runWithContextStore(() => next());
67
- });
68
- }
69
- };
70
- RequestScopeService = __decorate([
71
- Transient(),
72
- __param(0, inject(CONTAINER_TOKEN)),
73
- __metadata("design:paramtypes", [Container])
74
- ], RequestScopeService);
75
- export { RequestScopeService };
76
- //# sourceMappingURL=request-scope.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"request-scope.service.js","sourceRoot":"","sources":["../../../src/router/services/request-scope.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAGjD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEI,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAGX;IAFnB,YAEmB,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;IACpC,CAAC;IAEJ;;;;;OAKG;IACH,eAAe,CAAC,GAA2B;QACzC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;YAC7B,uBAAuB;YACvB,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,CAAuB,CAAC,CAAA;YAEhE,uCAAuC;YACvC,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAA;YAEzE,wBAAwB;YACxB,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAA;YAE9D,+CAA+C;YAC/C,8CAA8C;YAC9C,MAAM,gBAAgB,CAAC,mBAAmB,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAA;QAC1D,CAAC,CAAC,CAAA;IACJ,CAAC;CACF,CAAA;AA5BY,mBAAmB;IAD/B,SAAS,EAAE;IAGP,WAAA,MAAM,CAAC,eAAe,CAAC,CAAA;qCACI,SAAS;GAH5B,mBAAmB,CA4B/B"}
@@ -1,2 +0,0 @@
1
- export { StratalWorker } from './stratal-worker';
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/worker/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA"}
@@ -1,2 +0,0 @@
1
- export { StratalWorker } from './stratal-worker';
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/worker/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA"}
@@ -1,49 +0,0 @@
1
- import 'reflect-metadata';
2
- import { WorkerEntrypoint } from 'cloudflare:workers';
3
- import { Application, type ApplicationConfig } from '../application';
4
- import type { StratalEnv } from '../env';
5
- /**
6
- * Base class for Cloudflare Workers using the modules framework.
7
- * Handles Application singleton management and provides default handlers.
8
- *
9
- * @example
10
- * ```typescript
11
- * export default class Backend extends StratalWorker<Cloudflare.Env> {
12
- * protected configure() {
13
- * return {
14
- * module: AppModule,
15
- * logging: { level: LogLevel.INFO },
16
- * }
17
- * }
18
- * }
19
- * ```
20
- */
21
- export declare abstract class StratalWorker<Env extends StratalEnv = StratalEnv> extends WorkerEntrypoint<Env> {
22
- /**
23
- * Configure the Application.
24
- * Access `this.env` and `this.ctx` for environment-dependent config.
25
- */
26
- protected abstract configure(): ApplicationConfig;
27
- /**
28
- * Get or initialize the Application singleton.
29
- * Handles concurrent initialization guards automatically.
30
- */
31
- protected getApp(): Promise<Application>;
32
- private initializeApp;
33
- /**
34
- * Handle HTTP requests via RouterService.
35
- * Override for custom request handling.
36
- */
37
- fetch(request: Request): Promise<Response>;
38
- /**
39
- * Handle queue batches.
40
- * Override for custom queue handling.
41
- */
42
- queue(batch: MessageBatch): Promise<void>;
43
- /**
44
- * Handle scheduled cron triggers.
45
- * Override for custom scheduled handling.
46
- */
47
- scheduled(controller: ScheduledController): Promise<void>;
48
- }
49
- //# sourceMappingURL=stratal-worker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stratal-worker.d.ts","sourceRoot":"","sources":["../../src/worker/stratal-worker.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAA;AAEzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAaxC;;;;;;;;;;;;;;;GAeG;AACH,8BAAsB,aAAa,CAClC,GAAG,SAAS,UAAU,GAAG,UAAU,CAClC,SAAQ,gBAAgB,CAAC,GAAG,CAAC;IAC9B;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,SAAS,IAAI,iBAAiB;IAEjD;;;OAGG;cACa,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC;YA8BhC,aAAa;IAO3B;;;OAGG;IACG,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IAMhD;;;OAGG;IACG,KAAK,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/C;;;OAGG;IACG,SAAS,CAAC,UAAU,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;CAI/D"}
@@ -1,89 +0,0 @@
1
- import 'reflect-metadata';
2
- import { WorkerEntrypoint } from 'cloudflare:workers';
3
- import { Application } from '../application';
4
- import { ROUTER_TOKENS } from '../router';
5
- /**
6
- * Per-class singleton registry
7
- * Key: Worker class constructor
8
- * Value: { app, promise } for singleton + concurrent init guard
9
- */
10
- const registry = new Map();
11
- /**
12
- * Base class for Cloudflare Workers using the modules framework.
13
- * Handles Application singleton management and provides default handlers.
14
- *
15
- * @example
16
- * ```typescript
17
- * export default class Backend extends StratalWorker<Cloudflare.Env> {
18
- * protected configure() {
19
- * return {
20
- * module: AppModule,
21
- * logging: { level: LogLevel.INFO },
22
- * }
23
- * }
24
- * }
25
- * ```
26
- */
27
- export class StratalWorker extends WorkerEntrypoint {
28
- /**
29
- * Get or initialize the Application singleton.
30
- * Handles concurrent initialization guards automatically.
31
- */
32
- async getApp() {
33
- const key = this.constructor;
34
- let state = registry.get(key);
35
- if (!state) {
36
- state = { app: null, promise: null };
37
- registry.set(key, state);
38
- }
39
- // Fast path: already initialized
40
- if (state.app) {
41
- return state.app;
42
- }
43
- // Concurrent initialization guard
44
- if (state.promise) {
45
- return state.promise;
46
- }
47
- // Start initialization
48
- state.promise = this.initializeApp();
49
- try {
50
- state.app = await state.promise;
51
- return state.app;
52
- }
53
- finally {
54
- state.promise = null;
55
- }
56
- }
57
- async initializeApp() {
58
- const config = this.configure();
59
- const app = new Application(this.env, this.ctx, config);
60
- await app.initialize();
61
- return app;
62
- }
63
- /**
64
- * Handle HTTP requests via RouterService.
65
- * Override for custom request handling.
66
- */
67
- async fetch(request) {
68
- const app = await this.getApp();
69
- const router = app.resolve(ROUTER_TOKENS.RouterService);
70
- return router.fetch(request, this.env, this.ctx);
71
- }
72
- /**
73
- * Handle queue batches.
74
- * Override for custom queue handling.
75
- */
76
- async queue(batch) {
77
- const app = await this.getApp();
78
- return app.handleQueue(batch, batch.queue);
79
- }
80
- /**
81
- * Handle scheduled cron triggers.
82
- * Override for custom scheduled handling.
83
- */
84
- async scheduled(controller) {
85
- const app = await this.getApp();
86
- return app.handleScheduled(controller);
87
- }
88
- }
89
- //# sourceMappingURL=stratal-worker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stratal-worker.js","sourceRoot":"","sources":["../../src/worker/stratal-worker.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAA;AAEzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,WAAW,EAA0B,MAAM,gBAAgB,CAAA;AAEpE,OAAO,EAAE,aAAa,EAAsB,MAAM,WAAW,CAAA;AAE7D;;;;GAIG;AACH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAGrB,CAAA;AAEH;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAgB,aAEpB,SAAQ,gBAAqB;IAO9B;;;OAGG;IACO,KAAK,CAAC,MAAM;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAA;QAC5B,IAAI,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAE7B,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,KAAK,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;YACpC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QACzB,CAAC;QAED,iCAAiC;QACjC,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;YACf,OAAO,KAAK,CAAC,GAAG,CAAA;QACjB,CAAC;QAED,kCAAkC;QAClC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,KAAK,CAAC,OAAO,CAAA;QACrB,CAAC;QAED,uBAAuB;QACvB,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QAEpC,IAAI,CAAC;YACJ,KAAK,CAAC,GAAG,GAAG,MAAM,KAAK,CAAC,OAAO,CAAA;YAC/B,OAAO,KAAK,CAAC,GAAG,CAAA;QACjB,CAAC;gBAAS,CAAC;YACV,KAAK,CAAC,OAAO,GAAG,IAAI,CAAA;QACrB,CAAC;IACF,CAAC;IAEO,KAAK,CAAC,aAAa;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;QAC/B,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QACvD,MAAM,GAAG,CAAC,UAAU,EAAE,CAAA;QACtB,OAAO,GAAG,CAAA;IACX,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK,CAAC,OAAgB;QAC3B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAA;QAC/B,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAgB,aAAa,CAAC,aAAa,CAAC,CAAA;QACtE,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;IACjD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK,CAAC,KAAmB;QAC9B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAA;QAC/B,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IAC3C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,SAAS,CAAC,UAA+B;QAC9C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAA;QAC/B,OAAO,GAAG,CAAC,eAAe,CAAC,UAAU,CAAC,CAAA;IACvC,CAAC;CACD"}