stratal 0.0.2 → 0.0.4
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/CHANGELOG.md +115 -0
- package/dist/application.d.ts.map +1 -1
- package/dist/application.js +3 -1
- package/dist/application.js.map +1 -1
- package/dist/di/decorators/inject-param.decorator.d.ts.map +1 -1
- package/dist/di/decorators/inject-param.decorator.js +1 -1
- package/dist/di/decorators/inject-param.decorator.js.map +1 -1
- package/dist/errors/application-error.d.ts +6 -0
- package/dist/errors/application-error.d.ts.map +1 -1
- package/dist/errors/application-error.js +8 -1
- package/dist/errors/application-error.js.map +1 -1
- package/dist/errors/global-error-handler.d.ts.map +1 -1
- package/dist/errors/global-error-handler.js +4 -6
- package/dist/errors/global-error-handler.js.map +1 -1
- package/dist/guards/types.d.ts.map +1 -1
- package/dist/guards/types.js +1 -1
- package/dist/guards/types.js.map +1 -1
- package/dist/i18n/services/i18n.service.d.ts +1 -13
- package/dist/i18n/services/i18n.service.d.ts.map +1 -1
- package/dist/i18n/services/i18n.service.js +3 -39
- package/dist/i18n/services/i18n.service.js.map +1 -1
- package/dist/i18n/services/message-loader.service.d.ts +18 -0
- package/dist/i18n/services/message-loader.service.d.ts.map +1 -1
- package/dist/i18n/services/message-loader.service.js +56 -2
- package/dist/i18n/services/message-loader.service.js.map +1 -1
- package/dist/module/module.decorator.d.ts.map +1 -1
- package/dist/module/module.decorator.js +1 -1
- package/dist/module/module.decorator.js.map +1 -1
- package/dist/router/constants.js +6 -6
- package/dist/router/constants.js.map +1 -1
- package/package.json +9 -8
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# stratal
|
|
2
|
+
|
|
3
|
+
## 0.0.4
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- **Lazy i18n context building** — `MessageLoaderService` now lazily builds and caches `CoreContext` per locale on first access instead of eagerly at startup, reducing initialization overhead.
|
|
8
|
+
- **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.
|
|
9
|
+
- **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.
|
|
10
|
+
|
|
11
|
+
- **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.
|
|
12
|
+
- **Benchmark configuration** — Added a benchmark section to the Vitest config and updated Wrangler compatibility flags for Node.js modules.
|
|
13
|
+
- **i18n integration tests** — Added localization integratnning in the workerd pool.
|
|
14
|
+
|
|
15
|
+
- **Consistent zod imports** — Updated zod imports across benchmark files to use the i18n validation module.
|
|
16
|
+
- **Cleaner error handling** — `GlobalErrorHandler` now passes the translated message directly to the logger, avoiding double-translation.
|
|
17
|
+
|
|
18
|
+
## 0.0.3
|
|
19
|
+
|
|
20
|
+
### Patch Changes
|
|
21
|
+
|
|
22
|
+
- - **Lazy i18n context building** — `MessageLoaderService` now lazily builds and caches `CoreContext` per locale on first access instead of eagerly at startup, reducing initialization overhead.
|
|
23
|
+
- **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.
|
|
24
|
+
- **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.
|
|
25
|
+
|
|
26
|
+
- **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.
|
|
27
|
+
- **Benchmark configuration** — Added a benchmark section to the Vitest config and updated Wrangler compatibility flags for Node.js modules.
|
|
28
|
+
- **i18n integration tests** — Added localization integratnning in the workerd pool.
|
|
29
|
+
|
|
30
|
+
- **Consistent zod imports** — Updated zod imports across benchmark files to use the i18n validation module.
|
|
31
|
+
- **Cleaner error handling** — `GlobalErrorHandler` now passes the translated message directly to the logger, avoiding double-translation.
|
|
32
|
+
|
|
33
|
+
## 0.0.2
|
|
34
|
+
|
|
35
|
+
### Patch Changes
|
|
36
|
+
|
|
37
|
+
#### `stratal` (core)
|
|
38
|
+
|
|
39
|
+
##### Breaking Changes
|
|
40
|
+
|
|
41
|
+
- **`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))
|
|
42
|
+
|
|
43
|
+
- **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))
|
|
44
|
+
|
|
45
|
+
##### Features
|
|
46
|
+
|
|
47
|
+
- **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))
|
|
48
|
+
|
|
49
|
+
- **Benchmark suite** — Added benchmark functionality for measuring framework performa30438`](https://github.com/strataljs/stratal/commit/7230438))
|
|
50
|
+
|
|
51
|
+
##### Security
|
|
52
|
+
|
|
53
|
+
- **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))
|
|
54
|
+
|
|
55
|
+
##### Bug Fixes
|
|
56
|
+
|
|
57
|
+
- **`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))
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
#### `@stratal/testing`
|
|
62
|
+
|
|
63
|
+
##### Breaking Changes
|
|
64
|
+
|
|
65
|
+
- **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))
|
|
66
|
+
|
|
67
|
+
- Updated dependencies []:
|
|
68
|
+
- stratal@0.0.2
|
|
69
|
+
|
|
70
|
+
## 0.0.1
|
|
71
|
+
|
|
72
|
+
### Patch Changes
|
|
73
|
+
|
|
74
|
+
- Initial release of the Stratal framework — a modular Cloudflare Workers framework built on Hono and tsyringe.
|
|
75
|
+
|
|
76
|
+
**Core Infrastructure**
|
|
77
|
+
|
|
78
|
+
- NestJS-style module system with `@Module()` decorator, dynamic modules (`withRoot`, `withRootAsync`), and lifecycle hooks (`OnInitialize`, `OnShutdown`)
|
|
79
|
+
- Two-tier dependency injection container (global singletons + request-scoped) powered by tsyringe with conditional registration and service decoration
|
|
80
|
+
- `StratalWorker` entry point extending Cloudflare's `WorkerEntrypoint` for HTTP fetch, queue batches, and scheduled cron triggers
|
|
81
|
+
|
|
82
|
+
**Routing & API**
|
|
83
|
+
|
|
84
|
+
- Hono-based routing with `@Controller()` and `@Route()` decorators, automatic controller discovery, and route guards via `@UseGuards()`
|
|
85
|
+
- OpenAPI schema generation with `@hono/zod-openapi` and Scalar API reference integration
|
|
86
|
+
- NestJS-like middleware configuration with route-specific application and exclusion
|
|
87
|
+
|
|
88
|
+
**Background Processing**
|
|
89
|
+
|
|
90
|
+
- Queue consumerfor Cloudflare Queues with `@Consumer()` and `@QueueJob()` decorators and batch processing
|
|
91
|
+
- Cron job scheduling via `CronManager` integrated with Cloudflare's scheduled events
|
|
92
|
+
|
|
93
|
+
**Services & Integrations**
|
|
94
|
+
|
|
95
|
+
- Email module with pluggable providers (Nodemailer, Resend) and queue-based sending
|
|
96
|
+
- Storage module with AWS S3 / Cloudflare R2 support, multipart uploads, presigned URLs, and TUS resumable uploads
|
|
97
|
+
- Internationalization (i18n) module with locale detection, message compilation, and request-scoped translations
|
|
98
|
+
- Cache module with pluggable providers and Cloudflare KV integration
|
|
99
|
+
- Configuration module with `registerAs()` namespaces and Zod-based validation
|
|
100
|
+
- Structured logging with JSON and pretty formatters
|
|
101
|
+
|
|
102
|
+
**Developer Experience**
|
|
103
|
+
|
|
104
|
+
- Zod-powered request/response validation with type inference
|
|
105
|
+
- Custom `ApplicationError` class with HTTP status mapping
|
|
106
|
+
- ESM-only with full TypeScript decorator support (`emitDecoratorMetadata`)
|
|
107
|
+
- Sub-path exports for tree-shakeable imports (`stratal/di`, `stratal/router`, `stratal/cache`, etc.)
|
|
108
|
+
|
|
109
|
+
- `TestingModule` and `TestingModuleBuilder` for bootstrapping isolated module environments in tests
|
|
110
|
+
- `TestHttpClient` with request builder and response wrapper for integration testing
|
|
111
|
+
- `FetchMock` for mocking HTTP fetch calls
|
|
112
|
+
- `FakeStorageService` for in-memory storage testing without S3/R2
|
|
113
|
+
- `ProviderOverrideBuilder` for replacing providers with test doubles
|
|
114
|
+
- Nodemailer mock for email testing
|
|
115
|
+
- Test environment utilities via `getTestEnv()`
|
|
@@ -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;AAGvC,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,qBAAa,WAAW;IAapB,QAAQ,CAAC,GAAG,EAAE,UAAU;IACxB,QAAQ,CAAC,GAAG,EAAE,gBAAgB;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAd5B;;;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;gBAGhB,GAAG,EAAE,UAAU,EACf,GAAG,EAAE,gBAAgB,EACb,SAAS,EAAE,iBAAiB;IAwB/C;;;;;;;OAOG;IACH,IAAI,SAAS,IAAI,SAAS,CAEzB;IAEK,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
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;AAGvC,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,qBAAa,WAAW;IAapB,QAAQ,CAAC,GAAG,EAAE,UAAU;IACxB,QAAQ,CAAC,GAAG,EAAE,gBAAgB;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAd5B;;;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;gBAGhB,GAAG,EAAE,UAAU,EACf,GAAG,EAAE,gBAAgB,EACb,SAAS,EAAE,iBAAiB;IAwB/C;;;;;;;OAOG;IACH,IAAI,SAAS,IAAI,SAAS,CAEzB;IAEK,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAqCjC;;;;;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;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAoB7B;;;;;;;OAOG;IACH,OAAO,CAAC,oBAAoB;CAO7B"}
|
package/dist/application.js
CHANGED
|
@@ -3,7 +3,7 @@ import { CacheModule } from './cache';
|
|
|
3
3
|
import { CronManager } from './cron/cron-manager';
|
|
4
4
|
import { Container } from './di/container';
|
|
5
5
|
import { DI_TOKENS } from './di/tokens';
|
|
6
|
-
import { GlobalErrorHandler } from './errors';
|
|
6
|
+
import { ApplicationError, GlobalErrorHandler } from './errors';
|
|
7
7
|
import { I18nModule } from './i18n/i18n.module';
|
|
8
8
|
import { ConsoleTransport, JsonFormatter, LOGGER_TOKENS, LoggerService, LogLevel, PrettyFormatter } from './logger';
|
|
9
9
|
import { ModuleRegistry } from './module/module-registry';
|
|
@@ -92,6 +92,8 @@ export class Application {
|
|
|
92
92
|
if (this.initialized) {
|
|
93
93
|
return;
|
|
94
94
|
}
|
|
95
|
+
// Disable stack trace capture in production (expensive and stripped from responses)
|
|
96
|
+
ApplicationError.captureStackTraces = this.env.ENVIRONMENT !== 'production';
|
|
95
97
|
// Phase 1: Register core infrastructure modules (internal)
|
|
96
98
|
this.moduleRegistry.registerAll([
|
|
97
99
|
I18nModule,
|
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,kBAAkB,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"application.js","sourceRoot":"","sources":["../src/application.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inject-param.decorator.d.ts","sourceRoot":"","sources":["../../../src/di/decorators/inject-param.decorator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,cAAc,MAAM,iDAAiD,CAAA;AAEjF;;GAEG;AACH,eAAO,MAAM,yBAAyB,
|
|
1
|
+
{"version":3,"file":"inject-param.decorator.d.ts","sourceRoot":"","sources":["../../../src/di/decorators/inject-param.decorator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,cAAc,MAAM,iDAAiD,CAAA;AAEjF;;GAEG;AACH,eAAO,MAAM,yBAAyB,eAAqC,CAAA;AAE3E;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAA;IACb,0BAA0B;IAC1B,KAAK,EAAE,cAAc,CAAA;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAgB3E;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,cAAc,EAAE,CAKlG"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Metadata key for storing parameter injection information
|
|
3
3
|
*/
|
|
4
|
-
export const INJECT_PARAM_METADATA_KEY = Symbol('inject:param');
|
|
4
|
+
export const INJECT_PARAM_METADATA_KEY = Symbol.for('stratal:inject:param');
|
|
5
5
|
/**
|
|
6
6
|
* Mark a method parameter for DI injection
|
|
7
7
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inject-param.decorator.js","sourceRoot":"","sources":["../../../src/di/decorators/inject-param.decorator.ts"],"names":[],"mappings":"AAqBA;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"inject-param.decorator.js","sourceRoot":"","sources":["../../../src/di/decorators/inject-param.decorator.ts"],"names":[],"mappings":"AAqBA;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;AAY3E;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,WAAW,CAAI,KAAwB;IACrD,OAAO,CAAC,MAAc,EAAE,WAAwC,EAAE,cAAsB,EAAE,EAAE;QAC1F,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAA;QACnG,CAAC;QAED,MAAM,kBAAkB,GACrB,OAAO,CAAC,WAAW,CAAC,yBAAyB,EAAE,MAAM,EAAE,WAAW,CAAkC,IAAI,EAAE,CAAA;QAE7G,kBAAkB,CAAC,IAAI,CAAC;YACtB,KAAK,EAAE,cAAc;YACrB,KAAK;SACN,CAAC,CAAA;QAEF,OAAO,CAAC,cAAc,CAAC,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,EAAE,WAAW,CAAC,CAAA;IAC5F,CAAC,CAAA;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,WAA4B;IAC9E,MAAM,UAAU,GACb,OAAO,CAAC,WAAW,CAAC,yBAAyB,EAAE,MAAM,EAAE,WAAW,CAAkC,IAAI,EAAE,CAAA;IAE7G,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;AACrD,CAAC"}
|
|
@@ -23,6 +23,12 @@ import type { ErrorCode } from './error-codes';
|
|
|
23
23
|
* - This ensures errors are localized based on the user's locale (from X-Locale header)
|
|
24
24
|
*/
|
|
25
25
|
export declare abstract class ApplicationError extends Error {
|
|
26
|
+
/**
|
|
27
|
+
* Controls whether stack traces are captured.
|
|
28
|
+
* Set to false in production to skip the expensive Error.captureStackTrace() call,
|
|
29
|
+
* since stack traces are stripped from responses in production anyway.
|
|
30
|
+
*/
|
|
31
|
+
static captureStackTraces: boolean;
|
|
26
32
|
/**
|
|
27
33
|
* Type-safe error code from ERROR_CODES registry
|
|
28
34
|
* See error-codes.ts for the complete registry
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"application-error.d.ts","sourceRoot":"","sources":["../../src/errors/application-error.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAE9C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,8BAAsB,gBAAiB,SAAQ,KAAK;IAClD;;;OAGG;IACH,SAAgB,IAAI,EAAE,SAAS,CAAA;IAE/B;;OAEG;IACH,SAAgB,SAAS,EAAE,MAAM,CAAA;IAEjC;;;;;OAKG;IACH,SAAgB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAElD;;;;OAIG;gBAED,UAAU,EAAE,WAAW,EACvB,IAAI,EAAE,SAAS,EACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"application-error.d.ts","sourceRoot":"","sources":["../../src/errors/application-error.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAE9C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,8BAAsB,gBAAiB,SAAQ,KAAK;IAClD;;;;OAIG;IACH,MAAM,CAAC,kBAAkB,UAAO;IAEhC;;;OAGG;IACH,SAAgB,IAAI,EAAE,SAAS,CAAA;IAE/B;;OAEG;IACH,SAAgB,SAAS,EAAE,MAAM,CAAA;IAEjC;;;;;OAKG;IACH,SAAgB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAElD;;;;OAIG;gBAED,UAAU,EAAE,WAAW,EACvB,IAAI,EAAE,SAAS,EACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAqBpC;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAsB7B;;;;;;OAMG;IACH,eAAe,CAAC,GAAG,EAAE,WAAW,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,aAAa;IAY5E;;;;OAIG;IACH,MAAM,IAAI,aAAa;CAGxB"}
|
|
@@ -20,6 +20,12 @@
|
|
|
20
20
|
* - This ensures errors are localized based on the user's locale (from X-Locale header)
|
|
21
21
|
*/
|
|
22
22
|
export class ApplicationError extends Error {
|
|
23
|
+
/**
|
|
24
|
+
* Controls whether stack traces are captured.
|
|
25
|
+
* Set to false in production to skip the expensive Error.captureStackTrace() call,
|
|
26
|
+
* since stack traces are stripped from responses in production anyway.
|
|
27
|
+
*/
|
|
28
|
+
static captureStackTraces = true;
|
|
23
29
|
/**
|
|
24
30
|
* Type-safe error code from ERROR_CODES registry
|
|
25
31
|
* See error-codes.ts for the complete registry
|
|
@@ -51,8 +57,9 @@ export class ApplicationError extends Error {
|
|
|
51
57
|
this.timestamp = new Date().toISOString();
|
|
52
58
|
this.metadata = metadata;
|
|
53
59
|
// Capture stack trace, excluding constructor call from it
|
|
60
|
+
// Skip in production where stack traces are stripped from responses anyway
|
|
54
61
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- captureStackTrace is V8-specific, not always present
|
|
55
|
-
if (Error.captureStackTrace) {
|
|
62
|
+
if (ApplicationError.captureStackTraces && Error.captureStackTrace) {
|
|
56
63
|
Error.captureStackTrace(this, this.constructor);
|
|
57
64
|
}
|
|
58
65
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"application-error.js","sourceRoot":"","sources":["../../src/errors/application-error.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,OAAgB,gBAAiB,SAAQ,KAAK;IAClD;;;OAGG;IACa,IAAI,CAAW;IAE/B;;OAEG;IACa,SAAS,CAAQ;IAEjC;;;;;OAKG;IACa,QAAQ,CAA0B;IAElD;;;;OAIG;IACH,YACE,UAAuB,EACvB,IAAe,EACf,QAAkC;QAElC,yGAAyG;QACzG,KAAK,CAAC,UAAU,CAAC,CAAA;QAEjB,yDAAyD;QACzD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAEjD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;QACzC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QAExB,0DAA0D;QAC1D,+HAA+H;QAC/H,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"application-error.js","sourceRoot":"","sources":["../../src/errors/application-error.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,OAAgB,gBAAiB,SAAQ,KAAK;IAClD;;;;OAIG;IACH,MAAM,CAAC,kBAAkB,GAAG,IAAI,CAAA;IAEhC;;;OAGG;IACa,IAAI,CAAW;IAE/B;;OAEG;IACa,SAAS,CAAQ;IAEjC;;;;;OAKG;IACa,QAAQ,CAA0B;IAElD;;;;OAIG;IACH,YACE,UAAuB,EACvB,IAAe,EACf,QAAkC;QAElC,yGAAyG;QACzG,KAAK,CAAC,UAAU,CAAC,CAAA;QAEjB,yDAAyD;QACzD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAEjD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;QACzC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QAExB,0DAA0D;QAC1D,2EAA2E;QAC3E,+HAA+H;QAC/H,IAAI,gBAAgB,CAAC,kBAAkB,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YACnE,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;QACjD,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACK,MAAM,CAAC,cAAc,CAC3B,QAAkC;QAElC,IAAI,CAAC,QAAQ;YAAE,OAAO,SAAS,CAAA;QAE/B,+CAA+C;QAC/C,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;QAE/C,MAAM,QAAQ,GAA4B,EAAE,CAAA;QAC5C,IAAI,iBAAiB,GAAG,KAAK,CAAA;QAE7B,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,IAAI,GAAG,IAAI,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;gBACnD,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;gBAC7B,iBAAiB,GAAG,IAAI,CAAA;YAC1B,CAAC;QACH,CAAC;QAED,0DAA0D;QAC1D,OAAO,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAA;IACjD,CAAC;IAED;;;;;;OAMG;IACH,eAAe,CAAC,GAAgB,EAAE,iBAA0B;QAC1D,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,iBAAiB,IAAI,IAAI,CAAC,OAAO,EAAE,uEAAuE;YACnH,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,4DAA4D;YAC5D,QAAQ,EAAE,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;YACxD,gDAAgD;YAChD,KAAK,EAAE,GAAG,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;SACtD,CAAA;IACH,CAAC;IAED;;;;OAIG;IACH,MAAM;QACJ,OAAO,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAA;IAC5C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-error-handler.d.ts","sourceRoot":"","sources":["../../src/errors/global-error-handler.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAA;AAExC,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,oBAAoB,CAAA;AACnE,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,WAAW,CAAA;AAE7D,OAAO,KAAK,EAAe,aAAa,EAAE,MAAM,kBAAkB,CAAA;AASlE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,qBACa,kBAAkB;IAGU,OAAO,CAAC,QAAQ,CAAC,MAAM;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI;IAEtD,OAAO,CAAC,QAAQ,CAAC,GAAG;IALtB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;gBAEe,MAAM,EAAE,aAAa,EACzB,IAAI,EAAE,YAAY,EAEnD,GAAG,EAAE,UAAU;IAKlC;;;;;OAKG;IACH,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa;
|
|
1
|
+
{"version":3,"file":"global-error-handler.d.ts","sourceRoot":"","sources":["../../src/errors/global-error-handler.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAA;AAExC,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,oBAAoB,CAAA;AACnE,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,WAAW,CAAA;AAE7D,OAAO,KAAK,EAAe,aAAa,EAAE,MAAM,kBAAkB,CAAA;AASlE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,qBACa,kBAAkB;IAGU,OAAO,CAAC,QAAQ,CAAC,MAAM;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI;IAEtD,OAAO,CAAC,QAAQ,CAAC,GAAG;IALtB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;gBAEe,MAAM,EAAE,aAAa,EACzB,IAAI,EAAE,YAAY,EAEnD,GAAG,EAAE,UAAU;IAKlC;;;;;OAKG;IACH,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa;IAwBrC;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,cAAc;IAMtB;;OAEG;IACH,OAAO,CAAC,GAAG;IAwBX;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;OAEG;IACH,OAAO,CAAC,WAAW;CAmBpB"}
|
|
@@ -74,11 +74,9 @@ let GlobalErrorHandler = class GlobalErrorHandler {
|
|
|
74
74
|
handle(error) {
|
|
75
75
|
// Check if it's an ApplicationError
|
|
76
76
|
if (isApplicationError(error)) {
|
|
77
|
-
|
|
78
|
-
// Translate message
|
|
79
|
-
// Works in: HTTP requests, Queue processing (i18n available via request container)
|
|
80
|
-
// Falls back in: RPC/Startup (i18n might not be available)
|
|
77
|
+
// Translate once, use for both logging and response
|
|
81
78
|
const translatedMessage = this.translateError(error);
|
|
79
|
+
this.log(error, translatedMessage);
|
|
82
80
|
return error.toErrorResponse(this.environment, translatedMessage);
|
|
83
81
|
}
|
|
84
82
|
// Unexpected error - wrap in InternalError
|
|
@@ -110,11 +108,11 @@ let GlobalErrorHandler = class GlobalErrorHandler {
|
|
|
110
108
|
/**
|
|
111
109
|
* Log an ApplicationError with appropriate severity
|
|
112
110
|
*/
|
|
113
|
-
log(error) {
|
|
111
|
+
log(error, translatedMessage) {
|
|
114
112
|
const severity = this.getSeverity(error.code);
|
|
115
113
|
const logData = {
|
|
116
114
|
code: error.code,
|
|
117
|
-
message:
|
|
115
|
+
message: translatedMessage,
|
|
118
116
|
timestamp: error.timestamp,
|
|
119
117
|
metadata: error.metadata,
|
|
120
118
|
name: error.name,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-error-handler.js","sourceRoot":"","sources":["../../src/errors/global-error-handler.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEjD,OAAO,EAAE,aAAa,EAAsB,MAAM,WAAW,CAAA;AAG7D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAO3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEI,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAG2B;IACJ;IAEjC;IALF,WAAW,CAAa;IACzC,YACwD,MAAqB,EACzB,IAAkB,EAEnD,GAAe;QAHsB,WAAM,GAAN,MAAM,CAAe;QACzB,SAAI,GAAJ,IAAI,CAAc;QAEnD,QAAG,GAAH,GAAG,CAAY;QAEhC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAA0B,CAAA;IACxD,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,KAAc;QACnB,oCAAoC;QACpC,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"global-error-handler.js","sourceRoot":"","sources":["../../src/errors/global-error-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/guards/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAE3C;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;;OAKG;IACH,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CAChE;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,WAAW,CAAC,WAAW,CAAC,CAAA;AAEjD;;;GAGG;AACH,MAAM,MAAM,KAAK,GAAG,UAAU,GAAG,WAAW,CAAA;AAE5C;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,KAAK,EAAE,CAAA;CAChB;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/guards/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAE3C;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;;OAKG;IACH,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CAChE;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,WAAW,CAAC,WAAW,CAAC,CAAA;AAEjD;;;GAGG;AACH,MAAM,MAAM,KAAK,GAAG,UAAU,GAAG,WAAW,CAAA;AAE5C;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,KAAK,EAAE,CAAA;CAChB;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,eAA+B,CAAA"}
|
package/dist/guards/types.js
CHANGED
package/dist/guards/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/guards/types.ts"],"names":[],"mappings":"AA6DA;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/guards/types.ts"],"names":[],"mappings":"AA6DA;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Request-scoped service for translations.
|
|
5
5
|
* Injects RouterContext to access request-specific locale.
|
|
6
|
+
* Uses pre-built CoreContext from MessageLoaderService (singleton) for zero-cost lookups.
|
|
6
7
|
*/
|
|
7
8
|
import { RouterContext } from '../../router';
|
|
8
9
|
import type { II18nService, MessageKeys, MessageParams } from '../i18n.types';
|
|
@@ -30,7 +31,6 @@ import type { MessageLoaderService } from './message-loader.service';
|
|
|
30
31
|
export declare class I18nService implements II18nService {
|
|
31
32
|
private readonly loader;
|
|
32
33
|
private readonly routerContext?;
|
|
33
|
-
private intlContext;
|
|
34
34
|
constructor(loader: MessageLoaderService, routerContext?: RouterContext | undefined);
|
|
35
35
|
/**
|
|
36
36
|
* Translate a message key
|
|
@@ -46,17 +46,5 @@ export declare class I18nService implements II18nService {
|
|
|
46
46
|
* @returns Current locale code from RouterContext or default locale
|
|
47
47
|
*/
|
|
48
48
|
getLocale(): string;
|
|
49
|
-
/**
|
|
50
|
-
* Get or create intlify CoreContext
|
|
51
|
-
* Lazily initializes on first translation call
|
|
52
|
-
*/
|
|
53
|
-
private getIntlContext;
|
|
54
|
-
/**
|
|
55
|
-
* Flatten nested messages to dot-notation
|
|
56
|
-
*
|
|
57
|
-
* Converts { auth: { login: { title: 'Sign In' } } }
|
|
58
|
-
* to { 'auth.login.title': 'Sign In' }
|
|
59
|
-
*/
|
|
60
|
-
private flattenMessages;
|
|
61
49
|
}
|
|
62
50
|
//# sourceMappingURL=i18n.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.service.d.ts","sourceRoot":"","sources":["../../../src/i18n/services/i18n.service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"i18n.service.d.ts","sourceRoot":"","sources":["../../../src/i18n/services/i18n.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAAiB,aAAa,EAAE,MAAM,cAAc,CAAA;AAE3D,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AAEpE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBACa,WAAY,YAAW,YAAY;IAET,OAAO,CAAC,QAAQ,CAAC,MAAM;IACC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;gBADtC,MAAM,EAAE,oBAAoB,EACJ,aAAa,CAAC,EAAE,aAAa,YAAA;IAI3G;;;;;;OAMG;IACH,CAAC,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,MAAM;IAUnD;;;;OAIG;IACH,SAAS,IAAI,MAAM;CAGpB"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Request-scoped service for translations.
|
|
5
5
|
* Injects RouterContext to access request-specific locale.
|
|
6
|
+
* Uses pre-built CoreContext from MessageLoaderService (singleton) for zero-cost lookups.
|
|
6
7
|
*/
|
|
7
8
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
8
9
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
@@ -16,7 +17,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
16
17
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
17
18
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
18
19
|
};
|
|
19
|
-
import {
|
|
20
|
+
import { translate } from '@intlify/core-base';
|
|
20
21
|
import { inject } from 'tsyringe';
|
|
21
22
|
import { Transient } from '../../di/decorators';
|
|
22
23
|
import { ROUTER_TOKENS, RouterContext } from '../../router';
|
|
@@ -44,7 +45,6 @@ import { I18N_TOKENS } from '../i18n.tokens';
|
|
|
44
45
|
let I18nService = class I18nService {
|
|
45
46
|
loader;
|
|
46
47
|
routerContext;
|
|
47
|
-
intlContext;
|
|
48
48
|
constructor(loader, routerContext) {
|
|
49
49
|
this.loader = loader;
|
|
50
50
|
this.routerContext = routerContext;
|
|
@@ -57,7 +57,7 @@ let I18nService = class I18nService {
|
|
|
57
57
|
* @returns Translated string
|
|
58
58
|
*/
|
|
59
59
|
t(key, params) {
|
|
60
|
-
const context = this.
|
|
60
|
+
const context = this.loader.getCoreContext(this.getLocale());
|
|
61
61
|
const result = params !== undefined
|
|
62
62
|
? translate(context, key, params)
|
|
63
63
|
: translate(context, key);
|
|
@@ -71,42 +71,6 @@ let I18nService = class I18nService {
|
|
|
71
71
|
getLocale() {
|
|
72
72
|
return this.routerContext?.getLocale() ?? 'en';
|
|
73
73
|
}
|
|
74
|
-
/**
|
|
75
|
-
* Get or create intlify CoreContext
|
|
76
|
-
* Lazily initializes on first translation call
|
|
77
|
-
*/
|
|
78
|
-
getIntlContext() {
|
|
79
|
-
if (!this.intlContext) {
|
|
80
|
-
const locale = this.getLocale();
|
|
81
|
-
const messages = this.loader.getMessages(locale);
|
|
82
|
-
this.intlContext = createCoreContext({
|
|
83
|
-
locale,
|
|
84
|
-
messages: { [locale]: this.flattenMessages(messages) },
|
|
85
|
-
missingWarn: false,
|
|
86
|
-
fallbackWarn: false
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
return this.intlContext;
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Flatten nested messages to dot-notation
|
|
93
|
-
*
|
|
94
|
-
* Converts { auth: { login: { title: 'Sign In' } } }
|
|
95
|
-
* to { 'auth.login.title': 'Sign In' }
|
|
96
|
-
*/
|
|
97
|
-
flattenMessages(messages, prefix = '') {
|
|
98
|
-
return Object.keys(messages).reduce((acc, key) => {
|
|
99
|
-
const value = messages[key];
|
|
100
|
-
const newKey = prefix ? `${prefix}.${key}` : key;
|
|
101
|
-
if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
|
|
102
|
-
Object.assign(acc, this.flattenMessages(value, newKey));
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
acc[newKey] = String(value);
|
|
106
|
-
}
|
|
107
|
-
return acc;
|
|
108
|
-
}, {});
|
|
109
|
-
}
|
|
110
74
|
};
|
|
111
75
|
I18nService = __decorate([
|
|
112
76
|
Transient(I18N_TOKENS.I18nService),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.service.js","sourceRoot":"","sources":["../../../src/i18n/services/i18n.service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"i18n.service.js","sourceRoot":"","sources":["../../../src/i18n/services/i18n.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;;;;;;;;;;;;;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAI5C;;;;;;;;;;;;;;;;;;;GAmBG;AAEI,IAAM,WAAW,GAAjB,MAAM,WAAW;IAEgC;IACwB;IAF9E,YACsD,MAA4B,EACJ,aAA6B;QADrD,WAAM,GAAN,MAAM,CAAsB;QACJ,kBAAa,GAAb,aAAa,CAAgB;IAE3G,CAAC;IAED;;;;;;OAMG;IACH,CAAC,CAAC,GAAgB,EAAE,MAAsB;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;QAE5D,MAAM,MAAM,GAAG,MAAM,KAAK,SAAS;YACjC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC;YACjC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;QAE3B,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAA;IAClD,CAAC;IAED;;;;OAIG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,IAAI,IAAI,CAAA;IAChD,CAAC;CACF,CAAA;AAhCY,WAAW;IADvB,SAAS,CAAC,WAAW,CAAC,WAAW,CAAC;IAG9B,WAAA,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAA;IACjC,WAAA,MAAM,CAAC,aAAa,CAAC,aAAa,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAA;+CAAkC,aAAa;GAHhG,WAAW,CAgCvB"}
|
|
@@ -3,14 +3,25 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Singleton service that loads and caches all locale messages at startup.
|
|
5
5
|
* Merges core messages (from packages/modules) with app messages (from forRoot options).
|
|
6
|
+
* Lazily builds and caches CoreContext per locale on first access.
|
|
6
7
|
*/
|
|
8
|
+
import type { CoreContext } from '@intlify/core-base';
|
|
7
9
|
import type { I18nModuleOptions } from '../i18n.options';
|
|
8
10
|
export declare class MessageLoaderService {
|
|
9
11
|
private readonly options?;
|
|
10
12
|
private readonly cache;
|
|
13
|
+
private readonly contextCache;
|
|
11
14
|
private readonly locales;
|
|
12
15
|
private readonly defaultLocale;
|
|
13
16
|
constructor(options?: I18nModuleOptions | undefined);
|
|
17
|
+
/**
|
|
18
|
+
* Get CoreContext for a locale (lazily built and cached on first access)
|
|
19
|
+
* Falls back to default locale if locale not found
|
|
20
|
+
*
|
|
21
|
+
* @param locale - Locale code
|
|
22
|
+
* @returns Cached CoreContext ready for translation
|
|
23
|
+
*/
|
|
24
|
+
getCoreContext(locale: string): CoreContext;
|
|
14
25
|
/**
|
|
15
26
|
* Get messages for a specific locale
|
|
16
27
|
* Falls back to default locale if locale not found
|
|
@@ -38,6 +49,13 @@ export declare class MessageLoaderService {
|
|
|
38
49
|
* @returns Default locale code
|
|
39
50
|
*/
|
|
40
51
|
getDefaultLocale(): string;
|
|
52
|
+
/**
|
|
53
|
+
* Flatten nested messages to dot-notation
|
|
54
|
+
*
|
|
55
|
+
* Converts { auth: { login: { title: 'Sign In' } } }
|
|
56
|
+
* to { 'auth.login.title': 'Sign In' }
|
|
57
|
+
*/
|
|
58
|
+
private flattenMessages;
|
|
41
59
|
/**
|
|
42
60
|
* Deep merge two objects
|
|
43
61
|
* App messages override core messages at leaf level
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-loader.service.d.ts","sourceRoot":"","sources":["../../../src/i18n/services/message-loader.service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"message-loader.service.d.ts","sourceRoot":"","sources":["../../../src/i18n/services/message-loader.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAIrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAIxD,qBACa,oBAAoB;IAQ7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAP3B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsC;IAC5D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA0B;IACvD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAQ;gBAInB,OAAO,CAAC,EAAE,iBAAiB,YAAA;IA6B9C;;;;;;OAMG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW;IAwB3C;;;;;;OAMG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IASpD;;;;OAIG;IACH,mBAAmB,IAAI,MAAM,EAAE;IAI/B;;;;;OAKG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAI1C;;;;OAIG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAoBvB;;;OAGG;IACH,OAAO,CAAC,SAAS;CA+BlB"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Singleton service that loads and caches all locale messages at startup.
|
|
5
5
|
* Merges core messages (from packages/modules) with app messages (from forRoot options).
|
|
6
|
+
* Lazily builds and caches CoreContext per locale on first access.
|
|
6
7
|
*/
|
|
7
8
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
8
9
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
@@ -16,6 +17,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
16
17
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
17
18
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
18
19
|
};
|
|
20
|
+
import { createCoreContext } from '@intlify/core-base';
|
|
19
21
|
import { inject } from 'tsyringe';
|
|
20
22
|
import { Transient } from '../../di/decorators';
|
|
21
23
|
import { I18N_TOKENS } from '../i18n.tokens';
|
|
@@ -23,12 +25,14 @@ import { getLocales, getMessages } from '../messages';
|
|
|
23
25
|
let MessageLoaderService = class MessageLoaderService {
|
|
24
26
|
options;
|
|
25
27
|
cache;
|
|
28
|
+
contextCache;
|
|
26
29
|
locales;
|
|
27
30
|
defaultLocale;
|
|
28
31
|
constructor(options) {
|
|
29
32
|
this.options = options;
|
|
30
33
|
this.defaultLocale = this.options?.defaultLocale ?? 'en';
|
|
31
34
|
this.cache = new Map();
|
|
35
|
+
this.contextCache = new Map();
|
|
32
36
|
// Get core messages (always available)
|
|
33
37
|
const coreMessages = getMessages();
|
|
34
38
|
const coreLocales = getLocales();
|
|
@@ -38,14 +42,44 @@ let MessageLoaderService = class MessageLoaderService {
|
|
|
38
42
|
const appLocales = Object.keys(appMessages);
|
|
39
43
|
const allLocales = [...new Set([...coreLocales, ...appLocales])];
|
|
40
44
|
this.locales = allLocales;
|
|
41
|
-
// Merge messages for each locale
|
|
45
|
+
// Merge messages for each locale (CoreContext built lazily on first access)
|
|
42
46
|
for (const locale of allLocales) {
|
|
43
47
|
const coreLocaleMessages = coreMessages[locale] ?? {};
|
|
44
48
|
const appLocaleMessages = appMessages[locale] ?? {};
|
|
45
49
|
// Deep merge: core defaults + app overrides
|
|
46
|
-
|
|
50
|
+
const merged = this.deepMerge(coreLocaleMessages, appLocaleMessages);
|
|
51
|
+
this.cache.set(locale, merged);
|
|
47
52
|
}
|
|
48
53
|
}
|
|
54
|
+
/**
|
|
55
|
+
* Get CoreContext for a locale (lazily built and cached on first access)
|
|
56
|
+
* Falls back to default locale if locale not found
|
|
57
|
+
*
|
|
58
|
+
* @param locale - Locale code
|
|
59
|
+
* @returns Cached CoreContext ready for translation
|
|
60
|
+
*/
|
|
61
|
+
getCoreContext(locale) {
|
|
62
|
+
const cached = this.contextCache.get(locale);
|
|
63
|
+
if (cached)
|
|
64
|
+
return cached;
|
|
65
|
+
// Resolve effective locale (fallback to default if unsupported)
|
|
66
|
+
const effectiveLocale = this.cache.has(locale) ? locale : this.defaultLocale;
|
|
67
|
+
// Check if effective locale already cached (handles fallback)
|
|
68
|
+
const cachedEffective = this.contextCache.get(effectiveLocale);
|
|
69
|
+
if (cachedEffective)
|
|
70
|
+
return cachedEffective;
|
|
71
|
+
// Build and cache on first access
|
|
72
|
+
const messages = this.cache.get(effectiveLocale) ?? {};
|
|
73
|
+
const flattened = this.flattenMessages(messages);
|
|
74
|
+
const ctx = createCoreContext({
|
|
75
|
+
locale: effectiveLocale,
|
|
76
|
+
messages: { [effectiveLocale]: flattened },
|
|
77
|
+
missingWarn: false,
|
|
78
|
+
fallbackWarn: false,
|
|
79
|
+
});
|
|
80
|
+
this.contextCache.set(effectiveLocale, ctx);
|
|
81
|
+
return ctx;
|
|
82
|
+
}
|
|
49
83
|
/**
|
|
50
84
|
* Get messages for a specific locale
|
|
51
85
|
* Falls back to default locale if locale not found
|
|
@@ -86,6 +120,26 @@ let MessageLoaderService = class MessageLoaderService {
|
|
|
86
120
|
getDefaultLocale() {
|
|
87
121
|
return this.defaultLocale;
|
|
88
122
|
}
|
|
123
|
+
/**
|
|
124
|
+
* Flatten nested messages to dot-notation
|
|
125
|
+
*
|
|
126
|
+
* Converts { auth: { login: { title: 'Sign In' } } }
|
|
127
|
+
* to { 'auth.login.title': 'Sign In' }
|
|
128
|
+
*/
|
|
129
|
+
flattenMessages(messages, prefix = '') {
|
|
130
|
+
const result = {};
|
|
131
|
+
for (const key of Object.keys(messages)) {
|
|
132
|
+
const value = messages[key];
|
|
133
|
+
const newKey = prefix ? `${prefix}.${key}` : key;
|
|
134
|
+
if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
|
|
135
|
+
Object.assign(result, this.flattenMessages(value, newKey));
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
result[newKey] = String(value);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return result;
|
|
142
|
+
}
|
|
89
143
|
/**
|
|
90
144
|
* Deep merge two objects
|
|
91
145
|
* App messages override core messages at leaf level
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-loader.service.js","sourceRoot":"","sources":["../../../src/i18n/services/message-loader.service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"message-loader.service.js","sourceRoot":"","sources":["../../../src/i18n/services/message-loader.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.decorator.d.ts","sourceRoot":"","sources":["../../src/module/module.decorator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAE3C,OAAO,KAAK,EAAE,aAAa,EAAY,MAAM,SAAS,CAAA;AAEtD,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"module.decorator.d.ts","sourceRoot":"","sources":["../../src/module/module.decorator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAE3C,OAAO,KAAK,EAAE,aAAa,EAAY,MAAM,SAAS,CAAA;AAEtD,eAAO,MAAM,kBAAkB,eAAuC,CAAA;AAUtE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,aAAa,IACnC,SAAS,SAAS,QAAQ,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,EAAE,QAAQ,SAAS,KAAG,SAAS,CAcpG;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,aAAa,GAAG,SAAS,CAE/E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,WAAW,CAKpE"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { instancePerContainerCachingFactory, registry } from 'tsyringe';
|
|
8
8
|
import { InvalidModuleProviderError } from './errors';
|
|
9
|
-
export const MODULE_OPTIONS_KEY = Symbol('module:options');
|
|
9
|
+
export const MODULE_OPTIONS_KEY = Symbol.for('stratal:module:options');
|
|
10
10
|
/**
|
|
11
11
|
* `@Module` decorator - defines a module with imports, providers, controllers, consumers, jobs
|
|
12
12
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.decorator.js","sourceRoot":"","sources":["../../src/module/module.decorator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,kCAAkC,EAAkB,QAAQ,EAAE,MAAM,UAAU,CAAA;AAIvF,OAAO,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAA;AAGrD,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"module.decorator.js","sourceRoot":"","sources":["../../src/module/module.decorator.ts"],"names":[],"mappings":"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"}
|
package/dist/router/constants.js
CHANGED
|
@@ -11,12 +11,12 @@ export const ROUTER_CONTEXT_KEYS = {
|
|
|
11
11
|
* Using symbols to avoid collisions with other decorators
|
|
12
12
|
*/
|
|
13
13
|
export const ROUTE_METADATA_KEYS = {
|
|
14
|
-
CONTROLLER_ROUTE: Symbol('controller:route'),
|
|
15
|
-
CONTROLLER_OPTIONS: Symbol('controller:options'),
|
|
16
|
-
CONTROLLER_MIDDLEWARES: Symbol('controller:middlewares'),
|
|
17
|
-
ROUTE_CONFIG: Symbol('route:config'),
|
|
18
|
-
DECORATED_METHODS: Symbol('decorated:methods'),
|
|
19
|
-
AUTH_GUARD: Symbol('auth:guard')
|
|
14
|
+
CONTROLLER_ROUTE: Symbol.for('stratal:controller:route'),
|
|
15
|
+
CONTROLLER_OPTIONS: Symbol.for('stratal:controller:options'),
|
|
16
|
+
CONTROLLER_MIDDLEWARES: Symbol.for('stratal:controller:middlewares'),
|
|
17
|
+
ROUTE_CONFIG: Symbol.for('stratal:route:config'),
|
|
18
|
+
DECORATED_METHODS: Symbol.for('stratal:decorated:methods'),
|
|
19
|
+
AUTH_GUARD: Symbol.for('stratal:auth:guard')
|
|
20
20
|
};
|
|
21
21
|
/**
|
|
22
22
|
* Security scheme identifiers for OpenAPI
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/router/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,iBAAiB,EAAE,kBAAkB;IACrC,MAAM,EAAE,QAAQ;CACyB,CAAA;AAE3C;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,gBAAgB,EAAE,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/router/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,iBAAiB,EAAE,kBAAkB;IACrC,MAAM,EAAE,QAAQ;CACyB,CAAA;AAE3C;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,gBAAgB,EAAE,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC;IACxD,kBAAkB,EAAE,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC;IAC5D,sBAAsB,EAAE,MAAM,CAAC,GAAG,CAAC,gCAAgC,CAAC;IACpE,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC;IAChD,iBAAiB,EAAE,MAAM,CAAC,GAAG,CAAC,2BAA2B,CAAC;IAC1D,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC;CACpC,CAAA;AAEV;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,WAAW,EAAE,YAAY;IACzB,OAAO,EAAE,QAAQ;IACjB,cAAc,EAAE,eAAe;CACvB,CAAA;AAEV;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAW;IAC3C,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAW;IAC9C,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAW;IAC7C,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAW;IAChD,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAW;IACjD,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAW;CAC5C,CAAA;AAEV;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,KAAK,EAAE,GAAG;IACV,IAAI,EAAE,GAAG;IACT,MAAM,EAAE,GAAG;IACX,MAAM,EAAE,GAAG;IACX,KAAK,EAAE,GAAG;IACV,OAAO,EAAE,GAAG;CACJ,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "stratal",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.4",
|
|
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",
|
|
@@ -29,6 +29,10 @@
|
|
|
29
29
|
"engines": {
|
|
30
30
|
"node": ">=18.0.0"
|
|
31
31
|
},
|
|
32
|
+
"publishConfig": {
|
|
33
|
+
"access": "public",
|
|
34
|
+
"provenance": true
|
|
35
|
+
},
|
|
32
36
|
"files": [
|
|
33
37
|
"dist",
|
|
34
38
|
"README.md"
|
|
@@ -57,10 +61,6 @@
|
|
|
57
61
|
"./*": {
|
|
58
62
|
"types": "./dist/*/index.d.ts",
|
|
59
63
|
"import": "./dist/*/index.js"
|
|
60
|
-
},
|
|
61
|
-
"./polyfills": {
|
|
62
|
-
"types": "./dist/polyfills/index.d.ts",
|
|
63
|
-
"import": "./dist/polyfills/index.js"
|
|
64
64
|
}
|
|
65
65
|
},
|
|
66
66
|
"scripts": {
|
|
@@ -74,6 +74,7 @@
|
|
|
74
74
|
"bench:json": "vitest bench --run --outputJson benchmark-results.json",
|
|
75
75
|
"test": "vitest run",
|
|
76
76
|
"test:watch": "vitest",
|
|
77
|
+
"test:integration": "vitest run --project workerd",
|
|
77
78
|
"test:coverage": "vitest run --coverage",
|
|
78
79
|
"lint": "npx eslint .",
|
|
79
80
|
"lint:fix": "npx eslint --fix ."
|
|
@@ -136,7 +137,7 @@
|
|
|
136
137
|
"@cloudflare/vitest-pool-workers": "^0.12.18",
|
|
137
138
|
"@cloudflare/workers-types": "4.20260228.1",
|
|
138
139
|
"@react-email/components": "^1.0.8",
|
|
139
|
-
"@stratal/testing": "
|
|
140
|
+
"@stratal/testing": "0.0.4",
|
|
140
141
|
"@tus/server": "^2.3.0",
|
|
141
142
|
"@types/node": "^25.3.2",
|
|
142
143
|
"@types/nodemailer": "^7.0.11",
|
|
@@ -148,6 +149,6 @@
|
|
|
148
149
|
"react-dom": "^19.2.4",
|
|
149
150
|
"resend": "^6.9.3",
|
|
150
151
|
"typescript": "^5.9.3",
|
|
151
|
-
"vitest": "~3.2.
|
|
152
|
+
"vitest": "~3.2.0"
|
|
152
153
|
}
|
|
153
|
-
}
|
|
154
|
+
}
|