stratal 0.0.21 → 0.0.22
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 +1 -1
- package/dist/{base-email.provider-CfQCA08m.mjs → base-email.provider-BWZHIjt8.mjs} +1 -1
- package/dist/{base-email.provider-CfQCA08m.mjs.map → base-email.provider-BWZHIjt8.mjs.map} +1 -1
- package/dist/bin/quarry.mjs +46 -109
- package/dist/bin/quarry.mjs.map +1 -1
- package/dist/cache/index.d.mts +6 -46
- package/dist/cache/index.d.mts.map +1 -1
- package/dist/cache/index.mjs +20 -67
- package/dist/cache/index.mjs.map +1 -1
- package/dist/{cache.service-DsnKuNyO.d.mts → cache.service-e34gV6tz.d.mts} +8 -8
- package/dist/{cache.service-DsnKuNyO.d.mts.map → cache.service-e34gV6tz.d.mts.map} +1 -1
- package/dist/{cache.tokens-B7Rw1C9Q.mjs → cache.tokens-ovi_c52J.mjs} +1 -1
- package/dist/{cache.tokens-B7Rw1C9Q.mjs.map → cache.tokens-ovi_c52J.mjs.map} +1 -1
- package/dist/{colors-DJaRDXoS.mjs → colors-axmupKdp.mjs} +1 -1
- package/dist/{colors-DJaRDXoS.mjs.map → colors-axmupKdp.mjs.map} +1 -1
- package/dist/{command-BgSlsS4M.mjs → command-BU4ApTo5.mjs} +2 -3
- package/dist/command-BU4ApTo5.mjs.map +1 -0
- package/dist/{command-Cmmf0oHX.d.mts → command-wXfvHbBZ.d.mts} +3 -2
- package/dist/command-wXfvHbBZ.d.mts.map +1 -0
- package/dist/config/index.d.mts +24 -11
- package/dist/config/index.d.mts.map +1 -1
- package/dist/config/index.mjs +31 -57
- package/dist/config/index.mjs.map +1 -1
- package/dist/{consumer-registry-B7yUNh0q.d.mts → consumer-registry-DHQtypr1.d.mts} +1 -1
- package/dist/{consumer-registry-B7yUNh0q.d.mts.map → consumer-registry-DHQtypr1.d.mts.map} +1 -1
- package/dist/container-storage-GpNNz79X.mjs +52 -0
- package/dist/container-storage-GpNNz79X.mjs.map +1 -0
- package/dist/{controller.decorator-B9vwn0zK.mjs → controller.decorator-DIUazNU7.mjs} +8 -8
- package/dist/controller.decorator-DIUazNU7.mjs.map +1 -0
- package/dist/cron/index.d.mts +26 -5
- package/dist/cron/index.d.mts.map +1 -1
- package/dist/cron/index.mjs +1 -1
- package/dist/{cron-manager-DQSK8uoV.mjs → cron-manager-9bpN9bu4.mjs} +35 -15
- package/dist/cron-manager-9bpN9bu4.mjs.map +1 -0
- package/dist/{cron-manager-CmTimEjf.d.mts → cron-manager-CSTIBPcM.d.mts} +6 -13
- package/dist/cron-manager-CSTIBPcM.d.mts.map +1 -0
- package/dist/decorate-HgTKAYK8.mjs +16 -0
- package/dist/deep-merge-C8NgcXw4.mjs +18 -0
- package/dist/deep-merge-C8NgcXw4.mjs.map +1 -0
- package/dist/di/index.d.mts +2 -2
- package/dist/di/index.mjs +4 -3
- package/dist/di-BO1QIb5H.mjs +415 -0
- package/dist/di-BO1QIb5H.mjs.map +1 -0
- package/dist/email/index.d.mts +14 -89
- package/dist/email/index.d.mts.map +1 -1
- package/dist/email/index.mjs +25 -125
- package/dist/email/index.mjs.map +1 -1
- package/dist/en-BPP6h6y5.mjs +202 -0
- package/dist/en-BPP6h6y5.mjs.map +1 -0
- package/dist/{env-D1rcZ8_r.d.mts → env-DKSbuBi5.d.mts} +1 -1
- package/dist/env-DKSbuBi5.d.mts.map +1 -0
- package/dist/errors/index.d.mts +2 -2
- package/dist/errors/index.mjs +4 -2
- package/dist/errors-BBZTnjdq.mjs +333 -0
- package/dist/errors-BBZTnjdq.mjs.map +1 -0
- package/dist/events/index.d.mts +2 -2
- package/dist/events/index.d.mts.map +1 -1
- package/dist/events/index.mjs +1 -1
- package/dist/{events-CzCV8jI8.mjs → events-D1KdDaiP.mjs} +11 -11
- package/dist/events-D1KdDaiP.mjs.map +1 -0
- package/dist/exception-context-B4kM-M53.mjs +429 -0
- package/dist/exception-context-B4kM-M53.mjs.map +1 -0
- package/dist/{gateway-context-CXmXtaUP.mjs → gateway-context-CFe6a9gz.mjs} +19 -31
- package/dist/gateway-context-CFe6a9gz.mjs.map +1 -0
- package/dist/guards/index.d.mts +3 -3
- package/dist/guards/index.d.mts.map +1 -1
- package/dist/guards/index.mjs +1 -1
- package/dist/{guards-DU1_J9YA.mjs → guards-Ced-uNIF.mjs} +6 -5
- package/dist/guards-Ced-uNIF.mjs.map +1 -0
- package/dist/{http-method.decorator-BrgHMdLQ.mjs → http-method.decorator-CdjKFJZZ.mjs} +7 -6
- package/dist/http-method.decorator-CdjKFJZZ.mjs.map +1 -0
- package/dist/i18n/index.d.mts +238 -3
- package/dist/i18n/index.d.mts.map +1 -0
- package/dist/i18n/index.mjs +39 -3
- package/dist/i18n/index.mjs.map +1 -0
- package/dist/i18n/messages/en/index.d.mts +2 -2
- package/dist/i18n/messages/en/index.mjs +2 -2
- package/dist/i18n/utils/index.d.mts +4 -26
- package/dist/i18n/utils/index.d.mts.map +1 -1
- package/dist/i18n/utils/index.mjs +2 -2
- package/dist/i18n/validation/index.d.mts +3 -2
- package/dist/i18n/validation/index.mjs +4 -2
- package/dist/i18n.module-BlXrtAlV.mjs +219 -0
- package/dist/i18n.module-BlXrtAlV.mjs.map +1 -0
- package/dist/i18n.tokens-hwRpmjRq.mjs +19 -0
- package/dist/i18n.tokens-hwRpmjRq.mjs.map +1 -0
- package/dist/{index-7-hU3GTV.d.mts → index-B4UBK-2T.d.mts} +1 -1
- package/dist/{index-7-hU3GTV.d.mts.map → index-B4UBK-2T.d.mts.map} +1 -1
- package/dist/index-BtlE9RuO.d.mts +124 -0
- package/dist/index-BtlE9RuO.d.mts.map +1 -0
- package/dist/{index-DUzWs0z7.d.mts → index-CW1YHSft.d.mts} +71 -167
- package/dist/index-CW1YHSft.d.mts.map +1 -0
- package/dist/{index-ByOyTmqf.d.mts → index-DEncMcC6.d.mts} +554 -2237
- package/dist/index-DEncMcC6.d.mts.map +1 -0
- package/dist/index-Dj5IMwtr.d.mts +44 -0
- package/dist/index-Dj5IMwtr.d.mts.map +1 -0
- package/dist/{index-C1KvMncZ.d.mts → index-KMgSCSM7.d.mts} +3 -108
- package/dist/index-KMgSCSM7.d.mts.map +1 -0
- package/dist/index.d.mts +5 -43
- package/dist/index.mjs +1 -1
- package/dist/{is-command-C6a7WTPw.mjs → is-command-CX5rAfZW.mjs} +2 -2
- package/dist/{is-command-C6a7WTPw.mjs.map → is-command-CX5rAfZW.mjs.map} +1 -1
- package/dist/{is-seeder-CebjZCDn.mjs → is-seeder-CYCtELlm.mjs} +1 -1
- package/dist/{is-seeder-CebjZCDn.mjs.map → is-seeder-CYCtELlm.mjs.map} +1 -1
- package/dist/logger/index.d.mts +2 -2
- package/dist/logger/index.mjs +170 -2
- package/dist/logger/index.mjs.map +1 -0
- package/dist/macroable/index.d.mts +1 -1
- package/dist/macroable/index.mjs +1 -1
- package/dist/{macroable-BmufBshB.mjs → macroable-DzlfzT50.mjs} +1 -1
- package/dist/{macroable-BmufBshB.mjs.map → macroable-DzlfzT50.mjs.map} +1 -1
- package/dist/metadata-BVkc4aUu.mjs +39 -0
- package/dist/metadata-BVkc4aUu.mjs.map +1 -0
- package/dist/module/index.d.mts +6 -24
- package/dist/module/index.d.mts.map +1 -1
- package/dist/module/index.mjs +2 -2
- package/dist/module-xYoHba6B.mjs +422 -0
- package/dist/module-xYoHba6B.mjs.map +1 -0
- package/dist/openapi/index.d.mts +3 -3
- package/dist/openapi/index.d.mts.map +1 -1
- package/dist/openapi/index.mjs +1 -2
- package/dist/openapi-C6lm0RmV.mjs +483 -0
- package/dist/openapi-C6lm0RmV.mjs.map +1 -0
- package/dist/{openapi.service-Bt9bCIrd.d.mts → openapi.service-CrLlsXAd.d.mts} +3 -3
- package/dist/openapi.service-CrLlsXAd.d.mts.map +1 -0
- package/dist/quarry/index.d.mts +5 -163
- package/dist/quarry/index.d.mts.map +1 -1
- package/dist/quarry/index.mjs +5 -5
- package/dist/quarry/runner.d.mts +184 -0
- package/dist/quarry/runner.d.mts.map +1 -0
- package/dist/quarry/runner.mjs +775 -0
- package/dist/quarry/runner.mjs.map +1 -0
- package/dist/quarry-registry-D4hIGScf.d.mts +69 -0
- package/dist/quarry-registry-D4hIGScf.d.mts.map +1 -0
- package/dist/quarry-registry-DkraZNwn.mjs +311 -0
- package/dist/quarry-registry-DkraZNwn.mjs.map +1 -0
- package/dist/queue/index.d.mts +3 -3
- package/dist/queue/index.mjs +26 -28
- package/dist/queue/index.mjs.map +1 -1
- package/dist/{queue.module-BhCjZp6H.mjs → queue.module-DeWJ0tQM.mjs} +59 -113
- package/dist/queue.module-DeWJ0tQM.mjs.map +1 -0
- package/dist/{r2-storage.provider-DuonKeYm.mjs → r2-storage.provider-Hfm6LdZQ.mjs} +5 -5
- package/dist/r2-storage.provider-Hfm6LdZQ.mjs.map +1 -0
- package/dist/{rate-limit.decorator-6qzNcSOt.mjs → rate-limit.decorator-D69zdZbp.mjs} +6 -11
- package/dist/rate-limit.decorator-D69zdZbp.mjs.map +1 -0
- package/dist/rate-limiter/index.d.mts +11 -50
- package/dist/rate-limiter/index.d.mts.map +1 -1
- package/dist/rate-limiter/index.mjs +16 -30
- package/dist/rate-limiter/index.mjs.map +1 -1
- package/dist/{resend.provider-DB4IlFjG.mjs → resend.provider-Ur6tU7fK.mjs} +7 -7
- package/dist/resend.provider-Ur6tU7fK.mjs.map +1 -0
- package/dist/router/index.d.mts +2 -2
- package/dist/router/index.mjs +8 -7
- package/dist/{i18n.module-CzXLW9Hy.mjs → router-Cy6DjkvP.mjs} +171 -851
- package/dist/router-Cy6DjkvP.mjs.map +1 -0
- package/dist/seeder/index.d.mts +6 -11
- package/dist/seeder/index.d.mts.map +1 -1
- package/dist/seeder/index.mjs +3 -3
- package/dist/{seeder-zoEfEw9i.mjs → seeder-BADTig4n.mjs} +14 -22
- package/dist/seeder-BADTig4n.mjs.map +1 -0
- package/dist/{signed-url-BQPbv2In.mjs → signed-url-BqUqt5dF.mjs} +1 -1
- package/dist/{signed-url-BQPbv2In.mjs.map → signed-url-BqUqt5dF.mjs.map} +1 -1
- package/dist/{smtp.provider-B6D7zuWX.mjs → smtp.provider-C129sNBT.mjs} +6 -6
- package/dist/smtp.provider-C129sNBT.mjs.map +1 -0
- package/dist/storage/index.d.mts +15 -39
- package/dist/storage/index.d.mts.map +1 -1
- package/dist/storage/index.mjs +3 -3
- package/dist/storage/providers/index.d.mts +2 -2
- package/dist/storage/providers/index.mjs +1 -1
- package/dist/{storage-D8CBP72Z.mjs → storage-BA3ppVYM.mjs} +65 -59
- package/dist/storage-BA3ppVYM.mjs.map +1 -0
- package/dist/{storage-provider.interface-Bd6vA4ak.d.mts → storage-provider.interface-DQMtT42e.d.mts} +2 -3
- package/dist/storage-provider.interface-DQMtT42e.d.mts.map +1 -0
- package/dist/storage.error-C6FY037a.mjs +8 -0
- package/dist/storage.error-C6FY037a.mjs.map +1 -0
- package/dist/{stratal-CNwpbSZl.mjs → stratal-Bdq4IdB3.mjs} +31 -185
- package/dist/stratal-Bdq4IdB3.mjs.map +1 -0
- package/dist/stratal-BsKmvP6J.d.mts +43 -0
- package/dist/stratal-BsKmvP6J.d.mts.map +1 -0
- package/dist/{types-cySNS_lp.d.mts → types-BaeHi67f.d.mts} +1 -1
- package/dist/types-BaeHi67f.d.mts.map +1 -0
- package/dist/{usage-generator-BUdlhnCK.mjs → usage-generator-DTqaUMR9.mjs} +6 -3
- package/dist/usage-generator-DTqaUMR9.mjs.map +1 -0
- package/dist/validation-DUzcjb8Q.mjs +49 -0
- package/dist/validation-DUzcjb8Q.mjs.map +1 -0
- package/dist/validation.context-XTysWJ3b.mjs +117 -0
- package/dist/validation.context-XTysWJ3b.mjs.map +1 -0
- package/dist/websocket/index.d.mts +7 -14
- package/dist/websocket/index.d.mts.map +1 -1
- package/dist/websocket/index.mjs +2 -2
- package/dist/workers/index.d.mts +2 -2
- package/dist/workers/index.mjs +3 -2
- package/dist/workers/index.mjs.map +1 -1
- package/dist/{index-Bnpfq6uk.d.mts → zod-DvWTfRpI.d.mts} +58 -133
- package/dist/zod-DvWTfRpI.d.mts.map +1 -0
- package/dist/zod-hMa3rSHV.mjs +72 -0
- package/dist/zod-hMa3rSHV.mjs.map +1 -0
- package/package.json +10 -10
- package/dist/command-BgSlsS4M.mjs.map +0 -1
- package/dist/command-Cmmf0oHX.d.mts.map +0 -1
- package/dist/controller.decorator-B9vwn0zK.mjs.map +0 -1
- package/dist/cron-manager-CmTimEjf.d.mts.map +0 -1
- package/dist/cron-manager-DQSK8uoV.mjs.map +0 -1
- package/dist/en-DSH_bhh6.mjs +0 -308
- package/dist/en-DSH_bhh6.mjs.map +0 -1
- package/dist/env-D1rcZ8_r.d.mts.map +0 -1
- package/dist/errors-COW9-Mar.mjs +0 -1739
- package/dist/errors-COW9-Mar.mjs.map +0 -1
- package/dist/errors-ORxu1-Bb.mjs +0 -74
- package/dist/errors-ORxu1-Bb.mjs.map +0 -1
- package/dist/events-CzCV8jI8.mjs.map +0 -1
- package/dist/gateway-context-CXmXtaUP.mjs.map +0 -1
- package/dist/guards-DU1_J9YA.mjs.map +0 -1
- package/dist/http-method.decorator-BrgHMdLQ.mjs.map +0 -1
- package/dist/i18n.module-CzXLW9Hy.mjs.map +0 -1
- package/dist/index-Bnpfq6uk.d.mts.map +0 -1
- package/dist/index-ByOyTmqf.d.mts.map +0 -1
- package/dist/index-C1KvMncZ.d.mts.map +0 -1
- package/dist/index-DBd_2wv8.d.mts +0 -263
- package/dist/index-DBd_2wv8.d.mts.map +0 -1
- package/dist/index-DUzWs0z7.d.mts.map +0 -1
- package/dist/index.d.mts.map +0 -1
- package/dist/logger-DlV7NtvD.mjs +0 -440
- package/dist/logger-DlV7NtvD.mjs.map +0 -1
- package/dist/module-BzLg57FK.mjs +0 -866
- package/dist/module-BzLg57FK.mjs.map +0 -1
- package/dist/openapi-tools.service-Zs-Ewv7F.mjs +0 -200
- package/dist/openapi-tools.service-Zs-Ewv7F.mjs.map +0 -1
- package/dist/openapi.service-Bt9bCIrd.d.mts.map +0 -1
- package/dist/quarry-registry-BwY2hOxm.mjs +0 -699
- package/dist/quarry-registry-BwY2hOxm.mjs.map +0 -1
- package/dist/queue.module-BhCjZp6H.mjs.map +0 -1
- package/dist/r2-storage.provider-DuonKeYm.mjs.map +0 -1
- package/dist/rate-limit.decorator-6qzNcSOt.mjs.map +0 -1
- package/dist/resend.provider-DB4IlFjG.mjs.map +0 -1
- package/dist/seeder-zoEfEw9i.mjs.map +0 -1
- package/dist/setup-CefZKV_e.mjs +0 -37
- package/dist/setup-CefZKV_e.mjs.map +0 -1
- package/dist/smtp.provider-B6D7zuWX.mjs.map +0 -1
- package/dist/storage-D8CBP72Z.mjs.map +0 -1
- package/dist/storage-provider.interface-Bd6vA4ak.d.mts.map +0 -1
- package/dist/stratal-CNwpbSZl.mjs.map +0 -1
- package/dist/types-cySNS_lp.d.mts.map +0 -1
- package/dist/usage-generator-BUdlhnCK.mjs.map +0 -1
- package/dist/validation-DtJwAv7O.mjs +0 -248
- package/dist/validation-DtJwAv7O.mjs.map +0 -1
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
//#region src/di/metadata.ts
|
|
2
|
+
const STORE_KEY = Symbol.for("stratal:metadata:store");
|
|
3
|
+
const g = globalThis;
|
|
4
|
+
const store = g[STORE_KEY] ?? (g[STORE_KEY] = /* @__PURE__ */ new WeakMap());
|
|
5
|
+
function getKeyTarget(target, propertyKey) {
|
|
6
|
+
if (propertyKey === void 0) return target;
|
|
7
|
+
let propMap = store.get(target);
|
|
8
|
+
if (!propMap) {
|
|
9
|
+
propMap = /* @__PURE__ */ new Map();
|
|
10
|
+
store.set(target, propMap);
|
|
11
|
+
}
|
|
12
|
+
let propTarget = propMap.get(propertyKey);
|
|
13
|
+
if (!propTarget) {
|
|
14
|
+
propTarget = Object.create(null);
|
|
15
|
+
propMap.set(propertyKey, propTarget);
|
|
16
|
+
}
|
|
17
|
+
return propTarget;
|
|
18
|
+
}
|
|
19
|
+
function defineMetadata(key, value, target, propertyKey) {
|
|
20
|
+
const resolved = getKeyTarget(target, propertyKey);
|
|
21
|
+
let meta = store.get(resolved);
|
|
22
|
+
if (!meta) {
|
|
23
|
+
meta = /* @__PURE__ */ new Map();
|
|
24
|
+
store.set(resolved, meta);
|
|
25
|
+
}
|
|
26
|
+
meta.set(key, value);
|
|
27
|
+
}
|
|
28
|
+
function getMetadata(key, target, propertyKey) {
|
|
29
|
+
const resolved = getKeyTarget(target, propertyKey);
|
|
30
|
+
return store.get(resolved)?.get(key);
|
|
31
|
+
}
|
|
32
|
+
function hasMetadata(key, target, propertyKey) {
|
|
33
|
+
const resolved = getKeyTarget(target, propertyKey);
|
|
34
|
+
return store.get(resolved)?.has(key) ?? false;
|
|
35
|
+
}
|
|
36
|
+
//#endregion
|
|
37
|
+
export { getMetadata as n, hasMetadata as r, defineMetadata as t };
|
|
38
|
+
|
|
39
|
+
//# sourceMappingURL=metadata-BVkc4aUu.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata-BVkc4aUu.mjs","names":[],"sources":["../src/di/metadata.ts"],"sourcesContent":["type MetadataTarget = object | string | symbol\n\nconst STORE_KEY = Symbol.for('stratal:metadata:store')\nconst g = globalThis as Record<symbol, unknown>\nconst store: WeakMap<object, Map<MetadataTarget, unknown>> =\n (g[STORE_KEY] as WeakMap<object, Map<MetadataTarget, unknown>>) ??\n (g[STORE_KEY] = new WeakMap<object, Map<MetadataTarget, unknown>>())\n\nfunction getKeyTarget(target: object, propertyKey?: string | symbol): object {\n if (propertyKey === undefined) return target\n let propMap = store.get(target)\n if (!propMap) {\n propMap = new Map()\n store.set(target, propMap)\n }\n let propTarget = propMap.get(propertyKey) as object | undefined\n if (!propTarget) {\n propTarget = Object.create(null) as object\n propMap.set(propertyKey, propTarget)\n }\n return propTarget\n}\n\nexport function defineMetadata(key: symbol, value: unknown, target: object, propertyKey?: string | symbol): void {\n const resolved = getKeyTarget(target, propertyKey)\n let meta = store.get(resolved)\n if (!meta) {\n meta = new Map()\n store.set(resolved, meta)\n }\n meta.set(key, value)\n}\n\nexport function getMetadata<T = unknown>(key: symbol, target: object, propertyKey?: string | symbol): T | undefined {\n const resolved = getKeyTarget(target, propertyKey)\n return store.get(resolved)?.get(key) as T | undefined\n}\n\nexport function hasMetadata(key: symbol, target: object, propertyKey?: string | symbol): boolean {\n const resolved = getKeyTarget(target, propertyKey)\n return store.get(resolved)?.has(key) ?? false\n}\n"],"mappings":";AAEA,MAAM,YAAY,OAAO,IAAI,yBAAyB;AACtD,MAAM,IAAI;AACV,MAAM,QACH,EAAE,eACF,EAAE,6BAAa,IAAI,SAA+C;AAErE,SAAS,aAAa,QAAgB,aAAuC;CAC3E,IAAI,gBAAgB,KAAA,GAAW,OAAO;CACtC,IAAI,UAAU,MAAM,IAAI,OAAO;CAC/B,IAAI,CAAC,SAAS;EACZ,0BAAU,IAAI,KAAK;EACnB,MAAM,IAAI,QAAQ,QAAQ;;CAE5B,IAAI,aAAa,QAAQ,IAAI,YAAY;CACzC,IAAI,CAAC,YAAY;EACf,aAAa,OAAO,OAAO,KAAK;EAChC,QAAQ,IAAI,aAAa,WAAW;;CAEtC,OAAO;;AAGT,SAAgB,eAAe,KAAa,OAAgB,QAAgB,aAAqC;CAC/G,MAAM,WAAW,aAAa,QAAQ,YAAY;CAClD,IAAI,OAAO,MAAM,IAAI,SAAS;CAC9B,IAAI,CAAC,MAAM;EACT,uBAAO,IAAI,KAAK;EAChB,MAAM,IAAI,UAAU,KAAK;;CAE3B,KAAK,IAAI,KAAK,MAAM;;AAGtB,SAAgB,YAAyB,KAAa,QAAgB,aAA8C;CAClH,MAAM,WAAW,aAAa,QAAQ,YAAY;CAClD,OAAO,MAAM,IAAI,SAAS,EAAE,IAAI,IAAI;;AAGtC,SAAgB,YAAY,KAAa,QAAgB,aAAwC;CAC/F,MAAM,WAAW,aAAa,QAAQ,YAAY;CAClD,OAAO,MAAM,IAAI,SAAS,EAAE,IAAI,IAAI,IAAI"}
|
package/dist/module/index.d.mts
CHANGED
|
@@ -1,32 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as Constructor } from "../types-
|
|
1
|
+
import { An as OnException, Cn as ClassProvider, Dn as ModuleClass, En as FactoryProvider, Ln as InjectionToken, Mn as OnShutdown, Nn as Provider, On as ModuleContext, Pn as ValueProvider, Sn as AsyncModuleOptions, Tn as ExistingProvider, an as ModuleRegistry, jn as OnInitialize, kn as ModuleOptions, wn as DynamicModule, xr as ApplicationError } from "../index-DEncMcC6.mjs";
|
|
2
|
+
import { t as Constructor } from "../types-BaeHi67f.mjs";
|
|
3
3
|
|
|
4
|
+
//#region src/module/module.error.d.ts
|
|
5
|
+
declare class ModuleError extends ApplicationError {}
|
|
6
|
+
//#endregion
|
|
4
7
|
//#region src/module/module.decorator.d.ts
|
|
5
8
|
declare const MODULE_OPTIONS_KEY: unique symbol;
|
|
6
|
-
/**
|
|
7
|
-
* `@Module` decorator - defines a module with imports, providers, controllers, consumers, jobs
|
|
8
|
-
*
|
|
9
|
-
* Uses tsyringe's `@registry` internally to auto-register providers when module is imported.
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* ```typescript
|
|
13
|
-
* @Module({
|
|
14
|
-
* imports: [OtherModule],
|
|
15
|
-
* providers: [MyService, MyRepository],
|
|
16
|
-
* controllers: [MyController],
|
|
17
|
-
* })
|
|
18
|
-
* export class MyModule {}
|
|
19
|
-
* ```
|
|
20
|
-
*/
|
|
21
9
|
declare function Module(options: ModuleOptions): <TFunction extends abstract new (...args: never[]) => unknown>(target: TFunction) => TFunction;
|
|
22
|
-
/**
|
|
23
|
-
* Get module options from decorated class
|
|
24
|
-
*/
|
|
25
10
|
declare function getModuleOptions(target: Constructor): ModuleOptions | undefined;
|
|
26
|
-
/**
|
|
27
|
-
* Check if a class is decorated with `@Module`
|
|
28
|
-
*/
|
|
29
11
|
declare function isModuleClass(target: unknown): target is Constructor;
|
|
30
12
|
//#endregion
|
|
31
|
-
export { AsyncModuleOptions, ClassProvider, DynamicModule, ExistingProvider, FactoryProvider, InjectionToken, MODULE_OPTIONS_KEY, Module, ModuleClass, ModuleContext, ModuleOptions, ModuleRegistry, OnException, OnInitialize, OnShutdown, Provider,
|
|
13
|
+
export { AsyncModuleOptions, ClassProvider, DynamicModule, ExistingProvider, FactoryProvider, InjectionToken, MODULE_OPTIONS_KEY, Module, ModuleClass, ModuleContext, ModuleError, ModuleOptions, ModuleRegistry, OnException, OnInitialize, OnShutdown, Provider, ValueProvider, getModuleOptions, isModuleClass };
|
|
32
14
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/module/module.decorator.ts"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/module/module.error.ts","../../src/module/module.decorator.ts"],"mappings":";;;;cAEa,WAAA,SAAoB,gBAAA;;;cCEpB,kBAAA;AAAA,iBAEG,MAAA,CAAO,OAAA,EAAS,aAAA,uCACa,IAAA,uBAA2B,MAAA,EAAQ,SAAA,KAAY,SAAA;AAAA,iBAM5E,gBAAA,CAAiB,MAAA,EAAQ,WAAA,GAAc,aAAA;AAAA,iBAIvC,aAAA,CAAc,MAAA,YAAkB,MAAA,IAAU,WAAA"}
|
package/dist/module/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { MODULE_OPTIONS_KEY, Module, ModuleRegistry, getModuleOptions, isModuleClass };
|
|
1
|
+
import { d as MODULE_OPTIONS_KEY, f as Module, h as ModuleError, m as isModuleClass, p as getModuleOptions, t as ModuleRegistry } from "../module-xYoHba6B.mjs";
|
|
2
|
+
export { MODULE_OPTIONS_KEY, Module, ModuleError, ModuleRegistry, getModuleOptions, isModuleClass };
|
|
@@ -0,0 +1,422 @@
|
|
|
1
|
+
import { a as ApplicationError } from "./container-storage-GpNNz79X.mjs";
|
|
2
|
+
import { d as Transient, m as inject, s as CONTAINER_TOKEN } from "./di-BO1QIb5H.mjs";
|
|
3
|
+
import { n as getMetadata, r as hasMetadata, t as defineMetadata } from "./metadata-BVkc4aUu.mjs";
|
|
4
|
+
import { n as __decorateParam, t as __decorate } from "./decorate-HgTKAYK8.mjs";
|
|
5
|
+
import { u as HttpException } from "./errors-BBZTnjdq.mjs";
|
|
6
|
+
import { a as isListener } from "./events-D1KdDaiP.mjs";
|
|
7
|
+
import { t as isCommand } from "./is-command-CX5rAfZW.mjs";
|
|
8
|
+
import { t as isSeeder } from "./is-seeder-CYCtELlm.mjs";
|
|
9
|
+
//#region src/module/module.error.ts
|
|
10
|
+
var ModuleError = class extends ApplicationError {};
|
|
11
|
+
//#endregion
|
|
12
|
+
//#region src/module/module.decorator.ts
|
|
13
|
+
const MODULE_OPTIONS_KEY = Symbol.for("stratal:module:options");
|
|
14
|
+
function Module(options) {
|
|
15
|
+
return (target) => {
|
|
16
|
+
defineMetadata(MODULE_OPTIONS_KEY, options, target);
|
|
17
|
+
return target;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function getModuleOptions(target) {
|
|
21
|
+
return getMetadata(MODULE_OPTIONS_KEY, target);
|
|
22
|
+
}
|
|
23
|
+
function isModuleClass(target) {
|
|
24
|
+
return typeof target === "function" && hasMetadata(MODULE_OPTIONS_KEY, target);
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
27
|
+
//#region src/rate-limiter/errors.ts
|
|
28
|
+
/**
|
|
29
|
+
* Thrown when a request exceeds a configured rate limit.
|
|
30
|
+
*
|
|
31
|
+
* HTTP Status: 429 Too Many Requests
|
|
32
|
+
*
|
|
33
|
+
* The {@link ExceptionHandler} renders the body via content negotiation
|
|
34
|
+
* (HTML for HTML clients, JSON for everything else). Standard rate-limit
|
|
35
|
+
* headers (`Retry-After`, `X-RateLimit-*`) are injected by the
|
|
36
|
+
* `respond()` callback registered via `RateLimiterModule.onException`.
|
|
37
|
+
*/
|
|
38
|
+
var TooManyRequestsError = class extends HttpException {
|
|
39
|
+
info;
|
|
40
|
+
constructor(info) {
|
|
41
|
+
super(429, "Too many requests");
|
|
42
|
+
this.info = info;
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
var RateLimiterError = class extends ApplicationError {};
|
|
46
|
+
//#endregion
|
|
47
|
+
//#region src/rate-limiter/rate-limiter.tokens.ts
|
|
48
|
+
const RATE_LIMITER_TOKENS = {
|
|
49
|
+
Registry: Symbol.for("stratal:rate-limiter:registry"),
|
|
50
|
+
Store: Symbol.for("stratal:rate-limiter:store"),
|
|
51
|
+
StoreFactory: Symbol.for("stratal:rate-limiter:store-factory"),
|
|
52
|
+
Options: Symbol.for("stratal:rate-limiter:options"),
|
|
53
|
+
/**
|
|
54
|
+
* Per-app marker registered by RateLimiterModule.onInitialize. Used by
|
|
55
|
+
* ThrottleMiddleware to detect "module not imported".
|
|
56
|
+
*/
|
|
57
|
+
ModuleMarker: Symbol.for("stratal:rate-limiter:module-marker")
|
|
58
|
+
};
|
|
59
|
+
//#endregion
|
|
60
|
+
//#region src/rate-limiter/throttle.middleware.ts
|
|
61
|
+
const cache = /* @__PURE__ */ new Map();
|
|
62
|
+
/**
|
|
63
|
+
* Memoized factory that produces a Stratal `Middleware` class bound to a
|
|
64
|
+
* named limiter. Calling twice with the same name returns the *same* class
|
|
65
|
+
* — important for `Router.middleware` deduplication via class identity.
|
|
66
|
+
*
|
|
67
|
+
* Detection of "module not imported" works against a per-app marker
|
|
68
|
+
* registered by `RateLimiterModule.onInitialize`. We check
|
|
69
|
+
* `isRegistered(marker)` at request time before resolving Registry.
|
|
70
|
+
*/
|
|
71
|
+
function createThrottleMiddleware(name) {
|
|
72
|
+
const existing = cache.get(name);
|
|
73
|
+
if (existing) return existing;
|
|
74
|
+
let ThrottleMiddleware = class ThrottleMiddleware {
|
|
75
|
+
container;
|
|
76
|
+
constructor(container) {
|
|
77
|
+
this.container = container;
|
|
78
|
+
}
|
|
79
|
+
handle(ctx, next) {
|
|
80
|
+
if (!this.container.isRegistered(RATE_LIMITER_TOKENS.ModuleMarker)) throw new RateLimiterError(`RateLimiterModule was not imported. Cannot resolve throttle "${name}". Import RateLimiterModule.forRoot({ store: ... }) in your AppModule.`);
|
|
81
|
+
return this.container.resolve(RATE_LIMITER_TOKENS.Registry).handle(name, ctx, next);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
ThrottleMiddleware = __decorate([Transient(), __decorateParam(0, inject(CONTAINER_TOKEN))], ThrottleMiddleware);
|
|
85
|
+
Object.defineProperty(ThrottleMiddleware, "name", { value: `Throttle(${name})` });
|
|
86
|
+
cache.set(name, ThrottleMiddleware);
|
|
87
|
+
return ThrottleMiddleware;
|
|
88
|
+
}
|
|
89
|
+
//#endregion
|
|
90
|
+
//#region src/router/router.error.ts
|
|
91
|
+
var RouterError = class extends ApplicationError {};
|
|
92
|
+
//#endregion
|
|
93
|
+
//#region src/router/router.internals.ts
|
|
94
|
+
/**
|
|
95
|
+
* Symbol keys for Router internal accessors.
|
|
96
|
+
*
|
|
97
|
+
* These symbols are NOT exported from the public `stratal/router` barrel.
|
|
98
|
+
* Only internal modules (RouterResolver) import them, keeping the Router's
|
|
99
|
+
* public API clean — users never see these methods.
|
|
100
|
+
*
|
|
101
|
+
* Declared as individual unique symbols so TypeScript can distinguish
|
|
102
|
+
* their return types in computed property access.
|
|
103
|
+
*
|
|
104
|
+
* @internal
|
|
105
|
+
*/
|
|
106
|
+
/** @internal */
|
|
107
|
+
const getDefaultEntry = Symbol("Router.getDefaultEntry");
|
|
108
|
+
/** @internal */
|
|
109
|
+
const getGroups = Symbol("Router.getGroups");
|
|
110
|
+
/** @internal */
|
|
111
|
+
const getGlobalMiddleware = Symbol("Router.getGlobalMiddleware");
|
|
112
|
+
//#endregion
|
|
113
|
+
//#region src/router/router.ts
|
|
114
|
+
/**
|
|
115
|
+
* Fluent builder for route and middleware configuration.
|
|
116
|
+
*
|
|
117
|
+
* Scoped methods (`middleware()`, `prefix()`, `domain()`, `name()`, `version()`, `hideFromDocs()`)
|
|
118
|
+
* apply only to this module's controllers or the sub-group's controllers.
|
|
119
|
+
*
|
|
120
|
+
* `use()` registers global middleware (all routes in the entire app).
|
|
121
|
+
* Only callable on the root Router — throws inside `group()` callbacks.
|
|
122
|
+
*
|
|
123
|
+
* `group()` creates sub-groups for specific controllers with a callback.
|
|
124
|
+
* Controllers in a sub-group are excluded from the parent scope.
|
|
125
|
+
*/
|
|
126
|
+
var Router = class Router {
|
|
127
|
+
_isChild;
|
|
128
|
+
_defaultEntry = { middleware: [] };
|
|
129
|
+
_groups = [];
|
|
130
|
+
_globalMiddleware = [];
|
|
131
|
+
constructor(isChild = false) {
|
|
132
|
+
this._isChild = isChild;
|
|
133
|
+
}
|
|
134
|
+
/** Dynamic path prefix. For shared segments like `/:companyId` */
|
|
135
|
+
prefix(path, params) {
|
|
136
|
+
this._defaultEntry.prefix = path;
|
|
137
|
+
this._defaultEntry.params = params;
|
|
138
|
+
return this;
|
|
139
|
+
}
|
|
140
|
+
/** Domain pattern for controllers in this scope */
|
|
141
|
+
domain(pattern) {
|
|
142
|
+
this._defaultEntry.domain = pattern;
|
|
143
|
+
return this;
|
|
144
|
+
}
|
|
145
|
+
/** Name prefix for routes in this scope */
|
|
146
|
+
name(prefix) {
|
|
147
|
+
this._defaultEntry.name = prefix;
|
|
148
|
+
return this;
|
|
149
|
+
}
|
|
150
|
+
/** Middleware applied to controllers in this scope */
|
|
151
|
+
middleware(...middlewares) {
|
|
152
|
+
this._defaultEntry.middleware.push(...middlewares);
|
|
153
|
+
return this;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Apply a named rate limiter to controllers in this scope.
|
|
157
|
+
*
|
|
158
|
+
* The named limiter must be registered via `RateLimiterRegistry.for(name, ...)`
|
|
159
|
+
* (typically inside a module's `onInitialize` hook), and the user must
|
|
160
|
+
* import `RateLimiterModule.forRoot({ store: ... })` in their AppModule.
|
|
161
|
+
*
|
|
162
|
+
* @example
|
|
163
|
+
* ```typescript
|
|
164
|
+
* router.prefix('/uploads').throttle('uploads')
|
|
165
|
+
* router.group([AdminController], (admin) => admin.throttle('admin'))
|
|
166
|
+
* ```
|
|
167
|
+
*/
|
|
168
|
+
throttle(name) {
|
|
169
|
+
this._defaultEntry.middleware.push(createThrottleMiddleware(name));
|
|
170
|
+
return this;
|
|
171
|
+
}
|
|
172
|
+
/** API version for controllers in this scope */
|
|
173
|
+
version(version) {
|
|
174
|
+
this._defaultEntry.version = version;
|
|
175
|
+
return this;
|
|
176
|
+
}
|
|
177
|
+
/** Hide/show routes in this scope from OpenAPI docs */
|
|
178
|
+
hideFromDocs(hide = true) {
|
|
179
|
+
this._defaultEntry.hideFromDocs = hide;
|
|
180
|
+
return this;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Global middleware — applied to ALL routes in the entire app.
|
|
184
|
+
* Only callable on the root Router. Throws if called inside `group()`.
|
|
185
|
+
*/
|
|
186
|
+
use(...middlewares) {
|
|
187
|
+
if (this._isChild) throw new RouterError("router.use() is only allowed on the root Router. It cannot be called inside a group() callback.");
|
|
188
|
+
this._globalMiddleware.push(...middlewares);
|
|
189
|
+
return this;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Create a sub-group for specific controllers/gateways.
|
|
193
|
+
* Controllers in a sub-group are excluded from the parent (default) scope.
|
|
194
|
+
* The callback receives a new Router (without `use()`) for fluent configuration.
|
|
195
|
+
*/
|
|
196
|
+
group(controllers, callback) {
|
|
197
|
+
const childRouter = new Router(true);
|
|
198
|
+
callback(childRouter);
|
|
199
|
+
this._groups.push({
|
|
200
|
+
...childRouter._defaultEntry,
|
|
201
|
+
controllers
|
|
202
|
+
});
|
|
203
|
+
return this;
|
|
204
|
+
}
|
|
205
|
+
[getDefaultEntry]() {
|
|
206
|
+
return this._defaultEntry;
|
|
207
|
+
}
|
|
208
|
+
[getGroups]() {
|
|
209
|
+
return this._groups;
|
|
210
|
+
}
|
|
211
|
+
[getGlobalMiddleware]() {
|
|
212
|
+
return this._globalMiddleware;
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
//#endregion
|
|
216
|
+
//#region src/module/module-registry.ts
|
|
217
|
+
var ModuleRegistry = class {
|
|
218
|
+
container;
|
|
219
|
+
logger;
|
|
220
|
+
modules = [];
|
|
221
|
+
registeredClasses = /* @__PURE__ */ new Set();
|
|
222
|
+
initialized = false;
|
|
223
|
+
allControllers = [];
|
|
224
|
+
allConsumers = [];
|
|
225
|
+
allJobs = [];
|
|
226
|
+
allListeners = [];
|
|
227
|
+
allCommands = [];
|
|
228
|
+
allSeeders = [];
|
|
229
|
+
allRouterConfigs = [];
|
|
230
|
+
constructor(container, logger) {
|
|
231
|
+
this.container = container;
|
|
232
|
+
this.logger = logger;
|
|
233
|
+
}
|
|
234
|
+
register(moduleOrDynamic) {
|
|
235
|
+
const { moduleClass, options } = this.resolveModule(moduleOrDynamic);
|
|
236
|
+
const isDynamic = this.isDynamicModule(moduleOrDynamic);
|
|
237
|
+
if (this.registeredClasses.has(moduleClass)) {
|
|
238
|
+
if (isDynamic) {
|
|
239
|
+
this.logger.debug(`Module ${moduleClass.name} already registered, registering DynamicModule providers`);
|
|
240
|
+
const { module: _, ...dynamicRest } = moduleOrDynamic;
|
|
241
|
+
for (const provider of dynamicRest.providers ?? []) this.registerProvider(provider);
|
|
242
|
+
} else this.logger.debug(`Module ${moduleClass.name} already registered, skipping`);
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
this.registeredClasses.add(moduleClass);
|
|
246
|
+
this.logger.info(`Registering module: ${moduleClass.name}`);
|
|
247
|
+
for (const ImportedModule of options.imports ?? []) this.register(ImportedModule);
|
|
248
|
+
for (const provider of options.providers ?? []) this.registerProvider(provider);
|
|
249
|
+
for (const controller of options.controllers ?? []) {
|
|
250
|
+
this.container.register(controller);
|
|
251
|
+
this.allControllers.push(controller);
|
|
252
|
+
}
|
|
253
|
+
for (const consumer of options.consumers ?? []) {
|
|
254
|
+
this.container.register(consumer);
|
|
255
|
+
this.allConsumers.push(consumer);
|
|
256
|
+
this.logger.info(`Collected consumer: ${consumer.name}`, { queueCount: this.allConsumers.length });
|
|
257
|
+
}
|
|
258
|
+
for (const job of options.jobs ?? []) {
|
|
259
|
+
this.container.register(job);
|
|
260
|
+
this.allJobs.push(job);
|
|
261
|
+
}
|
|
262
|
+
const hasLifecycle = "onInitialize" in moduleClass.prototype || "onShutdown" in moduleClass.prototype || "onException" in moduleClass.prototype || "configureRoutes" in moduleClass.prototype;
|
|
263
|
+
this.modules.push({
|
|
264
|
+
moduleClass,
|
|
265
|
+
options,
|
|
266
|
+
instance: null,
|
|
267
|
+
hasLifecycle
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
registerAll(modules) {
|
|
271
|
+
for (const module of modules) this.register(module);
|
|
272
|
+
}
|
|
273
|
+
async initialize() {
|
|
274
|
+
if (this.initialized) return;
|
|
275
|
+
this.logger.info("Initializing modules...");
|
|
276
|
+
const context = {
|
|
277
|
+
container: this.container,
|
|
278
|
+
logger: this.logger
|
|
279
|
+
};
|
|
280
|
+
for (const registered of this.modules) {
|
|
281
|
+
if (!registered.hasLifecycle) continue;
|
|
282
|
+
const instance = new registered.moduleClass();
|
|
283
|
+
registered.instance = instance;
|
|
284
|
+
if (this.hasOnInitialize(instance)) {
|
|
285
|
+
this.logger.info(`Initializing: ${registered.moduleClass.name}`);
|
|
286
|
+
await instance.onInitialize(context);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
this.initialized = true;
|
|
290
|
+
this.logger.info("All modules initialized");
|
|
291
|
+
}
|
|
292
|
+
getAllControllers() {
|
|
293
|
+
return this.allControllers;
|
|
294
|
+
}
|
|
295
|
+
getAllConsumers() {
|
|
296
|
+
return this.allConsumers;
|
|
297
|
+
}
|
|
298
|
+
getAllJobs() {
|
|
299
|
+
return this.allJobs;
|
|
300
|
+
}
|
|
301
|
+
getAllListeners() {
|
|
302
|
+
return this.allListeners;
|
|
303
|
+
}
|
|
304
|
+
getAllCommands() {
|
|
305
|
+
return this.allCommands;
|
|
306
|
+
}
|
|
307
|
+
getAllSeeders() {
|
|
308
|
+
return this.allSeeders;
|
|
309
|
+
}
|
|
310
|
+
getAllRouterConfigs() {
|
|
311
|
+
if (this.allRouterConfigs.length === 0) {
|
|
312
|
+
for (const { moduleClass, options, instance } of this.modules) if (instance && this.hasRouteConfigurable(instance)) {
|
|
313
|
+
this.logger.debug(`Configuring routes for: ${moduleClass.name}`);
|
|
314
|
+
const router = new Router();
|
|
315
|
+
instance.configureRoutes(router);
|
|
316
|
+
const moduleControllers = options.controllers ?? [];
|
|
317
|
+
this.allRouterConfigs.push({
|
|
318
|
+
router,
|
|
319
|
+
controllers: moduleControllers
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
return this.allRouterConfigs;
|
|
324
|
+
}
|
|
325
|
+
configureExceptionHandlers(handler) {
|
|
326
|
+
for (const { moduleClass, instance } of this.modules) if (instance && this.hasOnException(instance)) {
|
|
327
|
+
this.logger.debug(`Configuring exception handlers for: ${moduleClass.name}`);
|
|
328
|
+
instance.onException(handler);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
async shutdown() {
|
|
332
|
+
this.logger.info("Shutting down modules...");
|
|
333
|
+
const context = {
|
|
334
|
+
container: this.container,
|
|
335
|
+
logger: this.logger
|
|
336
|
+
};
|
|
337
|
+
const reversed = [...this.modules].reverse();
|
|
338
|
+
for (const { moduleClass, instance } of reversed) if (instance && this.hasOnShutdown(instance)) try {
|
|
339
|
+
await instance.onShutdown(context);
|
|
340
|
+
} catch (error) {
|
|
341
|
+
this.logger.error(`Error shutting down ${moduleClass.name}:`, error);
|
|
342
|
+
}
|
|
343
|
+
this.logger.info("All modules shut down");
|
|
344
|
+
}
|
|
345
|
+
hasRouteConfigurable(instance) {
|
|
346
|
+
return typeof instance === "object" && instance !== null && "configureRoutes" in instance && typeof instance.configureRoutes === "function";
|
|
347
|
+
}
|
|
348
|
+
hasOnInitialize(instance) {
|
|
349
|
+
return typeof instance === "object" && instance !== null && "onInitialize" in instance && typeof instance.onInitialize === "function";
|
|
350
|
+
}
|
|
351
|
+
hasOnShutdown(instance) {
|
|
352
|
+
return typeof instance === "object" && instance !== null && "onShutdown" in instance && typeof instance.onShutdown === "function";
|
|
353
|
+
}
|
|
354
|
+
hasOnException(instance) {
|
|
355
|
+
return typeof instance === "object" && instance !== null && "onException" in instance && typeof instance.onException === "function";
|
|
356
|
+
}
|
|
357
|
+
resolveModule(moduleOrDynamic) {
|
|
358
|
+
if (this.isDynamicModule(moduleOrDynamic)) {
|
|
359
|
+
const { module: moduleClass, ...dynamicRest } = moduleOrDynamic;
|
|
360
|
+
const decoratorOptions = getModuleOptions(moduleClass) ?? {};
|
|
361
|
+
return {
|
|
362
|
+
moduleClass,
|
|
363
|
+
options: {
|
|
364
|
+
...decoratorOptions,
|
|
365
|
+
...dynamicRest,
|
|
366
|
+
providers: [...decoratorOptions.providers ?? [], ...dynamicRest.providers ?? []],
|
|
367
|
+
imports: [...decoratorOptions.imports ?? []]
|
|
368
|
+
}
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
const moduleClass = moduleOrDynamic;
|
|
372
|
+
return {
|
|
373
|
+
moduleClass,
|
|
374
|
+
options: getModuleOptions(moduleClass) ?? {}
|
|
375
|
+
};
|
|
376
|
+
}
|
|
377
|
+
isDynamicModule(value) {
|
|
378
|
+
return typeof value === "object" && value !== null && "module" in value && typeof value.module === "function";
|
|
379
|
+
}
|
|
380
|
+
registerProvider(provider) {
|
|
381
|
+
if (typeof provider === "function") {
|
|
382
|
+
this.container.register(provider);
|
|
383
|
+
this.collectIfListener(provider);
|
|
384
|
+
this.collectIfCommand(provider);
|
|
385
|
+
this.collectIfSeeder(provider);
|
|
386
|
+
} else if ("useClass" in provider) {
|
|
387
|
+
this.container.register(provider.provide, provider.useClass);
|
|
388
|
+
this.collectIfListener(provider.useClass);
|
|
389
|
+
this.collectIfCommand(provider.useClass);
|
|
390
|
+
this.collectIfSeeder(provider.useClass);
|
|
391
|
+
} else if ("useValue" in provider) this.container.registerValue(provider.provide, provider.useValue);
|
|
392
|
+
else if ("useFactory" in provider) {
|
|
393
|
+
const { provide, useFactory, inject = [] } = provider;
|
|
394
|
+
this.container.registerFactory(provide, (c) => {
|
|
395
|
+
return useFactory(...inject.map((token) => c.resolve(token)));
|
|
396
|
+
});
|
|
397
|
+
} else if ("useExisting" in provider) this.container.registerExisting(provider.provide, provider.useExisting);
|
|
398
|
+
}
|
|
399
|
+
collectIfCommand(providerClass) {
|
|
400
|
+
if (isCommand(providerClass) && !this.allCommands.includes(providerClass)) {
|
|
401
|
+
this.allCommands.push(providerClass);
|
|
402
|
+
this.logger.debug(`Collected command: ${providerClass.name}`);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
collectIfSeeder(providerClass) {
|
|
406
|
+
if (isSeeder(providerClass) && !this.allSeeders.includes(providerClass)) {
|
|
407
|
+
this.allSeeders.push(providerClass);
|
|
408
|
+
this.logger.debug(`Collected seeder: ${providerClass.name}`);
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
collectIfListener(providerClass) {
|
|
412
|
+
if (isListener(providerClass)) {
|
|
413
|
+
this.container.registerSingleton(providerClass);
|
|
414
|
+
this.allListeners.push(providerClass);
|
|
415
|
+
this.logger.debug(`Collected listener: ${providerClass.name}`);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
};
|
|
419
|
+
//#endregion
|
|
420
|
+
export { getGroups as a, RATE_LIMITER_TOKENS as c, MODULE_OPTIONS_KEY as d, Module as f, ModuleError as h, getGlobalMiddleware as i, RateLimiterError as l, isModuleClass as m, Router as n, RouterError as o, getModuleOptions as p, getDefaultEntry as r, createThrottleMiddleware as s, ModuleRegistry as t, TooManyRequestsError as u };
|
|
421
|
+
|
|
422
|
+
//# sourceMappingURL=module-xYoHba6B.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-xYoHba6B.mjs","names":["internal.getDefaultEntry","internal.getGroups","internal.getGlobalMiddleware"],"sources":["../src/module/module.error.ts","../src/module/module.decorator.ts","../src/rate-limiter/errors.ts","../src/rate-limiter/rate-limiter.tokens.ts","../src/rate-limiter/throttle.middleware.ts","../src/router/router.error.ts","../src/router/router.internals.ts","../src/router/router.ts","../src/module/module-registry.ts"],"sourcesContent":["import { ApplicationError } from '../errors'\n\nexport class ModuleError extends ApplicationError {}\n","import { defineMetadata, getMetadata, hasMetadata } from '../di/metadata'\nimport type { Constructor } from '../types'\nimport type { ModuleOptions } from './types'\n\nexport const MODULE_OPTIONS_KEY = Symbol.for('stratal:module:options')\n\nexport function Module(options: ModuleOptions) {\n return <TFunction extends abstract new (...args: never[]) => unknown>(target: TFunction): TFunction => {\n defineMetadata(MODULE_OPTIONS_KEY, options, target)\n return target\n }\n}\n\nexport function getModuleOptions(target: Constructor): ModuleOptions | undefined {\n return getMetadata<ModuleOptions>(MODULE_OPTIONS_KEY, target)\n}\n\nexport function isModuleClass(target: unknown): target is Constructor {\n return typeof target === 'function' && hasMetadata(MODULE_OPTIONS_KEY, target)\n}\n","import { ApplicationError, HttpException } from '../errors'\n\n/**\n * Thrown when a request exceeds a configured rate limit.\n *\n * HTTP Status: 429 Too Many Requests\n *\n * The {@link ExceptionHandler} renders the body via content negotiation\n * (HTML for HTML clients, JSON for everything else). Standard rate-limit\n * headers (`Retry-After`, `X-RateLimit-*`) are injected by the\n * `respond()` callback registered via `RateLimiterModule.onException`.\n */\nexport class TooManyRequestsError extends HttpException {\n constructor(\n public readonly info: { retryAfter: number; limit: number; resetAt: number },\n ) {\n super(429, 'Too many requests')\n }\n}\n\nexport class RateLimiterError extends ApplicationError {}\n","export const RATE_LIMITER_TOKENS = {\n Registry: Symbol.for('stratal:rate-limiter:registry'),\n Store: Symbol.for('stratal:rate-limiter:store'),\n StoreFactory: Symbol.for('stratal:rate-limiter:store-factory'),\n Options: Symbol.for('stratal:rate-limiter:options'),\n /**\n * Per-app marker registered by RateLimiterModule.onInitialize. Used by\n * ThrottleMiddleware to detect \"module not imported\".\n */\n ModuleMarker: Symbol.for('stratal:rate-limiter:module-marker'),\n} as const\n\nexport type RateLimiterToken = (typeof RATE_LIMITER_TOKENS)[keyof typeof RATE_LIMITER_TOKENS]\n","import { inject } from '../di'\nimport { CONTAINER_TOKEN, type Container } from '../di'\nimport { Transient } from '../di/decorators'\nimport type { Middleware, Next } from '../router/middleware.interface'\nimport type { RouterContext } from '../router/router-context'\nimport type { Constructor } from '../types'\nimport { RateLimiterError } from './errors'\nimport type { RateLimiterRegistry } from './rate-limiter-registry'\nimport { RATE_LIMITER_TOKENS } from './rate-limiter.tokens'\n\nconst cache = new Map<string, Constructor<Middleware>>()\n\n/**\n * Memoized factory that produces a Stratal `Middleware` class bound to a\n * named limiter. Calling twice with the same name returns the *same* class\n * — important for `Router.middleware` deduplication via class identity.\n *\n * Detection of \"module not imported\" works against a per-app marker\n * registered by `RateLimiterModule.onInitialize`. We check\n * `isRegistered(marker)` at request time before resolving Registry.\n */\nexport function createThrottleMiddleware(name: string): Constructor<Middleware> {\n const existing = cache.get(name)\n if (existing) return existing\n\n @Transient()\n class ThrottleMiddleware implements Middleware {\n constructor(\n @inject(CONTAINER_TOKEN) private readonly container: Container,\n ) {}\n\n handle(ctx: RouterContext, next: Next): Promise<Response | void> {\n if (!this.container.isRegistered(RATE_LIMITER_TOKENS.ModuleMarker)) {\n throw new RateLimiterError(`RateLimiterModule was not imported. Cannot resolve throttle \"${name}\". Import RateLimiterModule.forRoot({ store: ... }) in your AppModule.`)\n }\n const registry = this.container.resolve<RateLimiterRegistry>(RATE_LIMITER_TOKENS.Registry)\n return registry.handle(name, ctx, next)\n }\n }\n\n Object.defineProperty(ThrottleMiddleware, 'name', { value: `Throttle(${name})` })\n cache.set(name, ThrottleMiddleware)\n return ThrottleMiddleware\n}\n\n/**\n * Test-only escape hatch: clear the per-name middleware class cache.\n * Production code never needs this.\n */\nexport function _resetThrottleMiddlewareCache(): void {\n cache.clear()\n}\n","import { ApplicationError } from '../errors'\n\nexport class RouterError extends ApplicationError {}\n","/**\n * Symbol keys for Router internal accessors.\n *\n * These symbols are NOT exported from the public `stratal/router` barrel.\n * Only internal modules (RouterResolver) import them, keeping the Router's\n * public API clean — users never see these methods.\n *\n * Declared as individual unique symbols so TypeScript can distinguish\n * their return types in computed property access.\n *\n * @internal\n */\n\n/** @internal */\nexport const getDefaultEntry: unique symbol = Symbol('Router.getDefaultEntry')\n/** @internal */\nexport const getGroups: unique symbol = Symbol('Router.getGroups')\n/** @internal */\nexport const getGlobalMiddleware: unique symbol = Symbol('Router.getGlobalMiddleware')\n","import type { ZodObject } from '../i18n/validation/zod'\nimport { createThrottleMiddleware } from '../rate-limiter/throttle.middleware'\nimport type { Constructor } from '../types'\nimport { RouterError } from './router.error'\nimport type { Middleware } from './middleware.interface'\nimport * as internal from './router.internals'\n\n/**\n * Configuration for a sub-group created via `router.group()`.\n */\nexport interface RouterGroupConfig {\n prefix?: string\n domain?: string\n name?: string\n middleware?: Constructor<Middleware>[]\n version?: string | string[]\n hideFromDocs?: boolean\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- ZodObject generics require any for flexible shape parameter\n params?: ZodObject<any>\n}\n\n/**\n * Internal entry representing a sub-group or the default scope.\n * @internal — used by RouterResolver, not exported publicly.\n */\nexport interface RouterEntry {\n prefix?: string\n domain?: string\n name?: string\n middleware: Constructor<Middleware>[]\n version?: string | string[]\n hideFromDocs?: boolean\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- ZodObject generics require any for flexible shape parameter\n params?: ZodObject<any>\n /** Controllers in this entry. undefined = all controllers not in any sub-group */\n controllers?: Constructor[]\n}\n\n/**\n * Modules implement this to configure routes and middleware.\n * Replaces `MiddlewareConfigurable`.\n *\n * @example\n * ```typescript\n * @Module({ controllers: [UsersController, PostsController] })\n * export class ApiModule implements RouteConfigurable {\n * configureRoutes(router: Router): void {\n * router\n * .name('api.')\n * .middleware(CorsMiddleware)\n * .version('1')\n * }\n * }\n * ```\n */\nexport interface RouteConfigurable {\n configureRoutes(router: Router): void\n}\n\n/**\n * Fluent builder for route and middleware configuration.\n *\n * Scoped methods (`middleware()`, `prefix()`, `domain()`, `name()`, `version()`, `hideFromDocs()`)\n * apply only to this module's controllers or the sub-group's controllers.\n *\n * `use()` registers global middleware (all routes in the entire app).\n * Only callable on the root Router — throws inside `group()` callbacks.\n *\n * `group()` creates sub-groups for specific controllers with a callback.\n * Controllers in a sub-group are excluded from the parent scope.\n */\nexport class Router {\n private readonly _isChild: boolean\n private readonly _defaultEntry: RouterEntry = { middleware: [] }\n private readonly _groups: RouterEntry[] = []\n private readonly _globalMiddleware: Constructor<Middleware>[] = []\n\n constructor(isChild = false) {\n this._isChild = isChild\n }\n\n /** Dynamic path prefix. For shared segments like `/:companyId` */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- ZodObject generics require any for flexible shape parameter\n prefix(path: string, params?: ZodObject<any>): this {\n this._defaultEntry.prefix = path\n this._defaultEntry.params = params\n return this\n }\n\n /** Domain pattern for controllers in this scope */\n domain(pattern: string): this {\n this._defaultEntry.domain = pattern\n return this\n }\n\n /** Name prefix for routes in this scope */\n name(prefix: string): this {\n this._defaultEntry.name = prefix\n return this\n }\n\n /** Middleware applied to controllers in this scope */\n middleware(...middlewares: Constructor<Middleware>[]): this {\n this._defaultEntry.middleware.push(...middlewares)\n return this\n }\n\n /**\n * Apply a named rate limiter to controllers in this scope.\n *\n * The named limiter must be registered via `RateLimiterRegistry.for(name, ...)`\n * (typically inside a module's `onInitialize` hook), and the user must\n * import `RateLimiterModule.forRoot({ store: ... })` in their AppModule.\n *\n * @example\n * ```typescript\n * router.prefix('/uploads').throttle('uploads')\n * router.group([AdminController], (admin) => admin.throttle('admin'))\n * ```\n */\n throttle(name: string): this {\n this._defaultEntry.middleware.push(createThrottleMiddleware(name))\n return this\n }\n\n /** API version for controllers in this scope */\n version(version: string | string[]): this {\n this._defaultEntry.version = version\n return this\n }\n\n /** Hide/show routes in this scope from OpenAPI docs */\n hideFromDocs(hide = true): this {\n this._defaultEntry.hideFromDocs = hide\n return this\n }\n\n /**\n * Global middleware — applied to ALL routes in the entire app.\n * Only callable on the root Router. Throws if called inside `group()`.\n */\n use(...middlewares: Constructor<Middleware>[]): this {\n if (this._isChild) {\n throw new RouterError('router.use() is only allowed on the root Router. It cannot be called inside a group() callback.')\n }\n this._globalMiddleware.push(...middlewares)\n return this\n }\n\n /**\n * Create a sub-group for specific controllers/gateways.\n * Controllers in a sub-group are excluded from the parent (default) scope.\n * The callback receives a new Router (without `use()`) for fluent configuration.\n */\n group(controllers: Constructor[], callback: (router: Omit<Router, 'use'>) => void): this {\n const childRouter = new Router(true)\n callback(childRouter)\n\n this._groups.push({\n ...childRouter._defaultEntry,\n controllers,\n })\n return this\n }\n\n // --- Internal accessors via symbol keys (invisible to consumers) ---\n\n [internal.getDefaultEntry](): RouterEntry {\n return this._defaultEntry\n }\n\n [internal.getGroups](): RouterEntry[] {\n return this._groups\n }\n\n [internal.getGlobalMiddleware](): Constructor<Middleware>[] {\n return this._globalMiddleware\n }\n}\n","import type { Container } from '../di/container'\nimport { isListener } from '../events'\nimport type { LoggerService } from '../logger'\nimport { Router, type RouteConfigurable } from '../router/router'\nimport { isCommand } from '../quarry/is-command'\nimport { isSeeder } from '../seeder/is-seeder'\nimport type { Constructor } from '../types'\nimport { getModuleOptions } from './module.decorator'\nimport type { ExceptionHandler } from '../errors/exception-handler'\nimport type {\n DynamicModule,\n ModuleClass,\n ModuleContext,\n ModuleOptions,\n OnException,\n OnInitialize,\n OnShutdown,\n Provider,\n} from './types'\n\n\ninterface RegisteredModule {\n moduleClass: Constructor\n options: ModuleOptions\n instance: object | null\n hasLifecycle: boolean\n}\n\nexport class ModuleRegistry {\n private modules: RegisteredModule[] = []\n private registeredClasses = new Set<Constructor>()\n private initialized = false\n\n private allControllers: Constructor[] = []\n private allConsumers: Constructor[] = []\n private allJobs: Constructor[] = []\n private allListeners: Constructor[] = []\n private allCommands: Constructor[] = []\n private allSeeders: Constructor[] = []\n private allRouterConfigs: { router: Router; controllers: Constructor[] }[] = []\n\n constructor(\n private readonly container: Container,\n private readonly logger: LoggerService\n ) { }\n\n register(moduleOrDynamic: ModuleClass | DynamicModule): void {\n const { moduleClass, options } = this.resolveModule(moduleOrDynamic)\n const isDynamic = this.isDynamicModule(moduleOrDynamic)\n\n if (this.registeredClasses.has(moduleClass)) {\n if (isDynamic) {\n this.logger.debug(`Module ${moduleClass.name} already registered, registering DynamicModule providers`)\n const { module: _, ...dynamicRest } = moduleOrDynamic\n for (const provider of dynamicRest.providers ?? []) {\n this.registerProvider(provider)\n }\n } else {\n this.logger.debug(`Module ${moduleClass.name} already registered, skipping`)\n }\n return\n }\n\n this.registeredClasses.add(moduleClass)\n this.logger.info(`Registering module: ${moduleClass.name}`)\n\n for (const ImportedModule of options.imports ?? []) {\n this.register(ImportedModule)\n }\n\n for (const provider of options.providers ?? []) {\n this.registerProvider(provider)\n }\n\n for (const controller of options.controllers ?? []) {\n this.container.register(controller)\n this.allControllers.push(controller)\n }\n\n for (const consumer of options.consumers ?? []) {\n this.container.register(consumer)\n this.allConsumers.push(consumer)\n this.logger.info(`Collected consumer: ${consumer.name}`, { queueCount: this.allConsumers.length })\n }\n\n for (const job of options.jobs ?? []) {\n this.container.register(job)\n this.allJobs.push(job)\n }\n\n const hasLifecycle =\n 'onInitialize' in moduleClass.prototype ||\n 'onShutdown' in moduleClass.prototype ||\n 'onException' in moduleClass.prototype ||\n 'configureRoutes' in moduleClass.prototype\n\n this.modules.push({ moduleClass, options, instance: null, hasLifecycle })\n }\n\n registerAll(modules: (ModuleClass | DynamicModule)[]): void {\n for (const module of modules) {\n this.register(module)\n }\n }\n\n async initialize(): Promise<void> {\n if (this.initialized) return\n\n this.logger.info('Initializing modules...')\n\n const context: ModuleContext = {\n container: this.container,\n logger: this.logger,\n }\n\n for (const registered of this.modules) {\n if (!registered.hasLifecycle) continue\n\n const instance = new registered.moduleClass()\n registered.instance = instance\n\n if (this.hasOnInitialize(instance)) {\n this.logger.info(`Initializing: ${registered.moduleClass.name}`)\n await instance.onInitialize(context)\n }\n }\n\n this.initialized = true\n this.logger.info('All modules initialized')\n }\n\n getAllControllers(): Constructor[] {\n return this.allControllers\n }\n\n getAllConsumers(): Constructor[] {\n return this.allConsumers\n }\n\n getAllJobs(): Constructor[] {\n return this.allJobs\n }\n\n getAllListeners(): Constructor[] {\n return this.allListeners\n }\n\n getAllCommands(): Constructor[] {\n return this.allCommands\n }\n\n getAllSeeders(): Constructor[] {\n return this.allSeeders\n }\n\n getAllRouterConfigs(): { router: Router; controllers: Constructor[] }[] {\n if (this.allRouterConfigs.length === 0) {\n for (const { moduleClass, options, instance } of this.modules) {\n if (instance && this.hasRouteConfigurable(instance)) {\n this.logger.debug(`Configuring routes for: ${moduleClass.name}`)\n const router = new Router()\n instance.configureRoutes(router)\n const moduleControllers = options.controllers ?? []\n this.allRouterConfigs.push({ router, controllers: moduleControllers })\n }\n }\n }\n return this.allRouterConfigs\n }\n\n configureExceptionHandlers(handler: ExceptionHandler): void {\n for (const { moduleClass, instance } of this.modules) {\n if (instance && this.hasOnException(instance)) {\n this.logger.debug(`Configuring exception handlers for: ${moduleClass.name}`)\n instance.onException(handler)\n }\n }\n }\n\n async shutdown(): Promise<void> {\n this.logger.info('Shutting down modules...')\n\n const context: ModuleContext = {\n container: this.container,\n logger: this.logger,\n }\n\n const reversed = [...this.modules].reverse()\n\n for (const { moduleClass, instance } of reversed) {\n if (instance && this.hasOnShutdown(instance)) {\n try {\n await instance.onShutdown(context)\n } catch (error) {\n this.logger.error(`Error shutting down ${moduleClass.name}:`, error as Error)\n }\n }\n }\n\n this.logger.info('All modules shut down')\n }\n\n private hasRouteConfigurable(instance: unknown): instance is RouteConfigurable {\n return (\n typeof instance === 'object' &&\n instance !== null &&\n 'configureRoutes' in instance &&\n typeof (instance as RouteConfigurable).configureRoutes === 'function'\n )\n }\n\n private hasOnInitialize(instance: unknown): instance is OnInitialize {\n return (\n typeof instance === 'object' &&\n instance !== null &&\n 'onInitialize' in instance &&\n typeof (instance as OnInitialize).onInitialize === 'function'\n )\n }\n\n private hasOnShutdown(instance: unknown): instance is OnShutdown {\n return (\n typeof instance === 'object' &&\n instance !== null &&\n 'onShutdown' in instance &&\n typeof (instance as OnShutdown).onShutdown === 'function'\n )\n }\n\n private hasOnException(instance: unknown): instance is OnException {\n return (\n typeof instance === 'object' &&\n instance !== null &&\n 'onException' in instance &&\n typeof (instance as OnException).onException === 'function'\n )\n }\n\n private resolveModule(moduleOrDynamic: ModuleClass | DynamicModule): {\n moduleClass: Constructor\n options: ModuleOptions\n } {\n if (this.isDynamicModule(moduleOrDynamic)) {\n const { module: moduleClass, ...dynamicRest } = moduleOrDynamic\n\n const decoratorOptions = getModuleOptions(moduleClass) ?? {}\n const mergedOptions: ModuleOptions = {\n ...decoratorOptions,\n ...dynamicRest,\n providers: [...(decoratorOptions.providers ?? []), ...(dynamicRest.providers ?? [])],\n imports: [...(decoratorOptions.imports ?? [])],\n }\n\n return { moduleClass: moduleClass, options: mergedOptions }\n }\n\n const moduleClass = moduleOrDynamic as Constructor\n const options = getModuleOptions(moduleClass) ?? {}\n return { moduleClass, options }\n }\n\n private isDynamicModule(value: unknown): value is DynamicModule {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'module' in value &&\n typeof (value as DynamicModule).module === 'function'\n )\n }\n\n private registerProvider(provider: Provider): void {\n if (typeof provider === 'function') {\n this.container.register(provider as Constructor)\n this.collectIfListener(provider as Constructor)\n this.collectIfCommand(provider as Constructor)\n this.collectIfSeeder(provider as Constructor)\n } else if ('useClass' in provider) {\n this.container.register(provider.provide, provider.useClass as Constructor)\n this.collectIfListener(provider.useClass as Constructor)\n this.collectIfCommand(provider.useClass as Constructor)\n this.collectIfSeeder(provider.useClass as Constructor)\n } else if ('useValue' in provider) {\n this.container.registerValue(provider.provide, provider.useValue)\n } else if ('useFactory' in provider) {\n const { provide, useFactory, inject = [] } = provider\n this.container.registerFactory(provide, (c) => {\n const deps = inject.map((token) => c.resolve(token))\n return useFactory(...deps)\n })\n } else if ('useExisting' in provider) {\n this.container.registerExisting(provider.provide, provider.useExisting)\n }\n }\n\n private collectIfCommand(providerClass: Constructor): void {\n if (isCommand(providerClass) && !this.allCommands.includes(providerClass)) {\n this.allCommands.push(providerClass)\n this.logger.debug(`Collected command: ${providerClass.name}`)\n }\n }\n\n private collectIfSeeder(providerClass: Constructor): void {\n if (isSeeder(providerClass) && !this.allSeeders.includes(providerClass)) {\n this.allSeeders.push(providerClass)\n this.logger.debug(`Collected seeder: ${providerClass.name}`)\n }\n }\n\n private collectIfListener(providerClass: Constructor): void {\n if (isListener(providerClass)) {\n this.container.registerSingleton(providerClass)\n this.allListeners.push(providerClass)\n this.logger.debug(`Collected listener: ${providerClass.name}`)\n }\n }\n}\n"],"mappings":"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"}
|
package/dist/openapi/index.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { n as OpenAPIObject, r as PathItemObject } from "../
|
|
3
|
-
import { t as OpenAPIService } from "../openapi.service-
|
|
1
|
+
import { Sn as AsyncModuleOptions, er as RouterEnv, wn as DynamicModule } from "../index-DEncMcC6.mjs";
|
|
2
|
+
import { n as OpenAPIObject, r as PathItemObject } from "../zod-DvWTfRpI.mjs";
|
|
3
|
+
import { t as OpenAPIService } from "../openapi.service-CrLlsXAd.mjs";
|
|
4
4
|
import { MiddlewareHandler } from "hono/types";
|
|
5
5
|
|
|
6
6
|
//#region src/openapi/types.d.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/openapi/types.ts","../../src/openapi/openapi.module.ts","../../src/openapi/openapi.tokens.ts","../../src/openapi/services/openapi-config.service.ts","../../src/openapi/services/openapi-tools.service.ts"],"mappings":";;;;;;;;;UAOiB,WAAA;EACf,KAAA;EACA,OAAA;EACA,WAAA;AAAA;;;;UAMe,gBAAA;EACf,OAAA;EACA,KAAA;AAAA;;;AAOF;;KAAY,iBAAA,IAAqB,OAAA,EAAS,gBAAA,KAAqB,iBAAA,CAAkB,SAAA;;;;UAKhE,gBAAA;EAL+D;EAO9E,IAAA;EAP+B;EAS/B,QAAA,GAAW,iBAAA;AAAA;;;AAJb;UAUiB,oBAAA;;EAEf,QAAA;EAVA;EAaA,IAAA,GAAO,WAAA;EAXI;EAcX,eAAA,GAAkB,MAAA;EAdU;EAiB5B,EAAA,GAAK,gBAAA;AAAA;;;;;KAOK,aAAA,IAAiB,IAAA,UAAc,QAAA,EAAU,cAAA;;;;UAKpC,qBAAA;EAff;EAiBA,IAAA,GAAO,OAAA,CAAQ,WAAA;EAdf;EAiBA,WAAA,GAAc,aAAA;AAAA;;AAVhB;;UAgBiB,sBAAA;EACf,QAAA;EACA,IAAA,EAAM,WAAA;EACN,eAAA,GAAkB,MAAA;EAClB,WAAA,GAAc,aAAA;EACd,EAAA,GAAK,gBAAA;AAAA;AAhBP;;;AAAA,UAsBiB,qBAAA;EApBR;;;;EAyBP,QAAA,CAAS,MAAA,EAAQ,qBAAA;EAzBV;;;EA8BP,kBAAA,IAAsB,sBAAA;AAAA;;;
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/openapi/types.ts","../../src/openapi/openapi.module.ts","../../src/openapi/openapi.tokens.ts","../../src/openapi/services/openapi-config.service.ts","../../src/openapi/services/openapi-tools.service.ts"],"mappings":";;;;;;;;;UAOiB,WAAA;EACf,KAAA;EACA,OAAA;EACA,WAAA;AAAA;;;;UAMe,gBAAA;EACf,OAAA;EACA,KAAA;AAAA;;;AAOF;;KAAY,iBAAA,IAAqB,OAAA,EAAS,gBAAA,KAAqB,iBAAA,CAAkB,SAAA;;;;UAKhE,gBAAA;EAL+D;EAO9E,IAAA;EAP+B;EAS/B,QAAA,GAAW,iBAAA;AAAA;;;AAJb;UAUiB,oBAAA;;EAEf,QAAA;EAVA;EAaA,IAAA,GAAO,WAAA;EAXI;EAcX,eAAA,GAAkB,MAAA;EAdU;EAiB5B,EAAA,GAAK,gBAAA;AAAA;;;;;KAOK,aAAA,IAAiB,IAAA,UAAc,QAAA,EAAU,cAAA;;;;UAKpC,qBAAA;EAff;EAiBA,IAAA,GAAO,OAAA,CAAQ,WAAA;EAdf;EAiBA,WAAA,GAAc,aAAA;AAAA;;AAVhB;;UAgBiB,sBAAA;EACf,QAAA;EACA,IAAA,EAAM,WAAA;EACN,eAAA,GAAkB,MAAA;EAClB,WAAA,GAAc,aAAA;EACd,EAAA,GAAK,gBAAA;AAAA;AAhBP;;;AAAA,UAsBiB,qBAAA;EApBR;;;;EAyBP,QAAA,CAAS,MAAA,EAAQ,qBAAA;EAzBV;;;EA8BP,kBAAA,IAAsB,sBAAA;AAAA;;;cChCX,aAAA;ED7BiB;AAM9B;;;;;EAN8B,OCoCrB,OAAA,CAAQ,OAAA,GAAS,oBAAA,GAA4B,aAAA;EAAA,OAqB7C,YAAA,CAAa,OAAA,EAAS,kBAAA,CAAmB,oBAAA,IAAwB,aAAA;AAAA;;;;;;cCxF7D,cAAA;wEFII;EAAA;;;;;;;;;;AAAjB;;;;;;;;;AASA;;;;;AASA;;;cGQa,oBAAA,YAAgC,qBAAA;EAAA,QAIqB,WAAA;EAAA,QAHxD,SAAA;cAGwD,WAAA,GAAc,oBAAA;EHZA;;;;EGmB9E,QAAA,CAAS,MAAA,EAAQ,qBAAA;EHnBuE;EGwBxF,kBAAA,CAAA,GAAsB,sBAAA;EHnBP;;;;EAAA,QG0CP,WAAA;AAAA;;;KCrEL,UAAA,GAAa,MAAA;AAAA,UAED,cAAA;EACf,IAAA;EACA,WAAA;EACA,WAAA,EAAa,UAAA;EACb,MAAA;EACA,IAAA;EACA,UAAA;AAAA;AAAA,UAGe,mBAAA;EACf,MAAA;EACA,IAAA;EACA,OAAA,EAAS,MAAA;AAAA;AAAA,UAGM,UAAA;EACf,IAAA;EACA,UAAA;AAAA;AAAA,KAGU,UAAA,IAAc,MAAA,UAAgB,GAAA,UAAa,OAAA;EACrD,IAAA;EACA,OAAA,GAAU,MAAA;AAAA,MACN,OAAA,CAAQ,QAAA;;;;;;cA6BD,mBAAA;EAAA,wBACa,YAAA;EAAA,QAEhB,KAAA;EAAA,QACA,OAAA;EAAA,QACA,UAAA;EAAA,QAEA,IAAA;cAEI,IAAA,EAAM,aAAA,EAAe,OAAA;IAAY,UAAA,GAAa,UAAA;EAAA;EAS1D,QAAA,CAAS,MAAA,GAAS,UAAA,GAAa,cAAA;EAmB/B,OAAA,CAAQ,IAAA,WAAe,cAAA;EAIjB,WAAA,CAAY,IAAA,UAAc,IAAA,EAAM,MAAA,oBAA0B,OAAA,CAAQ,mBAAA;EAAA,QAmDhE,UAAA;EAAA,QAuBA,YAAA;EAAA,QASA,gBAAA;EAAA,QAOA,gBAAA;EAAA,QA+CA,eAAA;EAAA,QAYA,UAAA;EAAA,QA4BA,SAAA;EAAA,QAaA,YAAA;AAAA"}
|
package/dist/openapi/index.mjs
CHANGED
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { n as OPENAPI_TOKENS, t as OpenApiToolsService } from "../openapi-tools.service-Zs-Ewv7F.mjs";
|
|
1
|
+
import { a as OPENAPI_TOKENS, i as OpenAPIConfigService, n as OpenAPIModule, r as OpenAPIService, t as OpenApiToolsService } from "../openapi-C6lm0RmV.mjs";
|
|
3
2
|
export { OPENAPI_TOKENS, OpenAPIConfigService, OpenAPIModule, OpenAPIService, OpenApiToolsService };
|