stratal 0.0.5 → 0.0.6
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/README.md +2 -7
- package/dist/application.d.ts +9 -5
- package/dist/application.d.ts.map +1 -1
- package/dist/application.js +10 -10
- package/dist/application.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/stratal.d.ts +48 -0
- package/dist/stratal.d.ts.map +1 -0
- package/dist/stratal.js +90 -0
- package/dist/stratal.js.map +1 -0
- package/package.json +8 -8
- package/CHANGELOG.md +0 -121
- package/dist/worker/index.d.ts +0 -2
- package/dist/worker/index.d.ts.map +0 -1
- package/dist/worker/index.js +0 -2
- package/dist/worker/index.js.map +0 -1
- package/dist/worker/stratal-worker.d.ts +0 -49
- package/dist/worker/stratal-worker.d.ts.map +0 -1
- package/dist/worker/stratal-worker.js +0 -89
- package/dist/worker/stratal-worker.js.map +0 -1
package/README.md
CHANGED
|
@@ -85,10 +85,9 @@ npx skills add strataljs/stratal
|
|
|
85
85
|
Define a module with a controller and wire it up as a Cloudflare Worker:
|
|
86
86
|
|
|
87
87
|
```typescript
|
|
88
|
-
import {
|
|
88
|
+
import { Stratal } from 'stratal'
|
|
89
89
|
import { Module } from 'stratal/module'
|
|
90
90
|
import { Controller, Route, type RouterContext } from 'stratal/router'
|
|
91
|
-
import { StratalWorker } from 'stratal/worker'
|
|
92
91
|
import { z } from 'stratal/validation'
|
|
93
92
|
|
|
94
93
|
// Define a controller
|
|
@@ -110,11 +109,7 @@ class GreetingsController {
|
|
|
110
109
|
class AppModule {}
|
|
111
110
|
|
|
112
111
|
// Worker entry point
|
|
113
|
-
export default
|
|
114
|
-
protected configure(): ApplicationConfig {
|
|
115
|
-
return { module: AppModule }
|
|
116
|
-
}
|
|
117
|
-
}
|
|
112
|
+
export default new Stratal({ module: AppModule })
|
|
118
113
|
```
|
|
119
114
|
|
|
120
115
|
## Contributing
|
package/dist/application.d.ts
CHANGED
|
@@ -12,6 +12,10 @@ export interface ApplicationConfig {
|
|
|
12
12
|
formatter?: 'json' | 'pretty';
|
|
13
13
|
};
|
|
14
14
|
}
|
|
15
|
+
export interface ApplicationOptions extends ApplicationConfig {
|
|
16
|
+
env: StratalEnv;
|
|
17
|
+
ctx: ExecutionContext;
|
|
18
|
+
}
|
|
15
19
|
/**
|
|
16
20
|
* Application
|
|
17
21
|
*
|
|
@@ -34,7 +38,7 @@ export interface ApplicationConfig {
|
|
|
34
38
|
*
|
|
35
39
|
* @example
|
|
36
40
|
* ```typescript
|
|
37
|
-
* const app = new Application(env, ctx
|
|
41
|
+
* const app = new Application({ module: AppModule, env, ctx })
|
|
38
42
|
* await app.initialize()
|
|
39
43
|
*
|
|
40
44
|
* // Access container via getter
|
|
@@ -46,9 +50,6 @@ export interface ApplicationConfig {
|
|
|
46
50
|
* ```
|
|
47
51
|
*/
|
|
48
52
|
export declare class Application {
|
|
49
|
-
readonly env: StratalEnv;
|
|
50
|
-
readonly ctx: ExecutionContext;
|
|
51
|
-
private readonly appConfig;
|
|
52
53
|
/**
|
|
53
54
|
* Unified Container - manages all DI operations
|
|
54
55
|
* Use app.container to access registration and resolution methods
|
|
@@ -58,7 +59,10 @@ export declare class Application {
|
|
|
58
59
|
private consumerRegistry;
|
|
59
60
|
private cronManager;
|
|
60
61
|
private initialized;
|
|
61
|
-
|
|
62
|
+
readonly env: StratalEnv;
|
|
63
|
+
readonly ctx: ExecutionContext;
|
|
64
|
+
private readonly appConfig;
|
|
65
|
+
constructor(options: ApplicationOptions);
|
|
62
66
|
/**
|
|
63
67
|
* Get the Container instance
|
|
64
68
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../src/application.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE1C,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,OAAO,CAAA;AAKvC,OAAO,EAAiE,QAAQ,EAAmB,MAAM,UAAU,CAAA;AAEnH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAMhE,OAAO,EAAkD,KAAK,aAAa,EAAE,MAAM,UAAU,CAAA;AAG7F,MAAM,WAAW,iBAAiB;IAChC,8BAA8B;IAC9B,MAAM,EAAE,WAAW,GAAG,aAAa,CAAA;IACnC,oEAAoE;IACpE,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,QAAQ,CAAA;QAChB,SAAS,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAA;KAC9B,CAAA;CACF;AAED
|
|
1
|
+
{"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../src/application.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE1C,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,OAAO,CAAA;AAKvC,OAAO,EAAiE,QAAQ,EAAmB,MAAM,UAAU,CAAA;AAEnH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAMhE,OAAO,EAAkD,KAAK,aAAa,EAAE,MAAM,UAAU,CAAA;AAG7F,MAAM,WAAW,iBAAiB;IAChC,8BAA8B;IAC9B,MAAM,EAAE,WAAW,GAAG,aAAa,CAAA;IACnC,oEAAoE;IACpE,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,QAAQ,CAAA;QAChB,SAAS,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAA;KAC9B,CAAA;CACF;AAED,MAAM,WAAW,kBAAmB,SAAQ,iBAAiB;IAC3D,GAAG,EAAE,UAAU,CAAA;IACf,GAAG,EAAE,gBAAgB,CAAA;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,qBAAa,WAAW;IACtB;;;OAGG;IACH,OAAO,CAAC,UAAU,CAAW;IAE7B,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,WAAW,CAAQ;IAE3B,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAA;IACxB,QAAQ,CAAC,GAAG,EAAE,gBAAgB,CAAA;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmB;gBAEjC,OAAO,EAAE,kBAAkB;IA2BvC;;;;;;;OAOG;IACH,IAAI,SAAS,IAAI,SAAS,CAEzB;IAEK,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAsCjC;;;;;OAKG;IACH,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC;IAU5B;;;;;OAKG;IACG,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBxE;;OAEG;IACG,eAAe,CAAC,UAAU,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAerE;;;;;;;OAOG;IACH,uBAAuB,CAAC,MAAM,SAAO,GAAG,aAAa;IAQ/C,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAK/B,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,gBAAgB;IAOxB;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IAkB9B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAoB7B;;;;;;;OAOG;IACH,OAAO,CAAC,oBAAoB;CAU7B"}
|
package/dist/application.js
CHANGED
|
@@ -33,7 +33,7 @@ import { ROUTER_TOKENS, RouterService } from './router';
|
|
|
33
33
|
*
|
|
34
34
|
* @example
|
|
35
35
|
* ```typescript
|
|
36
|
-
* const app = new Application(env, ctx
|
|
36
|
+
* const app = new Application({ module: AppModule, env, ctx })
|
|
37
37
|
* await app.initialize()
|
|
38
38
|
*
|
|
39
39
|
* // Access container via getter
|
|
@@ -45,9 +45,6 @@ import { ROUTER_TOKENS, RouterService } from './router';
|
|
|
45
45
|
* ```
|
|
46
46
|
*/
|
|
47
47
|
export class Application {
|
|
48
|
-
env;
|
|
49
|
-
ctx;
|
|
50
|
-
appConfig;
|
|
51
48
|
/**
|
|
52
49
|
* Unified Container - manages all DI operations
|
|
53
50
|
* Use app.container to access registration and resolution methods
|
|
@@ -57,14 +54,17 @@ export class Application {
|
|
|
57
54
|
consumerRegistry;
|
|
58
55
|
cronManager;
|
|
59
56
|
initialized = false;
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
57
|
+
env;
|
|
58
|
+
ctx;
|
|
59
|
+
appConfig;
|
|
60
|
+
constructor(options) {
|
|
61
|
+
this.env = options.env;
|
|
62
|
+
this.ctx = options.ctx;
|
|
63
|
+
this.appConfig = options;
|
|
64
64
|
// Create unified Container with explicit child container
|
|
65
65
|
this._container = new Container({
|
|
66
|
-
env,
|
|
67
|
-
ctx,
|
|
66
|
+
env: this.env,
|
|
67
|
+
ctx: this.ctx,
|
|
68
68
|
container: tsyringeRootContainer.createChildContainer()
|
|
69
69
|
});
|
|
70
70
|
// Register Application instance
|
package/dist/application.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"application.js","sourceRoot":"","sources":["../src/application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,IAAI,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAErC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAE/D,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AACnH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAEzD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAIzC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAwC,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"application.js","sourceRoot":"","sources":["../src/application.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,OAAO,CAAA;AACrB,cAAc,SAAS,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,OAAO,CAAA;AACrB,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,OAAO,CAAA;AACrB,cAAc,SAAS,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,OAAO,CAAA;AACrB,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { Application, type ApplicationConfig } from './application';
|
|
3
|
+
import type { StratalEnv } from './env';
|
|
4
|
+
/**
|
|
5
|
+
* Stratal — Hono-style entry point for Cloudflare Workers.
|
|
6
|
+
*
|
|
7
|
+
* Lazily initializes the Application on the first handler call and caches it
|
|
8
|
+
* for all subsequent invocations. A concurrent-init guard prevents double
|
|
9
|
+
* initialization from simultaneous requests.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { Stratal } from 'stratal'
|
|
14
|
+
* import { AppModule } from './app.module'
|
|
15
|
+
*
|
|
16
|
+
* export default new Stratal({ module: AppModule })
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare class Stratal<Env extends StratalEnv = StratalEnv> {
|
|
20
|
+
private readonly config;
|
|
21
|
+
private app;
|
|
22
|
+
private initPromise;
|
|
23
|
+
constructor(config: ApplicationConfig);
|
|
24
|
+
/**
|
|
25
|
+
* Handle HTTP requests via RouterService.
|
|
26
|
+
*/
|
|
27
|
+
fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response>;
|
|
28
|
+
/**
|
|
29
|
+
* Handle queue batches.
|
|
30
|
+
*/
|
|
31
|
+
queue(batch: MessageBatch, env: Env, ctx: ExecutionContext): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Handle scheduled cron triggers.
|
|
34
|
+
*/
|
|
35
|
+
scheduled(controller: ScheduledController, env: Env, ctx: ExecutionContext): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Get or lazily initialize the Application singleton.
|
|
38
|
+
* The first call's `env`/`ctx` are used for initialization;
|
|
39
|
+
* subsequent calls return the cached instance.
|
|
40
|
+
*/
|
|
41
|
+
getApplication(env: Env, ctx: ExecutionContext): Promise<Application>;
|
|
42
|
+
/**
|
|
43
|
+
* Shut down the application and release all resources.
|
|
44
|
+
*/
|
|
45
|
+
shutdown(): Promise<void>;
|
|
46
|
+
private initializeApp;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=stratal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stratal.d.ts","sourceRoot":"","sources":["../src/stratal.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAA;AAEzB,OAAO,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAGvC;;;;;;;;;;;;;;GAcG;AACH,qBAAa,OAAO,CAAC,GAAG,SAAS,UAAU,GAAG,UAAU;IAI1C,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,GAAG,CAA2B;IACtC,OAAO,CAAC,WAAW,CAAoC;gBAE1B,MAAM,EAAE,iBAAiB;IAMtD;;OAEG;IACG,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAMjF;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhF;;OAEG;IACG,SAAS,CAAC,UAAU,EAAE,mBAAmB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhG;;;;OAIG;IACG,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC;IAsB3E;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;YAOjB,aAAa;CAK5B"}
|
package/dist/stratal.js
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { Application } from './application';
|
|
3
|
+
import { ROUTER_TOKENS } from './router';
|
|
4
|
+
/**
|
|
5
|
+
* Stratal — Hono-style entry point for Cloudflare Workers.
|
|
6
|
+
*
|
|
7
|
+
* Lazily initializes the Application on the first handler call and caches it
|
|
8
|
+
* for all subsequent invocations. A concurrent-init guard prevents double
|
|
9
|
+
* initialization from simultaneous requests.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { Stratal } from 'stratal'
|
|
14
|
+
* import { AppModule } from './app.module'
|
|
15
|
+
*
|
|
16
|
+
* export default new Stratal({ module: AppModule })
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export class Stratal {
|
|
20
|
+
config;
|
|
21
|
+
app = null;
|
|
22
|
+
initPromise = null;
|
|
23
|
+
constructor(config) {
|
|
24
|
+
this.config = config;
|
|
25
|
+
this.fetch = this.fetch.bind(this);
|
|
26
|
+
this.queue = this.queue.bind(this);
|
|
27
|
+
this.scheduled = this.scheduled.bind(this);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Handle HTTP requests via RouterService.
|
|
31
|
+
*/
|
|
32
|
+
async fetch(request, env, ctx) {
|
|
33
|
+
const app = await this.getApplication(env, ctx);
|
|
34
|
+
const router = app.resolve(ROUTER_TOKENS.RouterService);
|
|
35
|
+
return router.fetch(request, env, ctx);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Handle queue batches.
|
|
39
|
+
*/
|
|
40
|
+
async queue(batch, env, ctx) {
|
|
41
|
+
const app = await this.getApplication(env, ctx);
|
|
42
|
+
return app.handleQueue(batch, batch.queue);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Handle scheduled cron triggers.
|
|
46
|
+
*/
|
|
47
|
+
async scheduled(controller, env, ctx) {
|
|
48
|
+
const app = await this.getApplication(env, ctx);
|
|
49
|
+
return app.handleScheduled(controller);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Get or lazily initialize the Application singleton.
|
|
53
|
+
* The first call's `env`/`ctx` are used for initialization;
|
|
54
|
+
* subsequent calls return the cached instance.
|
|
55
|
+
*/
|
|
56
|
+
async getApplication(env, ctx) {
|
|
57
|
+
// Fast path: already initialized
|
|
58
|
+
if (this.app) {
|
|
59
|
+
return this.app;
|
|
60
|
+
}
|
|
61
|
+
// Concurrent initialization guard
|
|
62
|
+
if (this.initPromise) {
|
|
63
|
+
return this.initPromise;
|
|
64
|
+
}
|
|
65
|
+
// Start initialization
|
|
66
|
+
this.initPromise = this.initializeApp(env, ctx);
|
|
67
|
+
try {
|
|
68
|
+
this.app = await this.initPromise;
|
|
69
|
+
return this.app;
|
|
70
|
+
}
|
|
71
|
+
finally {
|
|
72
|
+
this.initPromise = null;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Shut down the application and release all resources.
|
|
77
|
+
*/
|
|
78
|
+
async shutdown() {
|
|
79
|
+
if (this.app) {
|
|
80
|
+
await this.app.shutdown();
|
|
81
|
+
this.app = null;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
async initializeApp(env, ctx) {
|
|
85
|
+
const app = new Application({ ...this.config, env, ctx });
|
|
86
|
+
await app.initialize();
|
|
87
|
+
return app;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=stratal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stratal.js","sourceRoot":"","sources":["../src/stratal.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "stratal",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.6",
|
|
4
4
|
"description": "A modular Cloudflare Workers framework with dependency injection, queue-based events, and type-safe configuration",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"typescript"
|
|
28
28
|
],
|
|
29
29
|
"engines": {
|
|
30
|
-
"node": ">=
|
|
30
|
+
"node": ">=22.0.0"
|
|
31
31
|
},
|
|
32
32
|
"publishConfig": {
|
|
33
33
|
"access": "public",
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
"@hono/zod-openapi": "^1.2.2",
|
|
84
84
|
"@intlify/core-base": "^11.2.8",
|
|
85
85
|
"@intlify/message-compiler": "^11.2.8",
|
|
86
|
-
"@scalar/hono-api-reference": "^0.
|
|
86
|
+
"@scalar/hono-api-reference": "^0.10.0",
|
|
87
87
|
"@xmldom/xmldom": "^0.8.11",
|
|
88
88
|
"hono": "^4.12.3",
|
|
89
89
|
"reflect-metadata": "^0.2.2",
|
|
@@ -131,13 +131,13 @@
|
|
|
131
131
|
}
|
|
132
132
|
},
|
|
133
133
|
"devDependencies": {
|
|
134
|
-
"@aws-sdk/client-s3": "3.
|
|
134
|
+
"@aws-sdk/client-s3": "3.1003.0",
|
|
135
135
|
"@aws-sdk/lib-storage": "^3.1000.0",
|
|
136
|
-
"@aws-sdk/s3-request-presigner": "3.
|
|
136
|
+
"@aws-sdk/s3-request-presigner": "3.1003.0",
|
|
137
137
|
"@cloudflare/vitest-pool-workers": "^0.12.18",
|
|
138
|
-
"@cloudflare/workers-types": "4.
|
|
138
|
+
"@cloudflare/workers-types": "4.20260306.1",
|
|
139
139
|
"@react-email/components": "^1.0.8",
|
|
140
|
-
"@stratal/testing": "
|
|
140
|
+
"@stratal/testing": "workspace:*",
|
|
141
141
|
"@tus/server": "^2.3.0",
|
|
142
142
|
"@types/node": "^25.3.2",
|
|
143
143
|
"@types/nodemailer": "^7.0.11",
|
|
@@ -151,4 +151,4 @@
|
|
|
151
151
|
"typescript": "^5.9.3",
|
|
152
152
|
"vitest": "~3.2.0"
|
|
153
153
|
}
|
|
154
|
-
}
|
|
154
|
+
}
|
package/CHANGELOG.md
DELETED
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
# stratal
|
|
2
|
-
|
|
3
|
-
## 0.0.5
|
|
4
|
-
|
|
5
|
-
### Patch Changes
|
|
6
|
-
|
|
7
|
-
- [#66](https://github.com/strataljs/stratal/pull/66) [`c8ea964`](https://github.com/strataljs/stratal/commit/c8ea964e272b09ebc6619843e77d2b51178f9423) Thanks [@adesege](https://github.com/adesege)! - Add type-safe events system with `@Listener` and `@On` decorators, `EventRegistry` for handler registration and emission, and automatic listener discovery from module providers during application bootstrap. Enhanced DI container with service decoration support.
|
|
8
|
-
|
|
9
|
-
## 0.0.4
|
|
10
|
-
|
|
11
|
-
### Patch Changes
|
|
12
|
-
|
|
13
|
-
- **Lazy i18n context building** — `MessageLoaderService` now lazily builds and caches `CoreContext` per locale on first access instead of eagerly at startup, reducing initialization overhead.
|
|
14
|
-
- **Pre-build i18n contexts at startup** — Moved `CoreContext` creation and message flattening from per-request `I18nService` to the singleton `MessageLoaderService`, eliminating repeated work on every `t()` call.
|
|
15
|
-
- **Skip stack traces in production** — Added a static flag on `ApplicationError` to disable stack trace capture in production, where traces are stripped from responses anyway.
|
|
16
|
-
|
|
17
|
-
- **Cross-realm metadata keys** — Migrated all internal metadata symbols from `Symbol()` to `Symbol.for()` with a `stratal:` prefix for reliable cross-realm identity in Cloudflare Workers.
|
|
18
|
-
- **Benchmark configuration** — Added a benchmark section to the Vitest config and updated Wrangler compatibility flags for Node.js modules.
|
|
19
|
-
- **i18n integration tests** — Added localization integratnning in the workerd pool.
|
|
20
|
-
|
|
21
|
-
- **Consistent zod imports** — Updated zod imports across benchmark files to use the i18n validation module.
|
|
22
|
-
- **Cleaner error handling** — `GlobalErrorHandler` now passes the translated message directly to the logger, avoiding double-translation.
|
|
23
|
-
|
|
24
|
-
## 0.0.3
|
|
25
|
-
|
|
26
|
-
### Patch Changes
|
|
27
|
-
|
|
28
|
-
- - **Lazy i18n context building** — `MessageLoaderService` now lazily builds and caches `CoreContext` per locale on first access instead of eagerly at startup, reducing initialization overhead.
|
|
29
|
-
- **Pre-build i18n contexts at startup** — Moved `CoreContext` creation and message flattening from per-request `I18nService` to the singleton `MessageLoaderService`, eliminating repeated work on every `t()` call.
|
|
30
|
-
- **Skip stack traces in production** — Added a static flag on `ApplicationError` to disable stack trace capture in production, where traces are stripped from responses anyway.
|
|
31
|
-
|
|
32
|
-
- **Cross-realm metadata keys** — Migrated all internal metadata symbols from `Symbol()` to `Symbol.for()` with a `stratal:` prefix for reliable cross-realm identity in Cloudflare Workers.
|
|
33
|
-
- **Benchmark configuration** — Added a benchmark section to the Vitest config and updated Wrangler compatibility flags for Node.js modules.
|
|
34
|
-
- **i18n integration tests** — Added localization integratnning in the workerd pool.
|
|
35
|
-
|
|
36
|
-
- **Consistent zod imports** — Updated zod imports across benchmark files to use the i18n validation module.
|
|
37
|
-
- **Cleaner error handling** — `GlobalErrorHandler` now passes the translated message directly to the logger, avoiding double-translation.
|
|
38
|
-
|
|
39
|
-
## 0.0.2
|
|
40
|
-
|
|
41
|
-
### Patch Changes
|
|
42
|
-
|
|
43
|
-
#### `stratal` (core)
|
|
44
|
-
|
|
45
|
-
##### Breaking Changes
|
|
46
|
-
|
|
47
|
-
- **`withRoot`/`withRootAsync` renamed to `forRoot`/`forRootAsync`** — All dynamic module configuration methods have been renamed for consistency. Update every `SomeModule.withRoot(...)` call to `SomeModule.forRoot(...)` and `SomeModule.withRootAsync(...)` to `SomeModule.forRootAsync(...)`. ([`152913a`](https://github.com/strataljs/stratal/commit/152913a))
|
|
48
|
-
|
|
49
|
-
- **Barrel export removed — use sub-path imports** — The top-level `stratal` barrel export has been removed. Consumers must now import from sub-paths (`stratal/di`, `stratal/router`, `stratal/cache`, `stratal/validation`, etc.). ([`af073d8`](https://github.com/strataljs/stratal/commit/af073d8))
|
|
50
|
-
|
|
51
|
-
##### Features
|
|
52
|
-
|
|
53
|
-
- **DOM polyfill for Cloudflare Workers** — Added a DOM polyfill to support AWS SDK v3 XML parsing in Cloudflare Workers environments. ([`f3b2cb9`](https://github.com/strataljs/stratal/commit/f3b2cb9))
|
|
54
|
-
|
|
55
|
-
- **Benchmark suite** — Added benchmark functionality for measuring framework performa30438`](https://github.com/strataljs/stratal/commit/7230438))
|
|
56
|
-
|
|
57
|
-
##### Security
|
|
58
|
-
|
|
59
|
-
- **ConfigService blocks prototype pollution** — `ConfigService` now rejects dangerous keys (`__proto__`, `constructor`, `prototype`) to prevent prototype pollution attacks. ([`567139c`](https://github.com/strataljs/stratal/commit/567139c), [`e64b4e7`](https://github.com/strataljs/stratal/commit/e64b4e7))
|
|
60
|
-
|
|
61
|
-
##### Bug Fixes
|
|
62
|
-
|
|
63
|
-
- **`reflect-metadata` import moved to vitest setup** — Removed unused `reflect-metadata` imports from example files and centralized the import in `vitest.setup.ts`. ([`f3b2cb9`](https://github.com/strataljs/stratal/commit/f3b2cb9))
|
|
64
|
-
|
|
65
|
-
---
|
|
66
|
-
|
|
67
|
-
#### `@stratal/testing`
|
|
68
|
-
|
|
69
|
-
##### Breaking Changes
|
|
70
|
-
|
|
71
|
-
- **Import paths updated** — Import paths updated to match the new core sub-path exports (e.g. `stratal/di` instead of the barrel `stratal`). ([`af073d8`](https://github.com/strataljs/stratal/commit/af073d8))
|
|
72
|
-
|
|
73
|
-
- Updated dependencies []:
|
|
74
|
-
- stratal@0.0.2
|
|
75
|
-
|
|
76
|
-
## 0.0.1
|
|
77
|
-
|
|
78
|
-
### Patch Changes
|
|
79
|
-
|
|
80
|
-
- Initial release of the Stratal framework — a modular Cloudflare Workers framework built on Hono and tsyringe.
|
|
81
|
-
|
|
82
|
-
**Core Infrastructure**
|
|
83
|
-
|
|
84
|
-
- NestJS-style module system with `@Module()` decorator, dynamic modules (`withRoot`, `withRootAsync`), and lifecycle hooks (`OnInitialize`, `OnShutdown`)
|
|
85
|
-
- Two-tier dependency injection container (global singletons + request-scoped) powered by tsyringe with conditional registration and service decoration
|
|
86
|
-
- `StratalWorker` entry point extending Cloudflare's `WorkerEntrypoint` for HTTP fetch, queue batches, and scheduled cron triggers
|
|
87
|
-
|
|
88
|
-
**Routing & API**
|
|
89
|
-
|
|
90
|
-
- Hono-based routing with `@Controller()` and `@Route()` decorators, automatic controller discovery, and route guards via `@UseGuards()`
|
|
91
|
-
- OpenAPI schema generation with `@hono/zod-openapi` and Scalar API reference integration
|
|
92
|
-
- NestJS-like middleware configuration with route-specific application and exclusion
|
|
93
|
-
|
|
94
|
-
**Background Processing**
|
|
95
|
-
|
|
96
|
-
- Queue consumerfor Cloudflare Queues with `@Consumer()` and `@QueueJob()` decorators and batch processing
|
|
97
|
-
- Cron job scheduling via `CronManager` integrated with Cloudflare's scheduled events
|
|
98
|
-
|
|
99
|
-
**Services & Integrations**
|
|
100
|
-
|
|
101
|
-
- Email module with pluggable providers (Nodemailer, Resend) and queue-based sending
|
|
102
|
-
- Storage module with AWS S3 / Cloudflare R2 support, multipart uploads, presigned URLs, and TUS resumable uploads
|
|
103
|
-
- Internationalization (i18n) module with locale detection, message compilation, and request-scoped translations
|
|
104
|
-
- Cache module with pluggable providers and Cloudflare KV integration
|
|
105
|
-
- Configuration module with `registerAs()` namespaces and Zod-based validation
|
|
106
|
-
- Structured logging with JSON and pretty formatters
|
|
107
|
-
|
|
108
|
-
**Developer Experience**
|
|
109
|
-
|
|
110
|
-
- Zod-powered request/response validation with type inference
|
|
111
|
-
- Custom `ApplicationError` class with HTTP status mapping
|
|
112
|
-
- ESM-only with full TypeScript decorator support (`emitDecoratorMetadata`)
|
|
113
|
-
- Sub-path exports for tree-shakeable imports (`stratal/di`, `stratal/router`, `stratal/cache`, etc.)
|
|
114
|
-
|
|
115
|
-
- `TestingModule` and `TestingModuleBuilder` for bootstrapping isolated module environments in tests
|
|
116
|
-
- `TestHttpClient` with request builder and response wrapper for integration testing
|
|
117
|
-
- `FetchMock` for mocking HTTP fetch calls
|
|
118
|
-
- `FakeStorageService` for in-memory storage testing without S3/R2
|
|
119
|
-
- `ProviderOverrideBuilder` for replacing providers with test doubles
|
|
120
|
-
- Nodemailer mock for email testing
|
|
121
|
-
- Test environment utilities via `getTestEnv()`
|
package/dist/worker/index.d.ts
DELETED
|
@@ -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"}
|
package/dist/worker/index.js
DELETED
package/dist/worker/index.js.map
DELETED
|
@@ -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"}
|